vivado用basys3开发板实现数字钟,闹钟,整点报时,重置、循环功能
希望以下代码可以帮到大家:
首先是源代码部分
module clock(
input clk, //clka
input clr, //clr为清零信号
input set1, //set1为调节分钟加1的按键信号
input set2, //set2为调节时钟钟加1的按键信号
input set3, //set3为决定数码管显示闹钟时间还是时钟时间的信号
input set4, //set4为时钟时间是显示小时和分钟,还是分钟与秒钟的信号,因为只有四个数码管不能同时显示时、分、秒
input set5, //set5为调节分钟加1的拨码开关信号
input set6, //set6为调节小时加1的拨码开关信号
output [6:0] seg7, //seg7为7段数码管输出驱动信号
output [3:0] an, //an为4个7段数码管的选通信号,低电平有效
output dp, //dp为7段数码管的小数点
output led1, //led1为判断是否到了整点的信号
output led2, //led2为判断当前数码管显示的是闹钟时间还是时钟时间的信号
output led3 //led3为判断是否到了闹钟设定时间的信号
);
wire set7,set8; //set7,set8是综合按键调节与拨码开关调节时间后的调节信号,由于按键开关调节较繁琐,需要一下一下按,所以增加了拨码开关调节时间
wire [7:0] qs,qm,qh; //时钟的时、分、秒,以4位BCD8421码表示
wire [7:0] a_m,a_h; //闹钟的时、分,以4为BCD8421码表示
wire [15:0] data; //四个数码管的显示数据,以4位BCD8421码表示
wire co3; //闹钟模式引用的分钟模块进位信号,实际上用不到
assign dp=1'b1; //不需显示小数点
fenpin u1(.rst(clr),.clk(clk),.clk_fenpin(clk_1));
//模块实例化,产生1Hz时钟,用于秒钟计数
fenpin #2500_00 u2(.rst(clr),.clk(clk),.clk_fenpin(clk_200));
//模块实例化,通过常量传递产生200Hz时钟,用于数码管的动态扫描显示
cnt60 u3(clk_1,clr,qs,co1);
//秒计数模块的实例化;
cnt60 u4(clk1,clr,qm,co2);
//分钟计数模块的实例化,以调整后的秒进位的进位信号clk1作为时钟
cnt24 u5(clk2,clr,qh);
//小时计数模块的实例化,以调整后的分钟进位信号clk2作为时钟
assign set7 = set1 || set5; //拨码开关与按键均可调节时间
assign set8 = set2 || set6;
adjust u6(.clk(clk_1),.co1(co1),.co2(co2),.set1((set7)),.set2((set8)),.clk1(clk1),.clk2(clk2),.led(led2),.clk3(clk3),.clk4(clk4));
//调整时钟时间模块的实例化;
cnt60 u7(clk3,clr,a_m,co3); //得到闹钟模式的分
cnt24 u8(clk4,clr,a_h); //得到闹钟模式的时
//整点报时功能
assign led1