BCD计数器设计与使用Verilog

1、设计内容

        四位计数器,实现0---9的计数。

2、代码

module BCD_counter(Clk,Cin,Rst_n,Cout,q);

	input Clk;//计数基准时钟
	input Cin;//计数器进位输入
	input Rst_n;//系统复位
	
	output reg Cout;//计数进位输出
	output q;//计数值输出
	reg [3:0]cnt;//定义计数器寄存器
	//执行计数过程
	always @(posedge Clk or negedge Rst_n)
	begin 
		if(Rst_n == 1'b0)
			cnt <= 4'd0;
		else if (Cin == 1'b1)
		begin
			if(cnt == 4'd9)
			cnt <= 4'd0;
			else 
			cnt <= cnt + 1'b1;
		end
		else 
			cnt <= cnt;
	end 
	//产生进位输出信号
	always @(posedge Clk or negedge Rst_n)
	begin 
		if(Rst_n == 1'b0)
		Cout <= 1'b0;
		else if(Cin == 1'b1 && cnt == 4'd9)
		Cout <= 1'b1;
		else 
		Cout <= 1'b0;
	end
	
	assign q = cnt;


endmodule




`timescale 1ns/1ns
`define clock_period 20


module BCD_counter_tb;
	reg Clk;
	reg Cin;
	reg Rst_n;
	
	wire Cout;
	wire [3:0]q;
	

	BCD_counter BCD_counter0(
	.Clk(Clk),
	.Cin(Cin),
	.Rst_n(Rst_n),
	.Cout(Cout),
	.q(q)
	);

	initial Clk = 1'b1;
	always #(`clock_period/2) Clk = ~Clk;
	
	initial begin 
	Rst_n = 1'b0;
	Cin = 1'b0;
	#(`clock_period*200);
	Rst_n = 1'b1;
	#(`clock_period*20);
	repeat(30)
	begin 
		Cin = 1'b1;
		#(`clock_period);
		Cin = 1'b0;
		#(`clock_period*5);
	end
		#(`clock_period*20)
	$stop;
	end
	
endmodule

 3、RTL电路图

 4、RTL仿真

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

发光中请勿扰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值