eda,verilog数字钟设计报告

合集下载

Verilog数字钟数电实验报告

Verilog数字钟数电实验报告

专业:电子信息工程班级:电信1305班日期:2015.5.5 第3次实验姓名:康健组别: 6 指导教师:成绩:实验课题:EDA多功能数字钟1、已知条件Quartus II软件、FPGA实验开发装置。

2、主要技术指标以数字形式显示时、分、秒的时间;小时计数器为同步24进制;要求手动校时、校分。

3、实验用仪器PC、FPGA开发板、示波器、稳压电源等4、电路工作原理所谓的时钟,其实本质上就是计数器。

以开发板上的晶振时钟作为时间基准。

然后通过分频模块(计数器)进行分频,得到1Hz的脉冲信号作为秒的信号脉冲,然后用模60的计数器构成秒的计数单元。

每记60下就自动清零且产生进位信号。

将这个进位信号作为分的计数器的使能信号,其中,分计数器也是模为60的计数器。

这里的计数器都是由模10和模6 组成的BCD码的计数器。

个位和十位分别是一个四位的数字。

同理,每记满60,分计数器就会产生一个进位信号,这个进位信号作为小时的使能信号。

小时的计数器就是模24的BCD计数器。

注意,这里的整个电路都是用1HZ的频率作为时间脉冲的,也就是说,这个电路是同步时序的电路。

通过使能,来控制各个部分的时序逻辑。

将小时和分的使能信号在总是为有效电平和下一级进位信号做选择,就是时钟调时状态和正常计时状态的切换。

当在调时状态的时候,时钟每完成一个周期,无论是分钟还是小时,就向前加1,。

最后,将分钟和小时通过译码器连接到数码管。

将秒直接连接到LED灯,完成整个工程的基本功能(扩展功能见选作的实验报告)。

5、电路设计与调试1、模10计数器的设计2、模6计数器的设计3、模60计数器设计(分、秒计数)4、模24计数器设计(小时计数)5、译码器设计6、分频器设计7、时钟整体结构设计6、电路的仿真:1、小时进位的验证:2、分钟进位的验证:3、秒进位的验证:4、testbench的源代码:7、主要技术指标的测量:板子上电以后,将程序下载到板子里面,按复位(rst),时钟开始从零点正常计时。

(2023)EDA课程数字钟设计报告(一)

(2023)EDA课程数字钟设计报告(一)

(2023)EDA课程数字钟设计报告(一)EDA课程数字钟设计报告设计目的本次设计的目的是通过使用EDA software,设计一个能够正常运行的数字钟,使其能够满足一定的时间显示功能。

设计思路本设计主要使用Verilog HDL编程语言,利用EDA software提供的仿真功能,模拟数字钟的运行过程。

具体实现过程如下:1.首先,设置时钟频率,并利用counter计数器进行计数,产生时间基准信号。

2.利用BCD编码对时间进行编码,分别将时、分、秒的数据传至显示器。

3.设计逻辑电路计算秒钟、分针、时钟转动角度。

4.在EDA software上进行仿真,观察数字钟是否正常工作。

设计图样以下为数字钟方案的部分设计图样。

image textimage text实现结果通过复杂的编程训练和模拟,数字钟设计的功能已经被确认。

数字钟电路能够准确地显示当前时间。

同时,数字钟的设计也具有较高的可靠性、稳定性和精度。

并且,数字钟的主板设计紧凑、易于集成。

这些优点使得本次设计非常适合应用于智能仪器、家庭用品和其他数字显示电子设备中。

总结数字钟设计是一项有挑战性的工程,需要设计人员具有充分的编程功底和深入的EDA工具熟练度。

本设计的成功,体现了设计团队的技术实力和团队协作能力,为未来的科技产品发展提供了有力的技术支撑。

改进方案虽然本设计实现了数字钟正常工作的功能,但是我们仍然可以从以下几个方面进行改进:1.在原有电路基础上增加闹钟功能,方便用户定时提醒。

2.增加显示背光,使数字钟更方便在夜间环境下使用。

3.将数字钟设计进行微小的改动使其更小巧便携,方便携带和使用。

参考文献1.微机原理与接口技术(第四版) 教材2.EDA Software (Xilinx ISE) 许可证书致谢在本次数字钟的设计过程中,我们向来自各地的优秀工程师团队表示感谢,感谢他们在繁忙的工作中,准确地指导我们的设计工作。

同时也感谢电子设计自动化(EDA) company提供的软件支持,使得我们能够顺利完成该设计。

verilog实验报告时钟设计

verilog实验报告时钟设计

课程名称:Verilog数字系统设计实验实验项目:时钟姓名:专业:计算机科学与技术班级:学号:计算机科学与技术学院201年月日哈尔滨理工大学计算机科学与技术学院实验报告实验项目名称:时钟设计一、实验目的1. 掌握 Verilog HDL 语言的基本运用;2. 熟悉 QuartusⅡ的简单操作;3. 掌握一个基本 EDA 工程设计流程;4. 掌握时钟的设计基本原理。

二、实验内容计数器部分中包含有三个主要计数部分,分别是十进制、六进制以及二十四进制,其中六进制和十进制共同组成六十进制,即实现分和秒的计数,之所以将其分开是便于分别显示个位和十位,通过编写计数器,来计数信号的数量,从而实现时分秒按各自的进制正常计数,同时,将前一时钟单位的进位信号作为下一时钟单位的clk,即从后向前驱动,这样便实现了时钟的正常运转。

三、实验要点及说明1.编写各个模块的 VHDL 代码并进行编译与波形仿真, 仿真无误后生成元件符号。

2.设计数字钟电路的顶层文件,在顶层文件中调入第一步中生成的元件符号,并根据连接关系将它们连接在一起。

3.引脚分配,为顶层设计文件中的各个输入输出端口分配芯片相应的引脚。

4.下载程序到芯片,观看实验现象是否为预想的那样。

同时使用清零按键看能否实现清零,时间正常走动情况下通过按键能否实现校时。

四、实验结果下载成功后,拨动开关 DP4至髙电平,使六个数码管复位淸零;拨动开关 DP4 至低电平,数字钟开始自动计,此过程中可以通过 1键设置小时数,2 键设置分钟数。

当秒数满 60 则进一位, 分钟数满60 进一位,当显示为 23:59:59 时,秒数在加一则显示 00:00:00,同时指示一天结束的 LED 灯亮 10 秒,之后从新计时。

五、程序代码module clock(clk,rst,load,data,lamp,de, led_g,st_stop,ledcom);// clk-时钟10M,rst-复位,load-初始值设置,st_stop-启动暂停input clk,rst,load,st_stop;input [7:0] data; //初始值output lamp; //倒计时结束指示灯output [2:0]de; //数码管位选output [7:0]led_g; //数码管段码output ledcom; //指示灯公共端reg clk_g; // ..... LED扫描时钟信号......reg clk_s;// 秒时钟reg[15:0] cnt1; // 10ms 分频计数器reg[23:0] cnt2; // 1s 分频器计数器reg[3:0] bcd1; // 个位bcd码reg[3:0] bcd2; // 十位bcd码reg lamp; // 指示灯reg[1:0]state1; // 2位数码管扫描位置寄存器reg[3:0]led_g_bcd; // bcd转段码寄存器parameterLED1=3'b000,//数码管1LED2=3'b001;//数码管2assign ledcom=1;//// 10Mhz 晶振用2个分频器分别产生数码管扫描时钟和秒时钟// 10ms方波时钟clk_galways @(posedge clk)beginif (cnt1 >=50000)begincnt1 <= 0;clk_g <= ~clk_g;endelsecnt1 <= cnt1 +1'b1;end// 1s方波时钟clk_salways @(posedge clk)beginif (cnt2 >=5000000)begincnt2 <= 0;clk_s <= ~clk_s;endelsecnt2 <= cnt2 +1'b1;endalways@(posedge clk_s or negedge rst or posedge load ) beginif(!rst) //复位初始状态beginlamp<=0; //灭灯bcd1<=0; //数码管输出0bcd2<=0; //endelseif (load)beginbcd1<=data[3:0];//设置初值bcd2<=data[7:4];//endelseif (st_stop) // 启动暂停切换//BCD倒计时计算,到0时亮灯beginif(bcd1==9) //个位/*******/beginif(bcd2==5) lamp<=1;elsebeginbcd1<=0;bcd2<=bcd2+1;endend/******/elsebeginbcd1<=bcd1+1;lamp<=0;endendend//数码管对应位置扫描输出always @(posedge clk_g or negedge rst)beginif(!rst)beginstate1<=LED1;led_g_bcd<= 0;endelsecase(state1)LED1:beginled_g_bcd<=bcd1;state1<=LED2;endLED2:beginled_g_bcd<=bcd2;state1<=LED1;endendcaseendassign de=state1; //位置//数码管段码表译码assign led_g=(led_g_bcd==0)? 8'h3F:(led_g_bcd==1)? 8'h06:(led_g_bcd==2)? 8'h5b:(led_g_bcd==3)? 8'h4f:(led_g_bcd==4)? 8'h66:(led_g_bcd==5)? 8'h6d:(led_g_bcd==6)? 8'h7d:(led_g_bcd==7)? 8'h07:(led_g_bcd==8)? 8'h7f:(led_g_bcd==9)? 8'h6f:8'h00; endmodule。

EDA Verilog HDL简易数字钟设计报告

EDA Verilog HDL简易数字钟设计报告

4'd1;
+ 1'b1;
if(hour[7:4] == 4'h6) begin
hour[7:4] = 4'h0; hour[11:8] = hour[11:8]
if(hour[11:8] == 4'ha) begin
hour[11:8] = 4'h0; hour[15:12] = hour[15:12] + 1'b1; if(hour[15:12] == 4'h6) begin
开始
时钟/校准


是否校时?
位选
时钟信号
秒+1
秒计数+1
秒>59?

分计数+1 秒置零
分+1
分>59?

时计数+1 分置零
时+1
时>23?

时置零
图4-2-3 校时模块
4
(3)动态显示模块:由于实验箱的 8 个数码管共用七段输入线,位选也是由 4 位二进制接 线控制,所以动态显示在代码部分会稍有难度。图 4-2-4 是动态显示模块的接线实物图
4 位位选控制
4-2-4 动态显示模块
3、总体设计流程
简易数字钟电路的核心部分就是 EPF10K10LC84-4 芯片,外围接入了分频部分电路、按 键电路和七段动态显示短路。程序部分,先通过模式控制变量判断是正常模式还是校时模式, 如果是校时模式,则手动对时间数据进行置数,同时显示到数码管;如果是正常模式则直将 分频模块的时钟信号接入计数器开始计时,校时与正常时间运行的时间数据都遵循时、分、 秒的进制原则。实验箱的按键模块公共端每 1 秒发出一个低电平信号,其他时候都是高电平, 也就是说按下按键后,只有扫描到了低电平信号,按键才会起作用,否则按键动作将因为无 法扫描到低电平而失灵。所以按键每次按下大约 1 秒的时间才会生效。任何情况下,时间数 据都通过动态显示模块同步显示到数码管。动态显示模块的 8 位(实际上只用了 6 位)数码 管以每 10ms 切换点亮一位数码管,依次循环,达到动态显示的效果。图 4-3-1 是总设计流 程图。

数字钟EDA实验报告

数字钟EDA实验报告

EDA实验报告书题目数字钟学生姓名学号系别物理与信息工程系专业电子信息科学与技术指导教师讲师2014年10月26日摘要数字钟是人们日常生活中经常使用的计时工具,本次的课程设计是基于Verilog HDL的多功能数字钟,完成时、分、秒的显示功能。

设计利用Verilog HDL语言自顶向下的设计理念,突出其作为硬件描述语言的良好的可读性、可移植性以及易于理解等优点。

程序下载到FPGA芯片后,可用于实际的数字钟显示中。

此次设计的逻辑结构主要由分频器、计数器和译码显示器三个模块构成。

分频模块将40Mhz系统基准时钟分频产生两路时钟信号,一路是1HZ的数字钟计时工作频率,一路是数码管动态显示的扫描频率;计时模块对1HZ的时钟信号进行计时,分为时、分、秒三个部分;与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更长的使用寿命,已得到广泛的使用。

数字钟的设计方法有许多种,例如,可用中小规模集成电路组成电子钟;也可以利用专用的电子钟芯片配以显示电路及其所需要的外围电路组成电子钟;钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。

译码显示模块采用动态扫描的方式完成数码管的显示。

最后通过主模块调用三个子模块函数完成整个设计。

1)数字钟电路的基本结构框图如下,它是由两个60进制计数器和一个24进制计数器组成,分别对秒,分,小时进行计时,当计时到23时59分59秒时,再来一个时钟脉冲,则计数器清零,重新开始计时。

clkco 秒分时1、20分频器:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity fenpin is --实体定义为fenpin即本程序实现20分频的功能port(clk:in std_logic;--输入clk接外部晶振clk1:out std_logic;--输出clk1为20分频后的时钟shu:out std_logic_vector(4 downto 0)--shu没有实际意义,用于对外部时钟计数,目的是判断是否为20分频);end fenpin;architecture one of fenpin issignal c1,c2:std_logic_vector(4 downto 0);--c1、c2用于内部计数的信号signal m1:std_logic;--m1用于传递输出clk1的信号beginprocess(clk,c1)beginif clk'event and clk='1' then--时钟上升沿有效if(c1=9) then c1<="00000";m1<=not m1;c2<="00000";--记满10次后复位else c1<=c1+1;c2<=c2+1;--计数少于10次加1end if;end if;end process;clk1<=m1;shu<=c2;--将信号的结果传递给输出end one;2、24进制计数器:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt24 is --定义实体时钟的时port(clk:in std_logic;--定义时钟、复位、输入使能、置输控制端ge:out std_logic_vector(3 downto 0 );--定义时表的个位shi:out std_logic_vector(3 downto 0 );--定义时表的十位c0:out std_logic --定义进位输出end cnt24;architecture two of cnt24 isbeginprocess(clk)variable Q:std_logic_vector(4 downto 0);--Q用于内部计数的变量variable t:std_logic_vector(4 downto 0);--t用于过度的变量,应为输出量与计数量数组的位数不同beginif clk'event and clk='1' then --时钟上升沿有效if(Q>=23) then Q:="00000";c0<='1'; shi<="0000"; ge<="0000";--Q实现0--23的计数else Q:=Q+1;c0<='0';if(Q>19 and Q<24) thenshi<="0010";t:=(Q-"10100");ge<=t(3 downto 0);else if(Q>9 and Q<20) thenshi<="0001";t:=(Q-"01010");ge<=t(3 downto 0);--Q位于10--19之间十位和个位的情况elseshi<="0000";t:=(Q-"00000");ge<=t(3 downto 0);--Q位于20--23之间十位和个位的情况end if;end if;end if;end if;end process;end two;3、60进制计数器:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt60 is --定义实体时钟的时port(clk:in std_logic;--定义时钟、复位、输入使能、置输控制端ge:out std_logic_vector(3 downto 0 );--定义时表的个位shi:out std_logic_vector(3 downto 0 );--定义时表的十位c0:out std_logic --定义进位输出);end cnt60;architecture two of cnt60 isbeginprocess(clk)variable Q:std_logic_vector(5 downto 0);--Q为内部计数变量variable t:std_logic_vector(5 downto 0);--t为内部变量与输出间的过度变beginif clk'event and clk='1' then --时钟上升沿有效if(Q>=59) then Q:="000000";c0<='1'; shi<="0000"; ge<="0000";--Q实现0--23的计数else Q:=Q+1;c0<='0';if(Q>49 and Q<60) thenshi<="0101";t:=(Q-50);ge<=t(3 downto 0);else if(Q>39 and Q<50) thenshi<="0100";t:=(Q-40);ge<=t(3 downto 0);--Q位于10--19之间十位和个位的情况else if(Q>29 and Q<40) thenshi<="0011";t:=(Q-30);ge<=t(3 downto 0);else if(Q>19 and Q<30)then shi<="0010";t:=(Q-20);ge<=t(3 downto 0);else if(Q>9 andQ<20) then shi<="0001";t:=(Q-10);ge<=t(3 downto 0);elseshi<="0000";t:=(Q-0);ge<=t(3 downto 0);--Q位于20--23之间十位和个位的情况end if;end if;end if;end if;end if;end if;end if;end process;end two;4、结合后的模型:仿真1、分频器波形仿真图2、60进制计数器波形仿真图3、24进制计数器波形仿真图4、结合后波形仿真图实验总结这次数字钟的实验,不仅巩固了以前所学过的知识,而且学到了很多书本上学不到的知识,同时锻炼了自己的能力,使自己对以后的路有了更加清楚的认识,对未来有了更多的信心。

数字钟设计报告 verilog EDA

数字钟设计报告 verilog EDA

电子与电气工程系实习报告书实习名称:数字钟设计年纪专业及班级: 08通信工程1班姓名:学号:指导老师:评定成绩:教师评语:指导老师签名:20 年月日基于FPGA 的数字时钟设计一、课程设计目的1、进一步熟悉Quartus Ⅱ的软件使用方法;2、 熟悉可编程逻辑器件的开发流程及硬件测试方法;3、熟悉基于FPGA 的综合数字系统设计方法;二、课程设计任务设计一台可以显示时、分、秒的数字钟。

如图1所示为基于FPGA 的数字钟设计的系统框图。

FPGA数码管控制数码管控制数码管控制重启校时图1 数字钟系统三、设计要求1、能直接显示小时、分、秒,其中小时为以二十四为计数周期;2、当电路发生走时错误时,要求电路有校时功能,可以对时、分单独校正;3、具有闹钟功能,即输入想要定时的时间,当时钟到达该时间时报警,系统可由灯亮代表报警信号。

四、实验设备1、EDA6000实验箱一台2、PC 机一台五、整体系统设计方案1、总体思路和结构方框图由上面的方框图可以知道整个数字钟的设计分为6个功能模块,分别是时钟计时模块、闹钟设置模块、日期计数模块、校时模块(分别能对时钟时间、闹钟时间和日期进行校对)、闹钟报时模块以及数码管显示模块。

各个模块各自完成各自的功能互不干扰却相互合作,共同晚上数字钟的时间显示、日期显示、闹铃设置报时和时间、日期的校正功能。

数字钟的使用图如下:时钟部分闹钟部分 日期部分 校时部分 报时部分 显示切换部分 FPGAK2 K1CLK JF/D JH/M NF NH SOUND数码管显示如上图所示各个管脚的功能CLK:为数字钟整个系统的时钟信号,频率为1HZ;K1\K2:为时钟系统的使能端,用来切换显示功能和校时功能;JF/D:时间校时用来校正分的部分以及校正日期的天数;JH/M:时间校时用来校正时的部分以及校正日期的月数;NF:设置闹钟分的部分;NH:设置闹钟时的部分;SOUND:报时声音输出信号。

2、各模块设计思路(1)时钟模块由于数字钟设计要求用24进制,所以整个时钟用两个60进制计数器和一个24进制计数器分别级联在一起共同完成数字钟时间跳动功能。

eda数字钟实验报告

eda数字钟实验报告

eda数字钟实验报告EDA数字钟实验报告本次实验旨在设计并实现一个EDA数字钟。

通过这个实验,我们将学习如何使用EDA工具来设计数字电路,并通过实际的电路实现来验证我们的设计。

1. 实验背景数字钟是我们日常生活中常见的设备之一。

它不仅可以显示时间,还具有闹钟等功能。

在这个实验中,我们将使用EDA工具来设计一个数字钟电路,并通过FPGA实现这个电路。

2. 实验目标本次实验的目标是设计一个能够显示小时、分钟和秒的数字钟电路。

我们将使用七段数码管来显示这些信息,并通过按键来设置时间和闹钟。

3. 设计思路我们的设计思路如下:3.1 时钟模块我们首先需要设计一个时钟模块,用来产生一个固定的时钟信号。

我们可以使用FPGA的时钟模块来实现这个功能,或者使用外部的晶振电路。

3.2 数码管驱动模块接下来,我们需要设计一个数码管驱动模块,用来将数字转换为七段数码管的显示信号。

我们可以使用查找表或者逻辑门电路来实现这个功能。

3.3 时间设置模块为了能够设置时间,我们需要设计一个时间设置模块。

这个模块可以通过按键来设置小时、分钟和秒。

3.4 闹钟设置模块类似于时间设置模块,我们还需要设计一个闹钟设置模块。

这个模块可以通过按键来设置闹钟的小时和分钟。

3.5 主控制模块最后,我们需要设计一个主控制模块,用来控制时钟、数码管驱动、时间设置和闹钟设置模块之间的交互。

这个模块可以根据设置的时间和闹钟来控制数码管的显示。

4. 电路实现根据我们的设计思路,我们使用EDA工具来实现我们的数字钟电路。

我们使用VHDL语言来描述电路,并使用模块化的方式来组织我们的代码。

5. 实验结果经过实际的电路实现和测试,我们成功地实现了数字钟电路。

我们可以通过按键来设置时间和闹钟,并通过七段数码管来显示时间和闹钟。

6. 实验总结通过这个实验,我们学习了如何使用EDA工具来设计数字电路,并通过实际的电路实现来验证我们的设计。

我们深入了解了数字钟的工作原理,并学会了如何使用VHDL语言来描述电路。

EDA设计数字钟实验报告

EDA设计数字钟实验报告

南京理工大学EDA(Ⅱ)实验报告——多功能数字钟姓名:学号:学院:指导教师:时间:2014/11/3~2014/11/7摘要日益复杂的电子线路使得基于原理图的设计越来越复杂,甚至不切实际。

硬件描述语言的诞生,对设计自动化起到了极大的促进和推动作用。

Verilog HDL就是在用途最广泛的C语言的基础上发展起来的一种硬件描述语言,实现了从算法级、门级到开关级的多种抽象设计层次的数字系统建模,具有仿真,验证,故障模拟与时序分析等功能。

本文利用Verilog HDL语言,采用自顶向下的设计方法设计多功能数字钟,并通过QuartusⅡ分块进行了仿真。

此程序通过下载到FPGA芯片后,可实现实际的数字钟显示,具有基本的计时显示和设置,时间校正,整点报时,12h/24h转换,闹钟设置和闹铃控制的功能。

关键词: FPGA, Verilog HDL, QuartusⅡ, EP3C25F324C8,数字钟AbstractThe development of electronic circuit has grown to be too complicated to be designed base on schematic diagram. The birth of HDL accelerated the development of electronic design automation drastically. Verilog HDL is one of the HDL with multiple and strong functions.In this thesis, a complex digital system is designed in the bottom-up way with Verilog HDL and is simulated by QuartusⅡ. The function of a digital clock can be realized by downloading the program to FPGA, which includes timing, time-setting, hourly chiming, 12/24transforming, bell-setting and bell-controlling.Keywords: FPGA, Verilog HDL, QuartusⅡ, EP3C25F324C8,Digital clock目录摘要Abstract第一章数字钟设计要求说明第二章数字钟的设计思路和工作原理第三章模块的Verilog HDL设计与仿真3.1 计数器模块3.2 基本计时顶层模块3.3 分频模块3.4 整点报时模块3.5闹钟模块3.6 LED数码管显示模块3.7 数字钟顶层模块第四章FPGA实现第五章总结5.1 遇到的问题与解决方案5.2 尚存在的不足之处5.3 收获与感悟参考文献第一章数字钟设计要求说明(一)数字钟可以正常进行基本的时,分,秒计时功能。

EDA设计(II)实验报告数字电子钟

EDA设计(II)实验报告数字电子钟

EDA设计(II)实验报告-数字电子钟实验报告:数字电子钟一、实验目的本实验旨在通过使用EDA设计软件,设计并实现一个具有时、分、秒功能的数字电子钟。

通过学习使用EDA工具,掌握数字电路设计的基本步骤和技巧,培养实践能力和创新思维。

二、实验原理数字电子钟是一种以数字形式显示时间的装置,它利用了时、分、秒的计时原理。

核心部分包括一个时钟发生器,用于产生标准时间信号,以及一个计数器,用于对时间进行计数并显示。

此外,还需要一些控制逻辑来控制时、分、秒的进位和显示。

三、实验步骤1.设计准备:在开始设计之前,首先明确设计要求和功能。

考虑到实验的复杂性和可实现性,我们采用最简单的电路结构,即基于计数器和译码器的数字电子钟。

2.绘制电路图:使用EDA设计软件(如Quartus II)绘制电路图。

首先创建新项目,然后添加必要的元件(如74LS192计数器、74LS248译码器等),并根据设计要求连接元件。

3.编写程序:使用硬件描述语言(如VHDL或Verilog)编写计数器和译码器的程序。

确保程序能够实现所需的功能,并进行仿真测试。

4.编译和下载:将程序编译成可下载的配置文件,然后下载到FPGA开发板上。

5.硬件测试:连接开发板到PC,启动程序,观察数字电子钟的显示情况。

检查时间是否准确,各部分功能是否正常。

6.性能评估:对数字电子钟的性能进行评估,包括计时精度、稳定性等指标。

根据评估结果对设计进行优化。

四、实验结果与分析1.设计结果:经过上述步骤,我们成功地设计并实现了一个基于FPGA的数字电子钟。

通过EDA软件和硬件描述语言,我们实现了计数器和译码器的功能,并完成了程序的编写和下载。

2.性能分析:经过测试,我们的数字电子钟具有较高的计时精度和稳定性。

时间显示准确,各部分功能正常。

这表明我们的设计是成功的。

3.优化方向:虽然我们的数字电子钟已经具有较好的性能,但仍有一些方面可以优化。

例如,可以考虑添加更多的功能,如闹钟、温度显示等;也可以进一步优化电路结构,降低成本和提高性能。

EDA课程数字钟设计报告(1)

EDA课程数字钟设计报告(1)

EDA课程数字钟设计报告(1)EDA课程数字钟设计报告一、设计目标:本次设计要求设计一款数字钟,要求具有如下功能:1.计时功能:能够以时、分、秒的形式显示时间,每经过一秒钟就自动更新时间。

2.报时功能:能够在每个整点或半个小时时报时,并具有报时器关闭功能。

3.闹钟功能:设定闹钟时间后,在设定时间到达时自动响铃。

4.指示功能:能够以数字形式指示时间,并能在背景板上对时间进行显示。

二、方案设计:1.硬件设计:本次设计所需器材包括Cyclone IV E FPGA,七段数码管以及电路底板。

Cyclone IV E是英特尔公司推出的第四代Cyclone系列FPGA器件,具有可编程的逻辑元件、存储器单元和DSP功能单元等特点,足以满足本项目所需的复杂性。

七段数码管是一种显示器件,可以用来显示数字和一些字母。

本设计采用了常见的共阳极七段数码管。

电路底板是一个电路板,用于连接各种测试设备并测试控制电路。

2.软件设计:本设计的软件应该被分为以下几个部分来实现:1.时钟模块:该模块负责自动更新钟表,更新范围应该包括时、分、秒的更新。

2.闹钟模块:该模块负责实现闹钟功能,比较当前时间和设定时间,如果相同,则自动响铃。

3.报时模块:该模块负责在每个整点或半个小时时报时,并可自动关闭报时器。

4.数字显示模块:该模块主要用于以数字形式指示时间,并能在背景板上显示时间。

5.用户交互模块:该模块负责接受用户输入,开关闹钟、报时器,并显示设置的时间和状态信息。

三、实现:1. 外部电路该设计采用七段数码管显示时间,其中每个数码管都有8个引脚,分别对应7条段和一个共阳极。

在数字显示时,需要依次将每个数码管复位,并发送相应的数据信号,以显示所需的数字。

数字与LED的亮度控制采用PWM宽度调制技术,可实现手动调节亮暗。

2. 操作流程本设计操作流程为:用户首先输入设定的闹钟时间、关闭报时器的时间间隔及报时器、闹钟等的开启与关闭状态。

系统开始计时并根据所设定的时间执行相应操作。

EDA设计报告-数字钟

EDA设计报告-数字钟

一、设计要求1、设计一个能显示1/10秒、秒、分、时的12小时数字钟。

2、熟练掌握各种计数器的使用。

能用计数器构成十进制、六十进制、十二进制等所需进制的计数器。

能用低位的进位输出构成高位的计数脉冲。

3、“时显示”部分应注意12点后显示1点。

4、注意各部分的关系,由低位到高位逐级设计、调试。

5、时钟显示使用数码管显示。

二、系统方案论证与模块划分1、计数器模块计数器模块中,1/10秒采用带进位的10进制功能模块,秒和分采用带进位的60进制功能模块,小时采用不带进位的12进制功能模块。

计数器模块均用Verilog HDL语言编写,实现计数逻辑功能。

(1)十进制计数器设计程序如下:module ssecond(q,rco,clk,reset);input clk,reset;output [3:0] q;output rco;reg rco;reg [3:0] q;always @(posedge clk or negedge reset)beginif(~reset)q<=4'b0000;else if (q==4'b1001) begin q<=4'b0000; rco=1;endelse begin q<=q+1'b1; rco=0;endendendmodule经编译、仿真、下载,满足要求。

然后通过Create Default Symbol,生成符号体如下:(2)六十进制计数器设计程序如下:module second(qh,ql,rco,clk,reset);output[3:0]qh;output[3:0]ql;output rco;reg [3:0]qh;reg [3:0]ql;reg rco;input clk,reset;always @(posedge clk or negedge reset)beginif(~reset){qh,ql}<=0;elsebeginif({qh,ql}==8'h59)begin {qh,ql}<=0;rco<=1;endelsebeginif(ql==9)begin ql<=0; qh<=qh+1;endelsebegin ql<=ql+1;rco<=0;endendendendendmodule经编译、仿真、下载,满足要求。

(完整word版)Verilog数字钟设计实验报告

(完整word版)Verilog数字钟设计实验报告

基于FPGA实现多功能数字钟——电子系071180094王丛屹摘要本文利用Verilog HDL语言自顶向下的设计方法设计多功能数字钟,并通过ISE完成综合、仿真.此程序通过下载到FPGA 芯片后,可应用于实际的数字钟显示中,实现了基本的计时显示和设置,调整时间,闹钟设置的功能.[关键词]FPGA;Verilog HDL;数字钟一、多功能数字钟的设计设计一个多功能数字时钟,具有时分、秒计数显示、闹钟功能。

能够利用按键实现对闹钟时间的设定并在当前显示时间到时后能够进行闹钟提示.能够利用按键实现“较时”、“较分"功能,随时对数码管的显示进行校正和校对.数字中系统主要由系统时钟,三个功能按键(mode,turn ,change ),FPGA ,数码管和蜂鸣器部分组成。

图: 多功能数字钟总体设计模块 以下就各个模块说明其功能1. 分频模块由于FPGA内部提供的时钟信号频率大约为50MHz,在这需要将它转化成1Hz的标准时钟信号供数字钟的计时显示;在此我采用了级联分频法.RTL图如下:代码如下:always @(posedge clk_1)if ( cnt2 〈156/2—1)/////////////////////////////////////100分频,生成10000Hz信号begincnt2 〈= cnt2 + 1;endelsebegincnt2 〈= 0;clk_2 <= ~clk_2;endalways @(posedge clk_2)if ( cnt5 〈10/2-1) /////////////////////////////////////////10分频,生成1kHz标准信号begincnt5〈= cnt5 + 1;endelsebegincnt5〈= 0;clk_1k〈= ~clk_1k;endalways @(posedge clk_2)if ( cnt3 < 100/2—1)//////////////////////////////////////////100分频,生成100Hz信号begin最终输出的是1Hz,100Hz,1kHz的标准时钟信号clk_1Hz ,clk_100Hz,clk_1k。

EDA综合设计与实践课程设计用VerilogHDL设计电子钟

EDA综合设计与实践课程设计用VerilogHDL设计电子钟

EDA综合设计与实践课程设计用VerilogHDL设计电子钟广东工业大学实验报告信息工程学院通信工程专业 04 班成绩评定_______学号姓名张凤珠教师签名_______实验题目用Verilog HDL设计电子钟第 17 周至第 17 周一、课程设计目的和要求目的:1. 学会使用quantusⅡ软件(编译、仿真等),并利用它进行设计一些简单的数字电路;2. 利用实验室提供的GW48 SOPC系统主板,结合quantusⅡ软件实现电子钟的功能显示。

要求:电子钟应实现如下功能:1.时钟显示功能:,该电子钟正常显示小时、分钟、秒,各用2位数码管(共6位数码管)显示范围为0—23时59分59秒,分辨率为1秒,包括启动与停止。

2.校时功能:包括小时校准和分钟校准。

3.跑表:包括跑表清零、启动计时、停止及继续计时功能。

二、实验器件实验室提供的GW48 SOPC系统主板实验箱三、设计方案和源程序代码首先分析电子钟要实现的三个功能,然后确定它的基本结构,因为设计时电子钟的三个基本功能都要用到数码管显示,考虑到三者为了避免竞争数码管资源的问题,因此设计时电子钟有3个主要输入按键K1、K2、K3,分别为时间显示、校时功能、跑表的启动,而且是当任一个按键按下,其余两个键都无效,即此时只有按下的键才有效,执行该键所控制功能的启动。

其次,各个功能模块的设计。

A 、对于时间显示模块中,涉及到的是时分秒各个计数器的设计,“秒计数器”采用60进制计数器,每累计60秒,发出一个“分脉冲”信号,该信号将被送到“分计数器”。

“分计数器”采用60进制计数器,每累计60分,发出一个“分脉冲”信号,该信号被送到“时计数器”。

“时计数器”采用24进制计数器,可实现24小时的累计计数。

B 、对于校时模块,同样用到了上述的时分计数器,不过只是能实现校时分钟和小时功能,分别用K4、K5键控制,做法是每按下一次键,对应的计数器加一。

C、最后是跑表模块,这相对于前面两个模块较为复杂,它有计时复位、启动和计时停止三个功能,分别用K6、K8、K7按键控制,这里用到了毫秒、秒、分钟计数器,其中“毫秒计数器”采用100进制计数器,每累计100毫秒产生一个“秒脉冲”信号,该信号将作为“秒计数器”的时钟脉冲,其余同A所述。

本科毕业设计论文--eda课程设计报告多功能数字钟设计

本科毕业设计论文--eda课程设计报告多功能数字钟设计

湖北大学物电学院EDA课程设计报告(论文)题目:多功能数字钟设计专业班级: 14微电子科学与工程*名:**时间:2016年12月20日指导教师:万美琳卢仕完成日期:2015年12月20日多功能数字钟设计任务书1.设计目的与要求了解多功能数字钟的工作原理,加深利用EDA技术实现数字系统的理解2.设计内容1,能正常走时,时分秒各占2个数码管,时分秒之间用小时个位和分钟个位所在数码管的小数点隔开;2,能用按键调时调分;3,能整点报时,到达整点时,蜂鸣器响一秒;4,拓展功能:秒表,闹钟,闹钟可调3.编写设计报告写出设计的全过程,附上有关资料和图纸,有心得体会。

4.答辩在规定时间内,完成叙述并回答问题。

目录(四号仿宋_GB2312加粗居中)(空一行)1 引言 (1)2 总体设计方案 (1)2.1 设计思路 (1)2.2总体设计框图 (2)3设计原理分析 (3)3.1分频器 (4)3.2计时器和时间调节 (4)3.3秒表模块 (5)3.4状态机模块 (6)3.5数码管显示模块 (7)3.6顶层模块 (8)3.7管脚绑定和顶层原理图 (9)4 总结与体会 (11)多功能电子表摘要:本EDA课程主要利用QuartusII软件Verilog语言的基本运用设计一个多功能数字钟,进行试验设计和软件仿真调试,分别实现时分秒计时,闹钟闹铃,时分手动较时,时分秒清零,时间保持和整点报时等多种基本功能关键词:Verilog语言,多功能数字钟,数码管显示;1 引言QuartusII是Altera公司的综合性PLD/FPGA开发软件,支持原理图、VHDL、VerilogHDL 以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程,解决了传统硬件电路连线麻烦,出错率高且不易修改,很难控制成本的缺点。

利用软件电路设计连线方便,修改容易;电路结构清楚,功能一目了然2 总体设计方案2.1 设计思路根据系统设计的要求,系统设计采用自顶层向下的设计方法,由时钟分频部分,计时部分,按键调时部分,数码管显示部分,蜂鸣器四部分组成。

EDA时钟实验报告

EDA时钟实验报告

学校:五邑大学学院:信息工程学院姓名:梁杰帆实验:数字时钟一、实验目的:1.了解VHDL的程序设计,学会编写,调试,运行和仿真。

2.掌握数字顶层原理图的设计与仿真。

3.掌握多位计数器相连的设计方法。

4.掌握十二进制,六十进制计数器的设计方法。

二、设计要求使用顶层原理图与Verilog语言设计一个数字时钟,要求可以显示时,分,秒。

三、顶层原理图设计3.1、模六十计数器模六十计数器由一个模六与模十的lpm计数器组合而成。

3.2、模十二计数器模十二计数器有两个模十的74160计数器组合而成。

整体结构图:功能描述:电路时钟由FPBA内部50MHZ脉冲提供,经由50M_100HZ_fenpin模块分频为100HZ的脉冲。

输入mod60的计数器,当作秒计时。

mod60计数器计数值达到59时自动清零,并输出一个脉冲给第二个mod60计数器,当作分计时。

当第二个mod60计数器计数值达到59时,自动清零,输出一个脉冲给mod12计数器,当mod12计数器计数值达到12自动清零。

完成了十二小时的计时,并重新开始计时。

由于计数器输出为四位的BCD码,故需要将BCD码转换成七位二进制才能显示相应数字。

四、Verilog语言设计module mod60(clk,clr,HL,HH,ML,MH,SL,SH,);input clk,clr; output reg[6:0] HL,HH,ML,MH,SL,SH;reg[7:0] count_outS,count_outM, count_outH;wire countS,countM;//秒计数部分always @(posedge clk or posedge clr)beginif(clr) count_outS<=0; //同步清零else beginif(count_outS[3:0]==9)begin count_outS[3:0]<=0; //低四位满九即清零if(count_outS[7:4]==5) count_outS[7:4]<=0; //低四位满九且高四位满五时高四位清零else count_outS[7:4]<=count_outS[7:4]+1; //低四位满九且高四位不满五时高四位加一endelse count_outS[3:0]<=count_outS[3:0]+1; //低四位不满九时低四位加一endendassign countS=(count_outS==59)?1:0; //当秒计数值达到59是countS产生一个脉冲always @(*) //47译码显示begincase (count_outS[7:4]) //高四位显示4'd0:SH=~7'b1111110;4'd1:SH=~7'b0110000;4'd2:SH=~7'b1101101;4'd3:SH=~7'b1111001;4'd4:SH=~7'b0110011;4'd5:SH=~7'b1011011;default:SH=~7'b1111110;endcasecase (count_outS[3:0]) //低四位显示4'd0:SL=~7'b1111110;4'd1:SL=~7'b0110000;4'd2:SL=~7'b1101101;4'd3:SL=~7'b1111001;4'd4:SL=~7'b0110011;4'd5:SL=~7'b1011011;4'd6:SL=~7'b1011111;4'd7:SL=~7'b1110000;4'd8:SL=~7'b1111111;4'd9:SL=~7'b1111011;default:SL=~7'b1111110;endcaseend//minutealways @(posedge clr or posedge count_outS) //产生清零信号或产生秒计数满59进位信号进入这个alwaysbeginif(clr) count_outM<=0; //同步清零else beginif(count_outM[3:0]==9)begin count_outM[3:0]<=0; //低四位满九即清零if(count_outM[7:4]==5) count_outM[7:4]<=0; //低四位满九且高四位满五时高四位清零else count_outM[7:4]<=count_outM[7:4]+1; //低四位满九且高四位不满五时高四位加一endelse count_outM[3:0]<=count_outM[3:0]+1; //低四位不满九时低四位加一endendassign countM=(count_outM==59)? 1:0; //当秒计数值达到59是countS产生一个脉冲always @(*) //47译码显示begincase (count_outS[7:4]) //高四位显示4'd0:MH=~7'b1111110;4'd1:MH=~7'b0110000;4'd2:MH=~7'b1101101;4'd3:MH=~7'b1111001;4'd4:MH=~7'b0110011;4'd5:MH=~7'b1011011;default:MH=~7'b1111110;endcasecase (count_outS[3:0]) //低四位显示4'd0:ML=~7'b1111110;4'd1:ML=~7'b0110000;4'd2:ML=~7'b1101101;4'd3:ML=~7'b1111001;4'd4:ML=~7'b0110011;4'd5:ML=~7'b1011011;4'd6:ML=~7'b1011111;4'd7:ML=~7'b1110000;4'd8:ML=~7'b1111111;4'd9:ML=~7'b1111011;default:ML=~7'b1111110;endcaseend//houralways @(posedge clr or posedge count_outM) //产生清零信号或产生分计数满59进位信号进入这个alwaysif(clr) count_outH<=0; //同步清零else beginif(count_outH<11)count_outH=count_outH+1; //小于11时加一else count_outH<=0; //满十一清零endalways @(*) //47译码显示begincase(count_outH)4'd0:begin HH=~7'b1111110;HL=~7'b1111110;end4'd1:begin HH=~7'b1111110;HL=~7'b0110000;end4'd2:begin HH=~7'b1111110;HL=~7'b1101101;end4'd3:begin HH=~7'b1111110;HL=~7'b1111001;end4'd4:begin HH=~7'b1111110;HL=~7'b0110011;end4'd5:begin HH=~7'b1111110;HL=~7'b1011011;end4'd6:begin HH=~7'b1111110;HL=~7'b1011111;end4'd7:begin HH=~7'b1111110;HL=~7'b1110000;end4'd8:begin HH=~7'b1111110;HL=~7'b1111111;end4'd9:begin HH=~7'b1111110;HL=~7'b0110000;end4'd10:begin HH=~7'b0110000;HL=~7'b1111110;end4'd11:begin HH=~7'b0110000;HL=~7'b0110000;enddefault: begin HH=~7'b1111110;HL=~7'b1111110;endendcaseendendmodule功能描述:该模块有时钟与清零两个输入,时分秒的高低位六个输出。

多功能数字钟(EDA设计)实验报告

多功能数字钟(EDA设计)实验报告

多功能数字钟一、实验原理分析通过晶振产生的50MHz的脉冲,用分频器进行分频产生1Hz的脉冲信号,即作为时钟的1s的信号进行计数。

秒钟每计数60秒后产生进位使分钟显示加1,分钟满60循环至0。

为实现手动校准时间功能,可以对分和秒计数器进行加减。

为实现校准时间时候的闪烁,对数码管使用消隐,把数码管的接地端口接一个脉冲信号。

在实验过程中,要注意很多细节,比如进行按键消抖,手动调整时间时不会进位。

二、逻辑分析三、功能模块分析功能模块包括分频模块,时间计数及校准模块,数码管译码显示模块、判决模块和消抖模块1.分频模块该电路由多个70LS90经过分频将由晶振产生的50MHz分频为1Hz方波,供后续时钟电路使用。

这一模块是整个电路的基础。

2.时间计数及校准模块该模块连接至分频模块的信号输出端,以分频模块产生的1Hz 方波作为基础。

1Hz方波与秒同步,以秒为基础,分别实现电子钟中,分与时的运转,即1分钟=60秒,1小时=60分钟的循环运转。

为了修正电子钟在运行过程中产生的一些误差或其他认为错误,另设置校准功能,可以对电子钟的计时进行调整。

其中,此模块的逻辑部分需Verilog语言实现并进行封装。

此模块用到3个十进制计数器、2个六进制计数器和1个三进制计数器。

3.数码管译码显示模块本电子钟采用数码管来显示,可以简单、直观地表现出确切的时间,实现其他配套功能。

且数码管易于操作。

此模块中有四个数码管,每两个数码管分别显示小时与分钟。

由上一模块,即时间计数及校准模块中的时间计数器产生的数值,将其对应的七段码直接传送至相应的数码管译码显示。

4.判决模块该电路判决信号连接至开关,当开关选中数码管某位后,经过判决器令改为停止计数,并开始1秒闪烁,按动按键可实现手动调整。

5.消抖模块通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。

EDA数字时钟设计报告

EDA数字时钟设计报告

EDA实验设计报告——数字时钟设计目录一、实验名称 (3)二、实验目的 (3)三、实验内容 (3)1.扩展内容: (3)2.选做内容: (3)四、实验仪器 (4)五、实验原理 (4)1. 硬件部分 (4)2. 软件部分 (8)六、心得体会 (9)一、实验名称数字时钟设计二、实验目的通过设计一个数字时钟,逐步了解FPGA的编程原理,初步入门FPGA,了解FPGA工作原理及开发流程,为后续的深入学习打好坚实基础。

通过扩展功能提高FPGA系统综合应用能力,熟练掌握QuartusII开发环境及编程应用。

三、实验内容用同步时序电路设计实现时、分、秒计数,并在数码管上正确显示。

1.扩展内容:1、可以按键清零;2、支持年月日显示功能,用按键进行年月日和时分秒间显示切换;3、可对显示内容进行修改,时分秒均可修改。

2.选做内容:(1)利用5个数码管完成秒表显示功能。

要求:1、精度达100ms;2、可以清零;3、可暂停;4、最大计时为999.9s;(2)跑马灯设计实现8个发光二极管以不同频率(2Hz,1Hz,0.5Hz)循环进行左滚动、右滚动、向中间滚动、向两边滚动、闪动等效果,不同频率显示用按键进行切换。

四、实验仪器计算机;QuartusII软件;下载线;电子技术综合实验箱五、实验原理1. 硬件部分框图:Power Manage5V/3.3V/2.5VVGA Port FPGA模块MCU模块AD/DA模块Audio Port LED_KEY模块SRAM/ROM模块RS232 Port(1)处理器Cyclone ⅡEP2C20Q240,该处理器是Altera 公司研发的一款FPGA 芯片。

(2)显示 LED 数码管LED 数码管是有多个发光二极管封装一起组成“8”字形的器件,引线在内部链接完成只引出公共电极。

实验中采取动态显示驱动方法。

每位数码管点亮时间约为2ms 。

这样做能够节省大量的I\O 埠,而且功耗较静态显示驱动更低。

EDA数字时钟课程设计报告

EDA数字时钟课程设计报告

EDA技术及应用课程设计说明书 2013 届电子信息工程专业班级题目数字时钟学号姓名指导教师二О一五年月日一、基本原理一个完整的时钟应由三部分组成:秒脉冲发生电路、计数显示部分和时钟调整部分。

秒脉冲发生电路原理:一个时钟的准确与否主要取决于秒脉冲的精确度。

为了保证计时准确我们对系统时钟48MHz进行了48000000分频,从而得到1Hz的秒脉冲。

计数显示部分原理:显示部分是用数码管LED实现的,这里使用的是共阳极的数码管如图所示8个数码管,其中左边两个数码管用来显示时的个位和十位、中间的显示分的个位和十位、最右边两个显示分的个位和十位。

时钟调整部分原理:校时电路里定义key[0]、key[1]和k2、k3分别用于控制时钟的计时开始、清零和调整功能中的时的加1、分的加1处理,从而完成对现在的时间调整。

本实验电路校时电路在此完成了暂停、清零、时调整和分调整。

二、硬件设计芯片图:图1 数字时钟原理图程序的调试工作都是在电脑上完成的,通过程序的输入、原理图的建立、管脚分配、编译、仿真、再下载到芯片进行运行。

电路中采用共阳极连接的七段数码管,通过程序的控制扫描驱动来显示时钟的时-分-秒。

程序中的按键设定为K1暂停、K2清零、K3调时、K4调分元件清单:三、数字时钟的Verilog实现管脚的分配:程序:module clock(clk,s1,,s2,key,dig,seg); //模块名clock input clk,s1,s2; //输入时钟input[1:0]key; //输入按键output[7:0]dig; //数码管选择输出引脚output[7:0]seg; //数码管段输出管脚reg[7:0]seg_r; //定义数码管输出寄存器reg[7:0]dig_r; //定义数码管选择输出寄存器reg[3:0]disp_dat; //定义显示数据寄存器reg[24:0]count; //定义计数寄存器reg[23:0]hour; //定义现在时刻寄存器reg sec,en; //定义标志位reg[1:0]dout1,dout2,dout3; //寄存器wire[1:0]key_done; //按键消抖输出assign dig=dig_r; //输出数码管选择assign seg=seg_r; //输出数码管译码结果//秒信号产生部分always@(posedge clk) //定义clock上升沿触发begincount=count+1'b1;if(count==25'd2*******) //是否到0.5秒begincount=25'd0; //计数器清零sec=~sec; //置位秒标志endend//按键消抖处理部分assign key_done=(dout1|dout2|dout3); //按键消抖输出always@(posedge count[17])begindout1<=key;dout2<=dout1;dout3<=dout2;endalways@(negedge key_done[0])beginen=~en; //将琴键开关转换为乒乓开关endalways @(posedge clk) //count[17:15]大约1ms改变一次begincase(count[17:15]) //选择扫描显示数据3'd0:disp_dat = hour[3:0]; //秒个位3'd1:disp_dat = hour[7:4]; //秒十位3'd2:disp_dat = 4'ha; //显示“-”3'd3:disp_dat = hour[11:8]; //分个位3'd4:disp_dat = hour[15:12]; //分十位3'd5:disp_dat = 4'ha; //显示“-”3'd6:disp_dat = hour[19:16]; //时个位3'd7:disp_dat = hour[23:20]; //时十位endcasecase(count[17:15]) //选择数码管显示位 3'd0:dig_r = 8'b11111110;3'd1:dig_r = 8'b11111101;3'd2:dig_r = 8'b11111011;3'd3:dig_r = 8'b11110111;3'd4:dig_r = 8'b11101111;3'd5:dig_r = 8'b11011111;3'd6:dig_r = 8'b10111111;3'd7:dig_r = 8'b01111111;endcaseendalways @(posedge clk)begincase(disp_dat)4'h0:seg_r = 8'hc0; //显示04'h1:seg_r = 8'hf9;4'h2:seg_r = 8'ha4;4'h3:seg_r = 8'hb0;4'h4:seg_r = 8'h99;4'h5:seg_r = 8'h92;4'h6:seg_r = 8'h82;4'h7:seg_r = 8'hf8;4'h8:seg_r = 8'h80;4'h9:seg_r = 8'h90;4'ha:seg_r = 8'hbf;default:seg_r = 8'hff;endcaseif((count[17:15]==3'd2)&sec)seg_r = 8'hff;endalways @(negedge sec or negedge key_done[1]) //计时处理Beginif(!key_done[1]) //是否为清零键hour=24'h0; //是,则清零else if(en)beginif(!s1)beginif(hour[23:16]==8'd35)beginhour[19:16]=0;hour[23:20]=0;endelsebeginif(hour[19:16]==9)beginhour[19:16]<=0;hour[23:20]<=hour[23:20]+1; endelsehour[19:16]<=hour[19:16]+1; endendelse if(!s2)beginif(hour[11:8]==9)beginhour[11:8]<=0;if(hour[15:12]==5)hour[15:12]<=0;elsehour[15:12]<=hour[15:12]+1;endelsehour[11:8]=hour[11:8]+1;endendelsebeginhour[3:0]=hour[3:0]+1; //秒加1if(hour[3:0]==4'ha)beginhour[3:0]=4'h0;hour[7:4]=hour[7:4]+1; //秒的十位交1 if(hour[7:4]==4'h6)beginhour[7:4]=4'h0;hour[11:8]=hour[11:8]+1; //分个位加1 if(hour[11:8]==4'ha)beginhour[11:8]=4'h0;hour[15:12]=hour[15:12]+1; //分十位加1 if(hour[15:12]==4'h6)beginhour[15:12]=4'h0;hour[19:16]=hour[19:16]+1; //十个位加1 if(hour[19:16]==4'ha)beginhour[19:16]=hour[4'h0];hour[23:20]=hour[23:20]+1; //时十位加1 endif(hour[23:16]==8'h24)hour[23:16]=8'h0;endendendendendendendmodule一、课程设计总结二、指导教师评语。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数字钟
一、任务解析
用Verilog硬件描述语言设计数字钟,实现:
1、具有时、分、秒计数显示功能,以二十四小时循环计时。

2、具有调节小时,分钟的功能,调整时对应的数字闪烁。

3、具有整点报时及闹铃时间可调的功能。

4、数字钟具有四种模式:正常显示、时间调整、闹铃时间调整、秒表。

二、方案论证
没有闹铃功能
三、重难点解析
选择模式:module beii(clr,selin_key,beii_out);
input clr,selin_key;
output [1:0]beii_out;
wire [1:0]beii_out;
reg [1:0]selout_key;
always@(negedge clr or posedge selin_key) begin
if(!clr) selout_key=0;
else begin if(selout_key==2) selout_key=0;
else selout_key=selout_key+1;end
end
assign beii_out=selout_key;
endmodule
头文件中:
module clk_top(clr,clk,upkey,downkey,sel,a,b,c,d,e,f,g,p,clr_key,selin_key);
clr:清零clk:50M时钟
upkey:向上调downkey:向下调
clr_key:恢复初始状态selin_key:模式选择
四、硬件资源分配
60进制module mycnt60(clr,clk,upkey,downkey,selout,q,c);
input clk,clr,upkey,downkey;//upkey为加按键
input [1:0] selout;
output[7:0] q;//60进制输出
output c;//进位溢出位
reg c;
reg[7:0] q;
wire new_clk1,ckb,ckc,ckd,cko;
assign new_clk1=clk|((!selout[0]&selout[1])&(upkey|downkey));
LCELL AA(new_clk1,ckb);//信号延迟
LCELL BB(ckb,ckc);
LCELL CC(ckc,ckd);
LCELL DD(ckd,cko);
initial c=0;
always @(posedge cko or negedge clr )begin
if(!clr) q=8'h00;
else begin if(selout==2) begin if(upkey)begin
if(q==8'h59) q=8'h00;
else if(q==8'h?9) q=q+4'h7;
else q=q+1;
end
else if(downkey)begin
if(q==8'h00) q=8'h59;
else if(q==8'h?0) q=q-4'h7;
else q=q-1;
end
end
else begin
if(q==8'h59) begin q=8'h00;c=1;end
else if(q==8'h?9) begin q=q+4'h7;c=0;end
else begin q=q+1;c=0;end
end
end
end
endmodule
五、实验总结
通过对数字钟的设计到成功是耗时最长的,但也是学到知识点最多,收获最多的。

每一个模块与代码都必须仔细研读,参照前人的成功经验,再加上自己的学习心得,将头文件,24进制,浏览扫描模块自己写出,并最终调试成功,非常开心!觉得学到有用的东西,很实用。

当然离不开老师与同学的帮助与支持,历练了自己。

对数字系统设计有了更深层次的了解,对数字电路也有了知识的补充与扩充!。

相关文档
最新文档