BCD码 模24计数器

module BCDmount(clk,clr,dout,cout);
input clk,clr;
output reg[7:0] dout;
output reg cout;
always@(posedge clk,posedge clr)
begin
  if(clr) dout=0;
  else 
    begin
			if(dout[7:4]==2&&dout[3:0]==3)
			  begin
			     cout=1;dout=0;
			  end
			else 
			  begin
			    if(dout[3:0]==9)
				    begin
					   dout[3:0]=0;
						dout[7:4]=dout[7:4]+1;
					 end
				 else
				   dout[3:0]=dout[3:0]+1;
			  end
	 end
end
endmodule
  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个BCD码24计数器Verilog HDL设计代码,其中包括了异步清零和增加减法计数功能。 ```verilog module BCD_Counter( input clk, input rst, input up_down, // 0表示加法计数,1表示减法计数 output reg [3:0] cnt_ones, // 个位计数器BCD码 output reg [3:0] cnt_tens // 十位计数器BCD码 ); reg [3:0] cnt; // 计数器的值 always @(posedge clk or negedge rst) begin if (!rst) begin cnt <= 4'b0000; cnt_ones <= 4'b0000; cnt_tens <= 4'b0000; end else begin if (up_down == 1) // 减法计数 cnt <= cnt - 1; else // 加法计数 cnt <= cnt + 1; if (cnt == 4'hA) // 判断个位计数是否达到10 cnt_ones <= 4'h0; else if (cnt == 4'hF) // 判断个位计数是否达到15 cnt_ones <= 4'hA; else cnt_ones <= cnt_ones + up_down; if (cnt_ones == 4'hA && cnt_tens == 4'h0) // 判断十位计数是否达到10 cnt_tens <= 4'h0; else if (cnt_ones == 4'hF && cnt_tens == 4'h2) // 判断十位计数是否达到2 cnt_tens <= 4'h0; else if (cnt_ones == 4'h0 && up_down == 0) // 判断是否需要进位 cnt_tens <= cnt_tens + 1; else if (cnt_ones == 4'h9 && up_down == 1) // 判断是否需要借位 cnt_tens <= cnt_tens - 1; end end endmodule ``` 其中,cnt代表计数器的值,cnt_ones代表个位计数器BCD码,cnt_tens代表十位计数器BCD码。在每个时钟上升沿时,如果异步清零rst为0,则计数器的值、个位计数器BCD码和十位计数器BCD码清零;否则,根据up_down的值来进行加法计数或减法计数,并根据相应的规则更新个位计数器和十位计数器BCD码。其中,当个位计数器到达10或15时,需要特殊处理,而当十位计数器到达10或2时也需要特殊处理,因为这是一个BCD码24计数器

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值