概述
HDLBits网址:https://hdlbits.01xz.net/wiki/Main_Page
题目
Build a 4-digit BCD (binary-coded decimal) counter. Each decimal digit is encoded using 4 bits: q[3:0] is the ones digit, q[7:4] is the tens digit, etc. For digits [3:1], also output an enable signal indicating when each of the upper three digits should be incremented.
我的设计
题目的意思就是设计一个16位的十进制BCD计数器(个位占4位,十位占4位,百位占4位,千位占4位),然后个位进位,十位进位,百位进位时,都输出一个使能信号,这里提供两种实现的方法,法一是直接实现,不例化模块;法二是先设计一个4位的BCD计数器,然后再例化为16位的BCD计数器。
法一
module top_module (
input clk,
input reset, // Synchronous active-high reset
output [3:1] ena,
output reg [15:0] q);
always @(posedge clk)
if (reset)begin // Count to 10 requires rolling over 9->0 instead of the more natural 15->0
q <=0;
end
else begin
if(q[3:0] != 4'd9)
q[3:0] <= q[3:0]+1;
else begin
q[7:4] <= q[7:4]+1;
q[3:0] <= 0;
if(q[7:4] == 4'd9)begin
q[7:4] <= 0;
q[11:8] <= q[11:8]+1;
if(q[11:8] == 4'd9)begin
q[11:8] <= 0;
q[15:12] <= q[15:12]+1;
if(q[15:12] == 4'd9)begin
q <= 0;
end
end
end
end
end
assign ena[1]=(q[3:0] == 4'd9)?1:0;
assign ena[2]=(q[7:4] == 4'd9 && q[3:0] == 4'd9)?1:0;
assign ena[3]=(q[11:8] == 4'd9 && q[7:4] == 4'd9 && q[3:0] == 4'd9)?1:0;
endmodule
法二
module count4
(
input clk,
input reset,
input ena,
output reg[3:0] q
);
always @ (posedge clk)
begin
if(reset)
q <= 4'b0;
else if (ena)
begin
if(q == 4'd9)
q <= 4'd0;
else
q <= q + 1'b1;
end
end
endmodule
module top_module (
input clk,
input reset, // Synchronous active-high reset
output [3:1] ena,
output [15:0] q);
wire en1, en2, en3, en4;
assign en1 = 1;
assign en2 = (q[3:0] == 4'd9);
assign en3 = (q[7:4] == 4'd9 && q[3:0] == 4'd9);
assign en4 = (q[11:8] == 4'd9 && q[7:4] == 4'd9 && q[3:0] == 4'd9);
//one
count4 inst1_count4
(
.clk(clk),
.reset(reset),
.ena(en1),
.q(q[3:0])
);
//ten
count4 inst2_count4
(
.clk(clk),
.reset(reset),
.ena(en2),
.q(q[7:4])
);
//hundred
count4 inst3_count4
(
.clk(clk),
.reset(reset),
.ena(en3),
.q(q[11:8])
);
//thousand
count4 inst4_count4
(
.clk(clk),
.reset(reset),
.ena(en4),
.q(q[15:12])
);
//用来表示进位
assign ena = {q[11:8] == 4'd9 && q[7:4] == 4'd9 && q[3:0] == 4'd9, q[7:4] == 4'd9 && q[3:0] == 4'd9, q[3:0] == 4'd9};
endmodule
综合的电路
微信公众号
建立了一个微信公众号“Andy的ICer之路”,此公众号主要分享数字IC相关的学习经验,做公众号的目的就是记录自己的学习过程,很多东西回过头来可能就忘记了,为了记住知识和分享知识,希望自己可以保持更新,有兴趣的朋友可以关注一下!
最后
以上就是优秀蜜粉为你收集整理的Verilog专题(十四)BCD码计数器的设计题目我的设计微信公众号的全部内容,希望文章能够帮你解决Verilog专题(十四)BCD码计数器的设计题目我的设计微信公众号所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复