重温FPGA设计流程(六、纯Verilog实现数字钟)

本文介绍了使用Vivado 2017.4在Ego1板卡(xc7a35tcsg324-1型号)上,通过纯Verilog语言实现数字钟的设计流程,涉及clock1_top.v、clk_div.v、debounce2.v、clocks_ctrl.v、bindcb8.v和x8seg_clock.v等关键模块。
摘要由CSDN通过智能技术生成

软件: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
	
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值