EDA Verilog HDL简易数字钟设计报告
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),时钟开始从零点正常计时。
VerilogHDL语言数字时钟
VerilogHDL语言数字时钟EDA与数字系统设计报告实验名称:带有设臵时间功能和闹钟功能的数字钟一、设计内容和要求实验要求使用Verilog HDL进行多功能时钟的设计具体要求如下:1.能将基本的小时、分钟、及秒钟显示在数码管上2.能利用拨码开关进行时间的校正3.具有整点报时和闹钟的功能二、设计原理1.工作原理多功能数字钟系统共包括三个模块,即分频器模块、计数器模块和显示译码模块。
多功能数字钟的功能可以从整体上分为三类,分别是正常计时、时钟校对和闹钟设臵,所以考虑在系统中设臵一个模式控制信号mode。
模式控制信号对应一个按键,每按一次按键相当于工作模式进行一次变换,多次按下则数字钟将在正常计时、时间校对和闹钟设臵三个工作模式下依次循环。
在设计中,时钟校对和闹钟设臵工作模式都需要对时间进行设臵,通常是对小时和分钟进行设臵,所以需要在系统中设臵一个时间设臵信号set,对应一个按键,每按一次相当于在小时设臵和分钟设臵之间进行转换。
时间设臵时,分钟和小时计时单位之间互相独立,不存在进位关系。
同时设臵一个时间调整信号accum,每按一次与accum对应的按键,相当于对需要调整的分钟或小时的数字进行加1操作。
数字钟的计时输出信号时必不可少的,用hour,min和sec信号分别表示需要显示的小时、分钟和秒钟的计时结果,上述计时结果将通过译码显示模块进行译码后,连接到外部的七段数码显示器。
在带有闹钟设臵功能的数字钟中,闹钟输出信号也是必不可少的,到达到闹钟设臵的时间后,要向外部扬声器发送一个闹铃信号,设臵alert。
另外,我们还提供了闹钟铃声信号voice,当voice为0的时候,闹钟处于静音状态下,即使时间达到闹钟设定的时间也不会发声,当voice为1的时候,可以正常闹铃,voice信号对应一个拨码开关。
本设计中的小时、分钟和秒钟的计时结果采用BCD码表示方法。
采用这种表示方法便于对数结果的高位和低位分别进行译码。
(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数字系统设计实验实验项目:时钟姓名:专业:计算机科学与技术班级:学号:计算机科学与技术学院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。
基于Verilog HDL语言的数字钟(DE2)设计
《EDA技术与Verilog HDL》课程实验报告实验项目名称:基于Verilog HDL语言的数字钟(DE2)设计一、实验项目名称基于Verilog HDL语言的数字钟(DE2)开发板设计。
二、实验目的和要求(1)实验目的1.掌握Verilog HDL语言的基本运用;2.熟悉QuartusⅡ的简单操作;3.掌握一个基本EDA工程设计流程;4.掌握数字钟(DE2开发板)的设计基本原理。
(2)实验要求1.具有普通时钟的计时、调时功能。
2.能够下载到DE2开发板进行运行三、实验内容和原理数字钟共使用一类主要模块来实现其功能。
其总体结构如下图所示。
(1)时分秒计数器。
时计时器是一个24进制计数器,分秒则均为60进制计数器。
当秒计时器接受一个计时脉冲时,秒计数器从一计到六十,秒显像管依次显示00、01、02、03……,每当秒计时到00,就会有一个输出脉冲至分计时器,分计时器在原有基础上加一,显示器同样依次显示,每当分计时器计到00,相应的有一个脉冲使得时计数器在原有基础上加一,显示器一次显示00、01、……当计时器计数到23时59分59秒时,时分秒计数器自动归零。
(2)数码显像管译码模块。
该模块的功能就是将四位的8421码翻译成8位输出,用于显示各个数字,分为两组,高电平点亮,不同的数字对应不同的8位码。
因此程序设计需要考虑时分秒的每个数所对应的8位码。
例如:if(sec1[3:0]==4'b0000)//sec1 0-9beginHEX0[6:0]<=7'b1000000;endif(sec1[3:0]==4'b0001)beginHEX0[6:0]<=7'b1111001;endif(sec1[3:0]==4'b0010)beginHEX0[6:0]<=7'b0100100;(3)分频器模块开发板可用时钟为50MHZ,不可以用来做时钟输入,用作时钟信号前必须分频,该分频是用计数取反来分该总体模块实现功能:key2表示状态,key1表示转换改变分或时,key0表示在相应的状态下调整分或时。
eda,verilog数字钟设计报告
数字钟一、任务解析用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) beginif(!clr) selout_key=0;else begin if(selout_key==2) selout_key=0;else selout_key=selout_key+1;endendassign 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 )beginif(!clr) q=8'h00;else begin if(selout==2) begin if(upkey)beginif(q==8'h59) q=8'h00;else if(q==8'h?9) q=q+4'h7;else q=q+1;endelse if(downkey)beginif(q==8'h00) q=8'h59;else if(q==8'h?0) q=q-4'h7;else q=q-1;endendelse beginif(q==8'h59) begin q=8'h00;c=1;endelse if(q==8'h?9) begin q=q+4'h7;c=0;endelse begin q=q+1;c=0;endendendendendmodule五、实验总结通过对数字钟的设计到成功是耗时最长的,但也是学到知识点最多,收获最多的。
数字钟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-HDL多功能数字钟
用verilog-HDL多功能数字钟Verilog HDL实验报告基于Verilog HDL语言的多功能数字钟设计一、试验目的设计一个有如下功能的数字钟:(1)计时功能:包括时、分、秒。
(2)定时与闹钟功能:能在所设定的时间发出铃音。
(3)校时功能:对小时、分钟和秒钟进行手动校时。
(4)整点报时功能:每到整点能够发出“嘀嘀嘀嘀嘟”四短一长的报时。
二、试验原理ALERT HOUR[7..0]MIN[7..0]SEC[7..0]LD_ALERT LD_HOUR LD_MINCLK CLK_1K MODE TURN CHANGEclockCLK CLK_1K MODE TURN CHANGEALERTHOUR[7..0]MIN[7..0]SEC[7..0]LD_ALERT LD_HOUR LD_MIN多功能数字钟端口示意图数字钟设有五个输入端,分别为时钟输入(CLK )、模式(MODE )、产生声音的时钟信号(CLK_1K )、切换(TURN )和调时(CHANGE )键。
输出共七个,其中HOUR[7..0]、MIN[7..0]和SEC[7..0]采用BCD 计数方式,分别驱动2个数码管。
硬件电路原理图如下:三、试验内容1. 代码/*信号定义:clk: 标准时钟信号,其频率为4Hz;clk_1k:产生闹铃声、报时音的时钟信号,其频率为1024Hz;mode:功能控制信号;为0:计时功能;为1:闹钟功能;为2:手动校时功能;turn:接按键,在手动校时功能时,选择是调整小时还是分钟;若长时间按住改建,还可使秒信号清零,用于精确调时;change: 接按键,手动调整时,每按一次,计数器加1;如果长按,则连续快速加1,用于快速调时和定时;hour,min,sec:此三信号分别输出并显示时、分、秒信号,皆采用BCD码计数,分别驱动6个数码管显示时间;alert:输出到扬声器的信号,用于产生闹铃音和报时音;闹铃音为持续20秒的急促的“嘀嘀嘀”音,若按住“change”键,则可屏蔽该音;整点报时音为“嘀嘀嘀嘀嘟”四短一长音;LD_alert:接发光二极管,指示是否设置了闹钟功能;LD_hour:接发光二极管,指示当前调整的是小时信号;LD_min:接发光二极管,指示当前调整的是分钟信号*/moduleclock(clk,clk_1k,mode,change,turn,alert,hour,min,sec,LD_alert,LD_hour,LD_mi n);input clk,clk_1k,mode,change,turn;output alert,LD_alert,LD_hour,LD_min;output[7:0] hour,min,sec;reg[7:0] hour,min,sec,hour1,min1,sec1,ahour,amin;reg[1:0] m,fm,num1,num2,num3,num4;reg[1:0] loop1,loop2,loop3,loop4,sound;reg LD_hour,LD_min;reg clk_1Hz,clk_2Hz,minclk,hclk;reg alert1,alert2,ear;reg count1,count2,counta,countb;wire ct1,ct2,cta,ctb,m_clk,h_clk;always @(posedge clk)beginclk_2Hz<=~clk_2Hz;if(sound==3) begin sound<=0; ear<=1; end //ear信号用于产生或屏蔽声音else begin sound<=sound+1; ear<=0; endendalways @(posedge clk_2Hz) //由4Hz的输入时钟产生1Hz的时基信号clk_1Hz<=~clk_1Hz;always @(posedge mode) //mode信号控制系统在三种功能间转换begin if(m==2) m<=0; else m<=m+1; endalways @(posedge turn)fm<=~fm;always //产生count1,count2,counta,countb四个信号begincase(m)2:begin if(fm)begin count1<=change; {LD_min,LD_hour}<=2; endelsebegin counta<=change; {LD_min,LD_hour}<=1; end{count2,countb}<=0;end1:begin if(fm)begin count2<=change; {LD_min,LD_hour}<=2; endelsebegin countb<=change; {LD_min,LD_hour}<=1; end{count1,counta}<=2'b00;enddefault:{count1,count2,counta,countb,LD_min,LD_hour}<=0;endcaseendalways @(negedge clk) //如果长时间按下“change”键,则生成“num1”信号用于连续快速加1if(count2) beginif(loop2==3) num2<=1;elsebegin loop2<=loop2+1; num2<=0;endendelse begin loop2<=0; num2<=0; endalways @(negedge clk) //产生num2信号if(count1) beginif(loop3==3) num3<=1;elsebegin loop3<=loop3+1; num3<=0; endendelse begin loop3<=0; num3<=0; endalways @(negedge clk)if(counta) beginif(loop4==3) num4<=1;elsebegin loop4<=loop4+1; num4<=0; endendelse begin loop4<=0; num4<=0; endassign ct1=(num3&clk)|(!num3&m_clk); //ct1用于计时、校时中的分钟计数assign ct2=(num1&clk)|(!num1&count2); //ct2用于在定时状态下调整分钟信号assign cta=(num4&clk)|(!num4&h_clk); //cta用于计时、校时中的小时计数assign ctb=(num2&clk)|(!num2&countb); //ctb用于在定时状态下调整小时信号always @(posedge clk_1Hz) //秒计时和秒调整进程if(!(sec1^8'h59)|turn&(!m))beginsec1<=0;if(!(turn&(!m))) minclk<=1;end//按住“turn”按键一段时间,秒信号可清零,该功能用于手动精确调时else beginif(sec1[3:0]==4'b1001)begin sec1[3:0]<=4'b0000; sec1[7:4]<=sec1[7:4]+1; endelse sec1[3:0]<=sec1[3:0]+1; minclk<=0;endassign m_clk=minclk||count1;always @(posedge ct1) //分计时和分调整进程beginif(min1==8'h59) begin min1<=0; hclk<=1; endelse beginif(min1[3:0]==9)begin min1[3:0]<=0; min1[7:4]<=min1[7:4]+1; endelse min1[3:0]<=min1[3:0]+1; hclk<=0;endendassign h_clk=hclk||counta;always @(posedge cta) //小时计时和小时调整进程if(hour1==8'h23) hour1<=0;else if(hour1[3:0]==9)begin hour1[7:0]<=hour1[7:4]+1; hour1[3:0]<=0; endelse hour1[3:0]<=hour1[3:0]+1;always @(posedge ct2) //闹钟定时功能中的分钟调节进程if(amin==8'h59) amin<=0;else if(amin[3:0]==9)begin amin[3:0]<=0; amin[7:4]<=amin[7:4]+1; endelse amin[3:0]<=amin[3:0]+1;always @(posedge ctb) //闹钟定时功能中的小时调节进程if(ahour==8'h23) ahour<=0;else if(ahour[3:0]==9)begin ahour[3:0]<=0; ahour[7:4]<=ahour[7:4]+1; endelse ahour[3:0]<=ahour[3:0]+1;always //闹铃功能if((min1==amin)&&(hour1==ahour)&&(amin|ahour)&&(!change))//若按住“change”键不放,可屏蔽闹铃音if(sec1<8'h20) alert1<=1; //控制闹铃的时间长短else alert1<=0;else alert1<=0;always //时、分、秒的现实控制case(m)3'b00: begin hour<=hour1; min<=min1; sec<=sec1; end//计时状态下的时、分、秒显示3'b01: begin hour<=ahour; min<=amin; sec<=8'hzz; end//定时状态下的时、分、秒显示3'b10: begin hour<=hour1; min<=min1; sec<=8'hzz; end//校时状态下的时、分、秒显示endcaseassign LD_alert=(ahour|amin)?1:0; //指示是否进行了闹铃定时assign alert=((alert1)?clk_1k&clk:0)|alert2; //产生闹铃音或整点报时音always //产生整点报时信号alert2beginif((min1==8'h59)&&(sec1>8'h54)||(!(min1|sec1)))if(sec1>8'h54) alert2<=ear&clk_1k; //产生短音else alert2<=!ear&clk_1k; //产生长音else alert2<=0;endendmodule2. 仿真图四、小结及体会为了做多功能数字钟,我借了多本关于Verilog HDL的程序设计书。
数字钟设计报告 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工具来设计数字电路,并通过实际的电路实现来验证我们的设计。
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(Ⅱ)实验报告——多功能数字钟姓名:学号:学院:指导教师:时间: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设计报告-数字钟
一、设计要求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经编译、仿真、下载,满足要求。
verilog HDL课设(数字钟).pdf
心得体会......................................................................................................................................... 25 参考文献......................................................................................................................................... 26 附 录 ............................................................................................................................................27
(完整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设计电子钟广东工业大学实验报告信息工程学院通信工程专业 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时钟实验报告
学校:五邑大学学院:信息工程学院姓名:梁杰帆实验:数字时钟一、实验目的: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功能描述:该模块有时钟与清零两个输入,时分秒的高低位六个输出。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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 是总设计流 程图。
四、方案设计及实现
1、系统实现原理和总体框图
数字钟电路实际上是一个对标准 1Hz 进行计数的计数电路,秒计数器满 60 秒后向分计 数器进位,分计数器满 60 秒后向时计数器进位,时计数器按 24 翻 1 规律计数,计数输出经 译码后送到 LED 显示器,由于计数的起始时间不可能与标准时间(北京时间)一致,故需要在 电路上加上一个校时电路,如图 4-1 所示为简易数字钟的构成框图。除校时功能外,电子钟 处于其他功能状态时并不影响数字钟的运行。
基准频率 系统复位 模式选择 手动校时
分频模块
时钟频率
数码管动态 刷新频率
时、分、秒 计时模块
七段译码模块
图4-1 简易数字钟系统框图
2、主要模块的设计
(1)计数器模块:计数器模块由秒计数器,分计数器以及
时计数电路组成。其中,秒计数器、分计数器为六十进制计数器,
而根据设计要求,时计数器为二十四进制计数器 。因 此时 、分 、
图 4-2-2 时进制计数器波形仿真 (2)校时模块:当刚接通电源或走时出现误差时都需要对时间进行校正,对时间的校正是 通过对时间的重置来实现,当功能键 mode 为 1 时即进入校时模式,此模式下可通过位选按 键给时、分、秒中的一个进行置数,在对其中一个置数时不会影响其他两个计数。校时后将 校准后的时间数据分别送给对应的变量实现置数。置数值必须在规定的合法数据范围内,否 则将自动回到 0,重新置数。
endcase end always @(negedge sec ) begin
if(!key_done[1]) begin
hour = 16'h0; end else if(!keyen) begin
if(hour[3:0] == 4'h9) begin
hour[3:0] = 4'h0; hour[7:4] = hour[7:4] +
七、参考文献
[l] 罗杰《Verilog HDL 与 FPGA 数字系统设计》机械工业出版社 2015.3
7
八、附录
附录一:程序源代码
module clock(clk,key,dig,seg); input clk; input[1:0] key;
begin dout1 <= key; dout2 <= dout1;
2
一、设计题目:简易数字钟电路
二、功能说明
1、数字钟时间为 24 小时一个周期;数字钟须显示时、分、秒。 2、可以分别对时、分、秒进行单独校时,使其调整到标准时间。 3、可以有暂停启动功能,必须有复位功能。
三、实验平台
1、硬件:EDA 试验箱、带并口 PC 机 2、软件:Windows XP 操作系统、Muxplus II 10.2
5
时钟/校准
开始 初始化
是
否
是否校准?
位选
时钟信号
秒计数+1
动态显 示
60进制秒 转化为七段码
60进制分 转化为七段码
秒+1 分+1
秒>59?
是
分计数+1 秒置零
分>59?
是
时计数+1
分置零
24进制时 转化为七段码
位选循环
时+1
时>23?
是
时置零
图4-3-1 总设计流程图
五、实物连接及运行
在经过为期一周的设计仿真之后,就是到实验室实地操作,通过对 EPF10K10LC84-4 芯 片各个引脚的定义、线路连接、程序下载等操作之后,在试验箱上的运行结果如图 5-1-1 所示:
output[2:0] dig; output[7:0] seg;
dout3 <= dout2; end
reg[7:0] seg_r; reg[2:0] dig_r; reg[3:0] disp_dat;
always @(posedge clk) begin if(!key_done[0])
reg[31:0]count; reg[23:0]hour; reg sec,keyen;
always @(count[12])
3'd6:dig_r = 3'b110; 3'd7:dig_r = 3'b111;
8
endcase end always @(count[14]) begin
case(disp_dat) 4'h0:seg_r = 8'h3f; 4'h1:seg_r = 8'h06; 4'h2:seg_r = 8'h5b; 4'h3:seg_r = 8'h4f; 4'h4:seg_r = 8'h66; 4'h5:seg_r = 8'h6d; 4'h6:seg_r = 8'h7d; 4'h7:seg_r = 8'h07; 4'h8:seg_r = 8'h7f; 4'h9:seg_r = 8'h6f; default:seg_r = 8'hff;
实验的视频讲解部分见:附录二简易数字钟视频讲解.mp4
6
图 5-1-1 实物连接图及运行结果 运行结果与设计要求以及仿真结果相同,所以简易数字中电路的设计就到此完成。
六、总结
通过近一周的努力,课程设计任务终于完成了,通过这次课程设计,使我对 VerilogHDL 语言有了更加深刻的认识。同时也对理论知识和实际操作的联系有 了更多的把握。对 EDA 的设计平台 MuxplusII10.2 可以更加熟练的使用。这次课 程设计,我意识到了我对这门课掌握还有一定的不足,还有许多的知识我不了解; 有的是一知半解;有的即使原理懂了,但在应用方面却是丝毫不知。在实际操作 中也遇到了一些问题,比如数码管的位选控制,用 4 根线控制 8 位甚至 12 位数 码管,这是我第一次遇到,但是只要想明白了,就会发现原理其实并不难,只是 临时修改代码有些无法适应。所以在今后的学习中,我会更加努力,不仅要学好 理论知识,还要更努力的把它应用到实践中去,使两者很好的结合起来,互补互 助。
hour[15:12] = 4'h0;
hour[19:16] = hour[19:16] + 1'b1;
== 4'h4)
if(hour[19:16] begin
hour[19:16] = 4'h0;
hour[23:20] = hour[23:20] + 1'b1;
if(hour[23:20] == 4'h3)
秒计数器模块可划分为时计数、分计数和秒计数 3 个子模块,根
据设计要求,时计数子模块为一个二十四进制可预置的 BCD 码计
数器模块;分计数和秒计数子模块均为六十进制可预置的 BCD 码
八位数码管 动态显示
时计数+1 时>23?
是
时置零
图4-2-1 计数器模块
3
计数器模块。图 4-2 是以 24 进制时计数器为例的计数器工作流程图。
9
hour[23:20] = 4'h0; end
end end end end
else hour[3:0] = hour[3:0] +
4'd1; end
end endmodule
10
EDA 课 程 设 计 报 告
题
目:
组
别:
组
员:
专 业 年 级: 完 成 日 期:
1