【verilog_8】: 设计60进制计数器,带异步复位、同步使能、同步装载、同步清零、同步置位

1.设计60进制计数器,带异步复位、同步使能、同步装载、同步清零、同步置位

法一

author : Mr.Mao
e-mail : [email protected]

module cnt60x
(
	input clk,
	input reset,
	input [5:0] d,
	input en,
	input load,
	input sclr,
	output reg[5:0] q,
	output cout
	
);


always @(posedge clk,posedge reset)
	if(reset)
		q <= 0;
		else if(sclr)
			q <= 0;

	else if(load)
		q <= d;
	else if(en)
		if(q < 60-1)
			q <= q + 1'b1;
		else
			q <= 0;
		
		
assign cout = (q==60-1);



endmodule 

法二

author : Mr.Mao
e-mail : [email protected]

module CNT_60(rst_a, en_s, load_s, clr_s, clk, q, data, cnt) ;  
input clk, clr_s, rst_a, en_s, load_s;   //后缀有s的代表为同步,后缀为a的代表异步
input [0:5] data ;

output q, cnt;   //其实这里的cnt并不需要输出,只不过为了仿真时更好观察计数过程,把cnt输出

reg [0:5] cnt ;  //计数60,2^5 = 64 > 60
reg q ;


always@(posedge clk or negedge rst_a)
begin

    if(!rst_a)    cnt <= 0 ;		//异步复位
	 
	 else if(en_s)
	     begin
		     if(load_s)             cnt <= data ;  //如果数据加载有效,则令计数器=输入的数据
	   else if(clr_s)              cnt <= 0 ;
		else if(cnt <= 59)         cnt <= cnt + 1 ;
		else                        cnt <= cnt ;
		  
		  end
end

always@(posedge clk)
begin 

  if(cnt == 59)   q <= 1'b1 ;
  else            q <= 1'b0 ;
  
end

endmodule

发布了29 篇原创文章 · 获赞 4 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_43403025/article/details/104092732
今日推荐