软件:Vivado2017.4 板卡:Ego1 型号:xc7a35tcsg324-1
六、纯Verilog实现数字钟
clock1_top.v
`timescale 1ns / 1ps
module clock1_top(
input clk_100MHz,
input clr,
input en,
input mode,
input inc,
output [7:0]a_to_h_0,
output [7:0]a_to_h_1,
output [7:0]an
);
wire clk_200Hz;
wire clk_10Hz;
wire clk_1Hz;
wire [7:0]hour;
wire [7:0]min;
wire [7:0]sec;
wire incd;
wire moded;
wire [7:0]a_to_g_hour;
wire [7:0]a_to_g_min;
wire [7:0]a_to_g_sec;
wire [2:0]blink;
wire [3:0]dp;
clk_div U1(.clk_100MHz(clk_100MHz),
.clk_200Hz(clk_200Hz),
.clk_10Hz(clk_10Hz),
.clk_1Hz(clk_1Hz)
);
debounce2 U2(.clk_200Hz(clk_200Hz),
.clr(~clr),
.inp({inc,mode}),
.outp({incd,moded})
);
clocks_ctrl U3(.clk_1Hz(clk_1Hz),
.clk_10Hz(clk_10Hz),
.clr(~clr),
.en(en),
.mode(moded),
.inc(incd),
.hour(hour),
.min(min),
.sec(sec),
.blink(blink)
);
bindcb8 U4(.b(hour),
.p(a_to_g_hour)
);
bindcb8 U5(.b(min),
.p(a_to_g_min)
);
bindcb8 U6(.b(sec),
.p(a_to_g_sec)
);
x8seg_clock U7(.clk(clk_200Hz),
.x({a_to_g_min,a_to_g_sec}),
.blink(blink[1:0]),
.dp(4'b0100),
.a_to_h(a_to_h_0),
.an(an[3:0])
);
x8seg_clock U8(.clk(clk_200Hz),
.x({8'b0,a_to_g_hour}),
.blink({1'b0,blink[2]}),
.dp(4'b0001),
.a_to_h(a_to_h_1),
.an(an[7:4])
);
endmodule
clk_div.v
`timescale 1ns / 1ps
module clk_div(
input clk_100MHz,
output clk_200Hz,
output clk_10Hz,
output clk_1Hz
);
reg[17:0]cnt_200Hz;
reg[8:0]cnt_10Hz;
reg[9:0]cnt_1Hz;
reg clk_1KHz_reg;
reg clk_200Hz_reg;
reg clk_10Hz_reg;
reg clk_1Hz_reg;
initial
begin
cnt_10Hz =0;
cnt_1Hz =0;
clk_200Hz_reg =0;
clk_10Hz_reg =0;
clk_1Hz_reg= 0;
end
always@(posedge clk_100MHz)
begin
if(cnt_200Hz ==18'h3D08F)
begin
clk_200Hz_reg<=~clk_200Hz_reg;
cnt_200Hz<=0;
end
else
cnt_200Hz<=cnt_200Hz+1;
end
always@(posedge clk_200Hz)
begin
if(cnt_10Hz ==4'h9)
begin
clk_10Hz_reg<=~clk_10Hz_reg;
cnt_10Hz<=0;
end
else
cnt_10Hz<=cnt_10Hz+1;
end
always@(posedge clk_200Hz)
begin
if(cnt_1Hz ==7'h63)//99
begin