数字IC设计学习笔记_verilog实现BCD计数器

数字IC设计学习笔记

4. verilog实现BCD计数器

1 原理图
2 Verilog 代码
3 Modelsim仿真
  • BCD码:Binary-Coded Decimal,二进码十进数,是一种十进制的数字编码,用4位二进制数来表示十进制数中的0~9个十个数之一。BCD编码又可以分成有权码和无权码两种,其中有权码如:8421码、5421码以及2421码等;无权码如:余3码、格雷码以及余3循环码等。
  • BCD 码中最常用的是8421 码,其各个bit 权值分别是8d、4d、2d、1d;同理5421 码各位的权依次为5d、4d、2d、1d。5421 码特点是最高位连续5 个0 后连续5 个1,故其当计数器采用这种编码时,最高位可产生对称方波输出;余3 码是在8421 码上加0011b 的出来的;码格雷码的特点是任意两个相邻的代码只有一位二进制数不同,编码格式不唯一;余3循环码具有格雷码的特点并且编码的首尾可以连接来进行循环,这样可用反馈移位寄存器来实现,硬件实现简单。
    在这里插入图片描述
  • BCD 码的主要应用之一就是数码管,假设要将十进制数158 显示,一般解决办法是把需要显示的十进制数的个、十、百、千位数等进行拆分,即把158 拆分出1、5、8,然后查出对应的数码管显示段码再送去给数码管连接的IO 口。这个过程可以进行下面的运算:先进行除法运算158/100= 1 得出百位,再取余158%100 = 58 后继续进行除法运算58 / 10 = 5 得出十位,再进行一次取余158%10 = 8,得到个位。以上过程可以看出需要除法,但是由于除法运算是比较消耗计算时间导致整体需要的指令周期太久。但是如果先将其转换为BCD 码,则可大幅度减少运算时间。

1. 原理图
在这里插入图片描述

2 Verilog 代码

//----TOP module--------------------------
module BCD_counter_top(
	input clk,
	input rst_n,
	input cin,
	
	output cout,
	output [11:0] q
);
	wire cout3_0;
	wire cout7_4;
	BCD_counter uut3_0(
		.clk(clk),
		.cin(cin),
		.rst_n(rst_n),
		.cout(cout3_0),
		.q(q[3:0])
	);
	BCD_counter uut7_4(
		.clk(clk),
		.cin(cout3_0),
		.rst_n(rst_n),
		.cout(cout7_4),
		.q(q[7:4])
	);
	BCD_counter uut11_8(
		.clk(clk),
		.cin(cout7_4),
		.rst_n(rst_n),
		.cout(cout),
		.q(q[11:8])
	);
endmodule
//----BCD_counter------------------
module BCD_counter(
	input clk, 
	input rst_n,
	input cin,
	output   cout,
	output [3:0] q
);
	reg [3:0] cnt;
//----cnt-------------------------------	
	always@(posedge clk or negedge rst_n)
		if(!rst_n)
			cnt <= 4'd0;
		else if(cin == 1)begin
			if(cnt == 4'd9)
				cnt <= 4'd0;
			else
				cnt <= cnt + 4'd1;
		end else
			cnt <= cnt;
//----cout-------------------------------
//	always@(posedge clk or negedge rst_n)
//		if(!rst_n)
//			cout <= 0;
//		else if(cin ==1 )begin
//			if(cnt == 4'd9)
//			cout <= 1;
//		else
//			cout <= cout;
//		end else
//			cout <= 0;
	assign cout = (cin ==1 && cnt == 4'd9)? 1'b1:1'b0;	
	assign q = cnt;

endmodule

3 Modelsim仿真
在这里插入图片描述
在这里插入图片描述
部分内容转自小梅哥FPGA自学笔记^^

【注】:个人学习笔记,如有错误,望不吝赐教,这厢有礼了~~~

猜你喜欢

转载自blog.csdn.net/weixin_50722839/article/details/109572565