当前位置:   article > 正文

【verilog_8】: 设计60进制计数器,带异步复位、同步使能、同步装载、同步清零、同步置位_60进制计数器置数和暂停技术代码

60进制计数器置数和暂停技术代码

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

法一

author : Mr.Mao
e-mail : 2458682080@qq.com

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 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

法二

author : Mr.Mao
e-mail : 2458682080@qq.com

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

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/731319
推荐阅读
相关标签
  

闽ICP备14008679号