从 1000 Hz 时钟中,导出一个 1 Hz 信号,称为 OneHertz,可用于驱动一组小时/分钟/秒计数器的使能信号以创建数字挂钟。由于我们希望时钟每秒计数一次,因此必须每秒正好对OneHertz信号进行一个周期的置位。使用模 10 (BCD) 计数器和尽可能少的其他门构建分频器。同时从您使用的每个 BCD 计数器输出使能信号(最快的计数器c_enable[0],最慢的计数器c_enable[2])。
为您提供了以下 BCD 计数器。启用必须为高电平,计数器才能运行。复位是同步的,并设置为高以强制计数器为零。电路中的所有计数器必须直接使用相同的 1000 Hz 信号。
module bcdcount ( input clk, input reset, input enable, output reg [3:0] Q );
module top_module (
input clk,
input reset,
output OneHertz,
output [2:0] c_enable
); //
wire [3:0] q0,q1,q2;
assign c_enable[0] = 1;
assign c_enable[1] = (q0==4'd9);
assign c_enable[2] = ((q0==4'd9)&(q1==4'd9));
bcdcount counter0 (.clk(clk), .reset(reset), .enable(c_enable[0]), .Q(q0));
bcdcount counter1 (.clk(clk), .reset(reset), .enable(c_enable[1]), .Q(q1));
bcdcount counter2 (.clk(clk), .reset(reset), .enable(c_enable[2]), .Q(q2));
assign OneHertz = ((q0==4'd9)&(q1==4'd9)&(q2==4'd9));
endmodule