数字时钟计数器(内含模60计数器以及8421BCD码计数器设计代码)

目录

前言

模60计数器

verilog设计代码如下:

ISE综合

模24的8421BCD码计数器

原理

verilog HDL代码

测试文件

仿真波形

数字时钟计数器

verilog HDL代码

测试代码

仿真波形

ISE综合


前言

这是我刚开始写博客时候写的了,本身结构很丑,我于2018/8/2 15:26重新整理了下结构,就不删了,然后我又重新整理了一份博文,和这个一样,但要比这个清晰,贴出地址:数字时钟计数器(Verilog HDL语言描述)(仿真和综合),可以看这篇以及相关的那几个小模块部分。

简单的数字时钟计数器,其实现方法也是通过计数器的级联,由两个模60计数器和一个模24计数器子模块共同构成,下面的这段代码采用结构性描述方法,U1,U2,U3为调用的两个模60计数器和一个模24计数器子模块,模60计数器实现分秒的计数,模24计数器实现小时的计数。

在进行设计数字时钟计数器之前,分别介绍模60计数器count60以及8421BCD计数器count24。

模60计数器

verilog设计代码如下:

//模60计数器模块
module counter60(clk, rst_n, en, dout, co);
	input clk, rst_n, en;
	output co;
	output [7:0] dout;
	wire co10_1, co10, co6;
	wire [3:0] dout10, dout6;
	count10 U1(.clk(clk), .rst_n(rst_n), .en(en), .dout(dout10), .co(co10_1));
	count6 U2(.clk(clk), .rst_n(rst_n), .en(co10), .dout(dout6), .co(co6));
	and U3(co, co10, co6);
	and U4(co10, en, co10_1);
	assign dout = {dout6, dout10};
endmodule

//模10计数器
module count10(clk, rst_n, en, dout, co);
	input clk, rst_n, en;
	output co;
	output [3:0] dout;
	reg [3:0] dout;
	
	always @ (posedge clk or negedge rst_n)
		begin
			if(!rst_n)
				dout <= 4'b0000;
			else if(en == 1'b1)
				begin
					if(dout == 4'b1001)
						dout <= 4'b0000;
					else 
						dout <= dout + 1'b1;
				end
			else
				dout <= dout;
		end
		
	assign co = dout[0] & dout[3];
endmodule

//模6计数器
module count6(clk, rst_n, en, dout, co);
	input clk,
  • 19
    点赞
  • 194
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 14
    评论
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

李锐博恩

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

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

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

打赏作者

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

抵扣说明:

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

余额充值