多功能数字钟设计
一、实验名称
多功能数字钟设计 二、实验任务及要求
1、熟悉EDA软件的使用;
2、拟定数字钟的组成框图,划分模块; 3、采用分模块、分层次的方法设计电路;
4、各单元模块电路的设计与仿真;总体电路的设计与仿真; 5、总体电路的下载与调试;
6、设计可以采用原理图或HDL语言。 三、实验条件
ISE软件;FPGA实验开发装置Basys2。 四、设计内容及要求 基本功能(必做)
1、以数字形式显示时、分、秒的时间; 2、小时计数器为同步24进制; 3、要求手动校时、校分。 4、仿广播电台正点报时。 扩展功能(选做)
1、可任意设定时间的闹钟; 2、整点自动报小时数;
3、小时显示:12小时/24小时制可切换显示; 4、十进制加/减可逆计数器设计。 五、电路的设计过程 总体框图:
数字钟电路系统主要由主题电路和扩展电路组成,秒计数器计满60后向分计数器进位,分计数器计满60后向小时计数器进位,小时计数器按照“24进制”规律计数。计数器的输出经译码器送显示器。
总体层次结构图: 多功能数字钟顶层模块 All 50MHz分为500Hz 的分频计数器 divider50Mto500 七段显示 译码器 seg7_decodere 4选1数 据选择器 Mux4to1 2_4线译码器 decoder2to4 2选1数 据选择器 Mux2to1 四进制循 环计数器 counter4 比较器 comparator 主体时钟 main_clock 闹钟模块 naozhong 手动校时模块 jiaoshi 24/12小时制 切换模块 change 仿广播电台正 点报时模块 baoshi 整点报时模块 zhengdian 12进制循 环计数器 counter12 24进制循 环计数器 counter24 十进制循 环计数器 counter10 六进制循 环计数器 counter6 十进制可逆加减计数器 c10 50MHz分为1Hz 的分频计数器 divider50Mto1 工作原理
基本功能(必做)
1、以数字形式显示时、分、秒的时间;用七段译码显示器完成。
2、小时计数器为同步24进制;分和秒计数器都是模M=60的计数器,其计数规律为00—01—?—58—59—00?;时计数器是一个24进制计数器,其计数规律为00—01—?—22—23—00?即当数字钟运行到23时59分59秒时,秒的个位计数器再输入一个秒脉冲时,数字钟应自动显示为00时00分00秒。
3、要求手动校时、校分。按一次键即可使小时或分钟增1。
4、仿广播电台正点报时。在59分51秒、53秒、55秒、57秒,59秒LED灯各亮一次。 扩展功能(选做)
1、可任意设定时间的闹钟;闹钟时间可设置。
2、整点自动报小时数;到整点时是几点LED灯就亮几次。 3、小时显示:12小时/24小时制可切换显示; 4、十进制加/减可逆计数器设计。
1、//*****************50MHz分为1Hz的分频计数器*********************** module divider50Mto1(CR,CLK_50M,CLK_1HzOut); input CR,CLK_50M; output reg CLK_1HzOut;
reg[24:0] count_div; //内部节点
parameter clk_freq=50000000; //50MHz时钟输入 parameter out_freq=1; //1Hz时钟输出 always @(posedge CLK_50M) begin if(!CR) begin
CLK_1HzOut<=0; //输出信号被清零 count_div<=0; //分频器的输出被清零 end else begin if(count_div<(clk_freq/(2*out_freq)-1)) count_div<=count_div+1'b1;//分频计数器增1计数 else begin count_div<=0;//分频计数器的输出被清零 CLK_1HzOut<=~CLK_1HzOut;//输出信号取反 end end end
endmodule
测试文件: initial begin // Initialize Inputs CR = 0; CLK_50M = 0; #0.002 CR=1; end
always begin #0.001 CLK_50M=~CLK_50M; end endmodule
由仿真波形看出500Mhz输入周期和1Hz输出周期的比是1:50000000
2、//**********************50MHz分为500Hz的分频计数器************************* module divider50Mto500(CR,CLK_50M,CLK_500HzOut); input CR,CLK_50M;
output reg CLK_500HzOut;
reg[24:0] count_div; //内部节点
parameter clk_freq=50000000; //50MHz时钟输入 parameter out_freq=500; //1Hz时钟输出 always @(posedge CLK_50M) begin if(!CR) begin
CLK_500HzOut<=0; //输出信号被清零 count_div<=0; //分频器的输出被清零 end else begin if(count_div<(clk_freq/(2*out_freq)-1)) count_div<=count_div+1'b1;//分频计数器增1计数 else begin count_div<=0;//分频计数器的输出被清零

