实训一简易数字钟的EDA设计1.2.1设计要求

合集下载

简易时钟的设计EDA

简易时钟的设计EDA

摘要本课程设计要紧介绍了运用EDA技术实现“电子时钟”的设计,以达到对EDA技术的熟练把握,提升对《EDA技术及应用》课程所学的内容的把握和应用,文介绍一种利用FPGA可编程逻辑器件设计数字电子时钟的方式及进程。

文中包括各部份程序及通过max-plusII仿真的波形。

通过对max-plusII的利用熟悉max-plusII仿真软件的工作方式及应用。

关键字:EDA FPGA 电子时钟 max-plusII目录摘要 ....................................................... Ι1.设计方案及原理 .. (2)1.1设计方案 (2)1.2设计原理 (2)2. 设计进程 (4)2.1顶层设计 (4)2.2各个模块程序及波形 (4)2.2.1小时模块 (4)2.2.2分钟模块 (6)2.2.3秒钟模块 (7)2.2.4数码管译码模块 (9)2.2.5数码管片选模块 (10)2.2.6数码管扫描模块 (11)2.2.7分频模块 (12)2.3硬件电路图 (15)总结 (16)参考资料 (17)附录Ⅰ简易时钟电路图 (18)附录Ⅱ元件清单 (19)依照电路特点,可用层次化结构化设计概念。

将此项设计任务分成假设干模块:(1)时钟模块:由外部晶振提供;(2)秒钟模块:对秒进行60循环计数,并向分钟产生进位,同时具有调分功能;(3)分钟模块:对分进行60循环计数,并向小时产生进位,同时具有调时功能;(4)小时模块:对小时进行24进制循环计;。

(5)10分频器和4分频器:将外部时钟分频为1Hz的时钟信号;(6)6选1扫描显示:(7)7段数码管译码器:译出数码管要显示的数字。

电子钟是一个将“时”“分”显示于人的视觉器官的计时装置。

它的计时周期为24小时;显示满刻度为23时59分59秒,秒由两个数码管显示,将标准秒信号送入“秒计数器”,每累加60秒发送一个“分脉冲”信号,该信号将被送到“时计数器”。

EDA数字钟课程设计

EDA数字钟课程设计

课程设计报告课程名称:EDA技术与应用设计题目:数字钟设计数字钟设计摘要:系统使用EDA技术设计了数字钟,采用硬件描述语言VHDL按模块化方式进行设计,然后进行编程,时序仿真等。

利用VHDL语言完成了数字钟的设计。

该数字钟能实现时、分、秒计数的显示功能,且以24小时循环计时。

整个系统结构简单,使用方便,功能齐全,精度高,具有一定的开发价值。

关键字:数字钟;EDA;VHDL;一、设计要求1.1、时钟功能设计一个具有时、分、秒计时的数字钟电路,计时采用24小时制。

小时、分钟可调的数字钟。

1.2、准确性要求设计出的时钟电路要确保高精度的要求,每天的误差不得超过一秒。

二、数字钟的基本原理1、具有时、分、秒计数显示功能,以24小时循环计时。

其中SECOND模块为60进制BCD码计数电路,实现秒计时功能;MINUTE模块为60进制BCD码计数电路,实现分计时功能;HOUR模块为24进制BCD码计数电路,实现小时计时功能。

2、有驱动8位七段共阴极扫描数码管的片选驱动信号输出和七段码输出。

SELTIME模块产生8位数码管的扫描驱动信号SEL[2..0]和时钟显示数据(动态显示)DAOUT[3..0]。

DELED模块则为数码管显示时钟数据的7段译码电路。

三、方案论证3.1、数字钟的基本组成数字钟实际上是一个对标准频率(1HZ)进行计数的计数电路,其基本组成电路如下图所示:图3.1 数字钟原理图图(1)中,秒冲发生器产生秒脉冲,作为图中各个计数器的脉冲信号。

分、秒计数器要求设计为六十进制计数器;时计数器则设计为二十四进制计数器。

时、分、秒的计时结果分别送入译码器中,经译码器翻译后,共由六个LED数码管显示出结果。

因此,使用计数器作为计时电路是可以实现的。

四、各功能模块4.1、小时计时功能实现程序如下:libraryieee;use ieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entity hour isport(reset,clk : in std_logic;daout : out std_logic_vector(7 downto 0));end hour;architecturebehav of hour issignal count : std_logic_vector(3 downto 0); signal counter : std_logic_vector(3 downto 0); beginp1: process(reset,clk)beginif reset='0' thencount<="0000";counter<="0000";elsif(clk'event and clk='1') thenif (counter<2) thenif (count=9) thencount<="0000";counter<=counter + 1;elsecount<=count+1;end if;elseif (count=3) thencount<="0000";counter<="0000";elsecount<=count+1;end if;end if;end if;end process;daout(7 downto 4)<=counter;daout(3 downto 0)<=count;endbehav;图4.1 时计时功能模块4.2、分计时功能实现程序如下:libraryieee;use ieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entity minute isport(reset,clk,sethour: in std_logic; daout : out std_logic_vector(7 downto 0); enhour : out std_logic);end minute;architecturebehav of minute issignal count : std_logic_vector(3 downto 0); signal counter : std_logic_vector(3 downto 0); signal carry_out1 : std_logic;signal carry_out2 : std_logic;beginp1: process(reset,clk)beginif reset='0' thencount<="0000";counter<="0000";elsif(clk'event and clk='1') thenif (counter<5) thenif (count=9) thencount<="0000";counter<=counter + 1;elsecount<=count+1;end if;carry_out1<='0';elseif (count=9) thencount<="0000";counter<="0000";carry_out1<='1';elsecount<=count+1;carry_out1<='0';end if;end if;end if;end process;p2: process(clk)beginif(clk'event and clk='0') thenif (counter=0) thenif (count=0) thencarry_out2<='0';end if;elsecarry_out2<='1';end if;end if;end process;daout(7 downto 4)<=counter;daout(3 downto 0)<=count;enhour<=(carry_out1 and carry_out2) or sethour; endbehav;图4.2 分计时模块4.3、秒计时功能实现程序如下;libraryieee;use ieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entity second isport(reset,clk,setmin : in std_logic;daout : out std_logic_vector(7 downto 0); enmin : out std_logic);end second;architecturebehav of second issignal count : std_logic_vector(3 downto 0); signal counter : std_logic_vector(3 downto 0); signal carry_out1 : std_logic;signal carry_out2 : std_logic;beginp1: process(reset,clk)beginif reset='0' thencount<="0000";counter<="0000";elsif(clk'event and clk='1') thenif (counter<5) thenif (count=9) thencount<="0000";counter<=counter + 1;elsecount<=count+1;end if;carry_out1<='0';elseif (count=9) thencount<="0000";counter<="0000";carry_out1<='1';elsecount<=count+1;carry_out1<='0';end if;end if;end if;end process;daout(7 downto 4)<=counter; daout(3 downto 0)<=count; enmin<=carry_out1 or setmin; endbehav;图4.3 秒计时模块4.4、alert模块实现程序如下:Library IEEE;use IEEE.std_logic_1164.all;useieee.std_logic_unsigned.all;entity alert isPort(clkspk : in std_logic;second : in std_logic_vector(7 downto 0); minute : in std_logic_vector(7 downto 0); speak : out std_logic;lamp : out std_logic_vector(8 downto 0)); end alert;architecturebehav of alert issignal divclkspk2 : std_logic;beginp1: process(clkspk)beginif (clkspk'event and clkspk='1') thendivclkspk2<=not divclkspk2;end if;end process;p2: process(second,minute)beginif (minute="01011001") thencase second iswhen "01010001"=>lamp<="000000001";speak<=divclkspk2; when "01010010"=>lamp<="000000010";speak<='0';when "01010011"=>lamp<="000000100";speak<=divclkspk2; when "01010100"=>lamp<="000001000";speak<='0';when "01010101"=>lamp<="000010000";speak<=divclkspk2; when "01010110"=>lamp<="000100000";speak<='0';when "01010111"=>lamp<="001000000";speak<=divclkspk2; when "01011000"=>lamp<="010000000";speak<='0';when "01011001"=>lamp<="100000000";speak<=clkspk; when others=>lamp<="000000000";end case;end if;end process;endbehav;图4.4 alert模块4.5、DELED模块实现程序如下;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY DELED ISPORT(S: IN STD_LOGIC_VECTOR(3 DOWNTO 0); A,B,C,D,E,F,G,H: OUT STD_LOGIC); END DELED;ARCHITECTURE BEHAV OF DELED ISSIGNAL DATA:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL DOUT:STD_LOGIC_VECTOR(7 DOWNTO 0); BEGINDATA<=S;PROCESS(DATA)BEGINCASE DATA ISWHEN "0000"=>DOUT<="00111111";WHEN "0001"=>DOUT<="00000110";WHEN "0010"=>DOUT<="01011011";WHEN "0011"=>DOUT<="01001111";WHEN "0100"=>DOUT<="01100110";WHEN "0101"=>DOUT<="01101101";WHEN "0110"=>DOUT<="01111101";WHEN "0111"=>DOUT<="00000111";WHEN "1000"=>DOUT<="01111111";WHEN "1001"=>DOUT<="01101111";WHEN "1010"=>DOUT<="01110111";WHEN "1011"=>DOUT<="01111100";WHEN "1100"=>DOUT<="00111001";WHEN "1101"=>DOUT<="01011110";WHEN "1110"=>DOUT<="01111001";WHEN "1111"=>DOUT<="01000000"; WHEN OTHERS=>DOUT<="00000000"; END CASE;END PROCESS;H<=DOUT(7);G<=DOUT(6);F<=DOUT(5);E<=DOUT(4);D<=DOUT(3);C<=DOUT(2);B<=DOUT(1);A<=DOUT(0);END BEHAV;图4.5 deled模块4.6、seltime模块实现程序如下:libraryieee;use ieee.std_logic_1164.all; useieee.std_logic_unsigned.all;entityseltime isport(ckdsp : in std_logic;reset : in std_logic;second : in std_logic_vector(7 downto 0); minute : in std_logic_vector(7 downto 0); hour : in std_logic_vector(7 downto 0); daout : out std_logic_vector(3 downto 0); sel : out std_logic_vector(2 downto 0)); endseltime;architecturebehav of seltime issignal sec : std_logic_vector(2 downto 0); beginprocess(reset,ckdsp)beginif(reset='0') thensec<="000";elsif(ckdsp'event and ckdsp='1') thenif(sec="111") thensec<="000";elsesec<=sec+1;end if;end if;end process;process(sec,second,minute,hour)begincase sec iswhen "000"=>daout<=second(3 downto 0); when "001"=>daout<=second(7 downto 4);when "011"=>daout<=minute(3 downto 0);when "100"=>daout<=minute(7 downto 4);when "110"=>daout<=hour(3 downto 0);when "111"=>daout<=hour(7 downto 4);when others=>daout<="1111";end case;end process;sel<=sec;endbehav;图4.6 seltime模块五、功能实现简述5.1、具有时、分、秒计数显示功能,以24小时循环计时。

EDA设计实验报告——数字钟的设计

EDA设计实验报告——数字钟的设计

EDA设计实验报告——数字钟的设计摘要随着现在社会的快速发展,人们都电子产品的要求越来越高,因而电子产品无论从制作上还是从销售上都要求很高。

要制作一个应用性比较好的电子产品就离不开数字电路,大到超级计算机、小到袖珍计算器,很多电子设备都有数字电路。

数字系统是一个能够对数字信号进行加工,传递,和存储的实体,它由实现各种功能的数字逻辑电路相互连接而成。

用来处理数字信号的电子线路称为数字电路,数字集成电路的基本逻辑单元是逻辑门,一块集成电路芯片所容纳的逻辑门数量反映了芯片的集成度,集成度越高,单个芯片所实现的逻辑功能越强。

数字电路在生活中应用广泛,而我所学习的专业为电子信息工程,对于数字电路的熟悉程度要更彻底,所以我选择设计数字钟电路。

在本次设计的课题中,其目的是得到一个计时准确的数字时钟。

在数字钟的制作过程中,要得到准确的计时,就必须对组成电路的每一部分的要求要高。

整个电路是由振荡器电路、分频器电路、时间计数单元、译码驱动电路、数码管五个部分组成。

整个电路的核心部分是振荡电路,振荡电路应采取晶体振荡,晶体振荡器输出频率为32768HZ,在设计中我们采用CD4060来完成电路的振荡和分频,以便于得到1HZ的输出频率。

在计数电路中采用了74LS161计数,74LS161是直接清零的计数器,在电路中起计数和分频的作用。

为了能够得到即准确又清楚的输出,电路采用了译码驱动和数码显示,译码器为74LS247(BCD七段显示译码器)。

译码驱动电路将计数器输出的8421BCD码转换为数码管需要的逻辑状态,并且为保证数码管正常工作提供足够的工作电流。

整个电路的设计有严密的逻辑关系。

关键词:计数器,译码器,振荡器,分频器,译码驱动目录摘要 (5)目录 (6)设计任务描述 (7)设计思路 (8)设计方案 (9)1.引言 (10)2.各部分的分析 (12)2.1、振荡电路 (12)2.2、分频电路 (13)2.3、时间计数电路 (13)2.4、译码驱动电路 (14)2.5、校时电路 (15)2.6、数码显示电路 (16)3.电路的逻辑功能 (17)3.1、十进制 (18)3.2、六进制 (18)3.3、二十四进制 (18)结论 (18)致谢 (21)参考文献 (22)附录A1.1 (23)附录A1.2 (24)附录A1.3 (25)设计任务描述1 设计题目题目:数字钟电路2设计要求(1)以二十四小时为一个周期计时。

EDA设计 数字钟

EDA设计 数字钟

摘要利用MAX+PLUSⅡ软件,设计一个能进行时、分、秒计时的24制多功能数字钟,使其具有定时与闹钟功能,且能在设定的时间发出闹铃音,能非常方便地对时、分、秒进行手动调节以校准时间,每逢整点,产生报时音效,并在实验板上成功下载,验证后满足要求。

关键词:EDA ; MAX+PLUS2 ;数字钟;0 引言随着科学技术的发展,现代电子设计技术已进入一个全新的阶段,传统的电子设计方法、工具和器件在更大的程度上被EDA所取代。

在EDA技术中,最为瞩目的是以现代电子技术为特征的逻辑设计仿真测试技术,该技术的出现,使电子系统设计发生了质的变化,设计速度快、体积小、重量轻、功耗小的集成电路已成为趋势。

本文利用EDA 技术,选用ALTERA公司的CPLD器件EPF10K10LC84-4和软件MAX+PLUS2,设计了一个多功能数字钟,提高了系统的整体性能和可靠性,并通过编译、仿真、下载,经验证后已满足要求。

1 多功能数字钟设计任务1.1 数字钟设计要求(1)、设计一个能显示1/10秒、秒、分、时的12小时数字钟。

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

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

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

1.2 设计思路此设计可分为主控电路、计数器模块和扫描显示三大模块。

1.2.1 主控电路模块主控电路状态用表格显示,如下表所列:模式选择秒、时、分、计数器脉冲输出状态备注Reset Reset1 A B Turn LD-h LD-m LD-alert0 X X X X X 0 0 0 系统复位1 X 0 0 X CLK 0 0 0 系统计时1 X 0 1 0 Change=分计数器加1 0 1 0手动1 X 0 1 1 Change=时计数器加1 1 0 0校时1 1 1 0 0 Change=分计数器加1 0 1 1 设置闹钟1 1 1 0 1 Change=时计数器加11 0 11 0 X X X X 0 0 0 关闭闹钟1.2.2 计数器模块计数器模块中,分钟和秒用带进位位的60进制功能模块,小时用不带进位位的24进制功能模块(如果考虑到日期的问题,在24进制模块加进位输出即可实现)。

EDA数字钟设计

EDA数字钟设计

EDA数字钟设计报告姓名: xxx学号:xxxxxxx专业:电子与通信工程日期:2014-11-7江苏科技大学电信院2014-11-71 引言数字钟通过数字电路技术实现时、分、秒计时,与机械钟相比具有更高的准确性和直观性,具有更长的使用寿命,已得到广泛的使用。

数字钟的设计方法有许多种,例如可用中小规模集成电路组成电子钟,也可以利用专用的电子钟芯片配以显示电路及其所需要的外围电路组成电子钟,还可以利用单片机来实现电子钟等等。

这些方法都各有其特点,本次电子线路课程设计是在vhdl基础上设计并制作一个可以调控的数字钟。

1.1 实验目的与要求1.1.1 实验目的(1)掌握GW48PK2++实验系统的基本用法以及vhdl语言的使用:(2)巩固元件例化、元件调用的基本方法,以及数码管、按键扫描的相关知识。

1.1.2实验要求(1)采用元件例化、元件调用实现整体设计;(2)利用按键进行调时;(3)能在实验箱进行仿真验证。

2 系统设计2.1 原理图设计数字钟原理图,如图1图1 数字钟原理图如图1所示,该系统主要包含六个模块,分为分频器、计数以及显示模块三大部分,另有按键进行时间控制。

2.2 各模块设计2.2.1分频器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity div isport(clk0:in std_logic;clk_1Hz,clk_1kHz:out std_logic);end entity;architecture one of div issignal q1Hz:integer range 0 to 10000000-1 ;signal q1kHz:integer range 0 to 10000-1 ;beginprocess(clk0)beginif clk0'event and clk0='1'thenif q1Hz<5000000-1 then clk_1Hz<='0';q1Hz<=q1Hz+1;elsif q1Hz=10000000-1 then q1Hz<=0;else clk_1Hz<='1';q1Hz<=q1Hz+1;end if;if q1kHz<5000-1 then clk_1kHz<='0';q1kHz<=q1kHz+1;elsif q1kHz=10000-1 then q1kHz<=0;else clk_1kHz<='1';q1kHz<=q1kHz+1;end if;end if;end process;end;该模块将10MHz的时钟进行分频,产生1S和1mS的信号传递给计数与显示部分。

EDA课程设计报告电子钟

EDA课程设计报告电子钟

EDA课程设计报告电子钟EDA课程设计报告——数字钟设计班级:学号:姓名:一、设计任务设计一台能显示时、分、秒的数字钟。

具体要求如下:(1)由实验箱上的时钟信号经分频产生秒脉冲;(2)计时计数器用24进制计时电路;(3)可手动校时, 能分别进行时、分的校正;(4)整点报时;选做: 可设置闹时功能, 当计时计到预定时间时, 扬声器发出闹铃信号, 闹铃时间为4s, 并可提前终止闹铃。

二、试验目的(1)掌握时十进制、六进制和二十四进制计数器的设计方法。

(2)掌握多位计数器相连的设计方法。

(3)掌握多位共阴极扫描显示数码管的驱动及编码。

三、总体设计方案本数字系统实现数字钟的基本的计时功能, 输入8Hz的时钟, 经过分频产生1Hz的时钟信号, 采用24/12小时制计时, 能显示时、分、秒。

本系统还具有校正功能, 能够进行时分的校时, 当计时器运行到59分59秒开始报时, 另外还能够设定闹钟, 当按下闹铃开关时, 可在规定时间闹铃, 当开关复位时, 闹铃停止。

本数字钟实际上是一个对频率(1Hz)进行计数的计数电路。

由于计数的起始时间不可能与标准时间一致, 故需要在电路上加一个校时电路, 同时分频后的1Hz时间信号必须做到准确稳定。

一般使用石英晶体振荡器电路构成数字钟。

数字钟的基本组成本数字钟的实现可分为以下几个模块:(1) 秒计数模块: 秒计数, 在频率为1Hz的时钟下以60次为循环计数, 并产生进位信号影响分计数;(2) 分计数模块: 分计数, 在秒进位信号为高电平时, 计数一次, 同样以60次为一个循环计数, 同时产生分进位信号影响时计数;(3) 时计数模块: 时计数, 在分进位信号为高电平时, 计数一次, 以24/12次为一个循环计数;(4) 频率产生模块: 产生8Hz的计数频率, 经过分频得到1Hz 频率;(5) 时间显示模块: 数码管经过动态显示, 同时进行一定频率的扫描显示时, 分, 秒。

(6) 时间设置模块: 设置调试使能端, 能够调时, 分, 秒。

EDA数字钟设计实训报告

EDA数字钟设计实训报告

EDA实训报告指导教师朱小祥田欢专业电子信息工程技术班级电信1004班姓名张子维日期2012年5月21日—25日一、实训目的1、了解数字钟的工作原理。

2、进一步熟悉用VHDL语言编写驱动七段码管显示的代码。

3、掌握VHDL编写中的一些小技巧。

二、实训原理多功能数字钟应该具有的功能有:显示时-分-秒、整点报时、小时和分钟可调等基本功能。

首先要知道钟表的工作机理,整个钟表的工作应该是在1Hz信号的作用下进行,这样每来一个时钟信号,秒增加1秒,当秒从59秒跳转到00秒时,分钟增加1分,同时当分钟从59分跳转到00分时,小时增加1小时,但是需要注意的是,小时的范围是从0~23时。

在实训中为了显示的方便,由于分钟和秒钟显示的范围都是从0~59,所以可以用一个3位的二进制码显示十位,用一个四位的二进制码(BCD码)显示个位,对于小时因为它的范围是从0~23,所以可以用一个2位的二进制码显示十位,用4位二进制码(BCD码)显示个位。

实训中由于七段码管是扫描的方式显示,所以虽然时钟需要的是1Hz时钟信号,但是扫描确需要一个比较高频率的信号,因此为了得到准确的1Hz信号,必须对输入的系统时钟进行分频。

对于整点报时功能,用户可以根据系统的硬件结构和自身的具体要求来设计。

本实训设计的是当进行整点的倒计时5秒时,让LED来闪烁进行整点报时的提示。

三、实训内容本实验的任务就是设计一个多功能数字钟,要求显示格式为小时-分钟-秒钟,整点报时,报时时间为10秒,即从整点前10秒钟开始进行报时提示,喇叭开始发声,直到过整点时,在整点前5秒LED开始闪烁,过整点后,停止闪烁。

调整时间的的按键用按键模块的S1和S2,S1调节小时,每按下一次,小时增加一个小时,S2调整分钟,每按下一次,分钟增加一分钟。

四、实训步骤①认真听取老师介绍开发板硬件结构,仔细阅读EDA实训指导书,了解数字钟设计程序的大致过程。

②根据之前写过的“精确24秒倒计时”程序,将其中的各个模块程序进行修改。

EDA数字时钟设计报告

EDA数字时钟设计报告

EDA课程设计报告设计题目:数字时钟班级:姓名:学号:日期:一、系统设计要求设计一个具有整点报时功能的数字时钟,要求;1.具有时、分、秒的计数显示功能,24小时循环显示。

2.具有清零、预置初值功能,实现LED动态显示,整点报时采用声音报时。

3.采用元件例化方式实现各模块间的连接。

二、系统设计方案要设计的数字时钟具有基本的计时功能,采用二十四小时计时,显示时分秒,其中分钟和秒模块采用60进制计数器实现,小时模块则需要一24进制计数器实现。

要实现时钟预置初值功能分别设计一个分钟允许置数端和小时允许置数端。

要实现LED动态显示,单独设计一个显示模块。

整点报时采用隔秒响一声实六十进制计数器模块二十四进制计数器模块显示模块元器件例化模块三、主要VHDL源程序六十进制计数器模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY liushijinzhi ISPORT(clk,clr,en,a: IN STD_LOGIC;load_1,load_10: IN STD_LOGIC_VECTOR(3 DOWNTO 0); co: OUT STD_LOGIC;q_10,q_1: OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); END liushijinzhi;ARCHITECTURE behav OF liushijinzhi ISSIGNAL q1:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL q10:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL c:STD_LOGIC;BEGINPROCESS(clk,clr,a,en,load_1)BEGINIF(clr='1') THENq1<="0000";ELSIF(a='1') THENq1<=load_1;ELSIF(clk'event AND clk='1') THENIF(en='1')thenIF(q1="1001") THENq1<="0000";c<='0';ELSIF(q1="1000") THENq1<=q1+'1';c<='1';ELSEq1<=q1+'1';c<='0';END IF;END IF;END IF;END PROCESS;PROCESS(c,clk,clr,a,load_10)BEGINIF(clr='1') THENq10<="0000";ELSIF(a='1') THENq10<=load_10;ELSIF (clk'event AND clk='1') THENIF(c='1') THENIF(q10="0101") THENq10<="0000";co<='1';ELSEq10<=q10+'1';co<='0';END IF;END IF;END IF;END PROCESS;PROCESS(q1)BEGINCASE q1 ISWHEN"0000"=>q_1<="1111110";WHEN"0001"=>q_1<="0110000";WHEN"0010"=>q_1<="1101101";WHEN"0011"=>q_1<="1111001";WHEN"0100"=>q_1<="0110011";WHEN"0101"=>q_1<="1011011";WHEN"0110"=>q_1<="0011111";WHEN"0111"=>q_1<="1110000";WHEN"1000"=>q_1<="1111111";WHEN"1001"=>q_1<="1110011";WHEN OTHERS=>q_1<="ZZZZZZZ";END CASE;END PROCESS;PROCESS(q10)BEGINCASE q10 ISWHEN"0000"=>q_10<="1111110";WHEN"0001"=>q_10<="0110000";WHEN"0010"=>q_10<="1101101";WHEN"0011"=>q_10<="1111001";WHEN"0100"=>q_10<="0110011";WHEN"0101"=>q_10<="1011011";WHEN OTHERS=>q_10<="ZZZZZZZ";END CASE;END PROCESS;END behav;二十四进制计数器模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ershisijinzhi ISPORT(clk,clr,en,a:IN STD_LOGIC;load_1,load_10:IN STD_LOGIC_VECTOR(3 DOWNTO 0); q_1,q_10:OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); END ershisijinzhi;ARCHITECTURE behav OF ershisijinzhi ISSIGNAL c:STD_LOGIC;SIGNAL q1:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL q10:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINPROCESS(clk,clr,en,a,load_1)BEGINIF(clr='1') THENq1<="0000";ELSIF (a='1') THENq1<=load_1;ELSIF(clk'event AND clk='1') THENIF(q1="0011" AND q10="0010") THENq1<="0000";ELSIF (en='1') THENIF(q1="1001") THENq1<="0000";c<='0';ELSIF(q1="1000") THENq1<=q1+'1';c<='1';ELSEq1<=q1+'1';c<='0';END IF;END IF;END IF;END PROCESS;PROCESS(clk,clr,c,a,q1,load_10)BEGINIF(clr='1') THENq10<="0000";ELSIF (a='1') THENq10<=load_10;ELSIF(clk'event AND clk='1') THENIF(q1="0011" AND q10="0010") THEN q10<="0000";ELSIF (c='1') THENIF(q10="0010") THENq10<="0000";ELSEq10<=q10+'1';END IF;END IF;END IF;END PROCESS;PROCESS(q1)BEGINCASE q1 ISWHEN"0000"=>q_1<="1111110"; WHEN"0001"=>q_1<="0110000"; WHEN"0010"=>q_1<="1101101"; WHEN"0011"=>q_1<="1111001";WHEN"0100"=>q_1<="0110011";WHEN"0101"=>q_1<="1011011";WHEN"0110"=>q_1<="0011111";WHEN"0111"=>q_1<="1110000";WHEN"1000"=>q_1<="1111111";WHEN"1001"=>q_1<="1110011";WHEN OTHERS=>q_1<="ZZZZZZZ";END CASE;END PROCESS;PROCESS(q10)BEGINCASE q10 ISWHEN"0000"=>q_10<="1111110";WHEN"0001"=>q_10<="0110000";WHEN"0010"=>q_10<="1101101";WHEN OTHERS=>q_10<="ZZZZZZZ";END CASE;END PROCESS;END behav;显示模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY qdmkz ISPORT(clk,clr:IN STD_LOGIC;din1,din2,din3,din4,din5,din6:IN STD_LOGIC_VECTOR(6 DOWNTO 0); sel:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);num:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END qdmkz;ARCHITECTURE behav OF qdmkz ISSIGNAL q :STD_LOGIC_VECTOR(2 DOWNTO 0);BEGINsel<=q;PROCESS(clk,clr)BEGINIF(clr='1') THENq<="101";ELSIF(clk'event AND clk='1') THENIF(q="000") THENq<="101";ELSEq<=q-'1';END IF;END IF;END PROCESS;PROCESS(q,din1,din2,din3,din4,din5,din6)BEGINCASE q ISWHEN "101"=>num<=din1;WHEN "100"=>num<=din2;WHEN "011"=>num<=din3;WHEN "010"=>num<=din4;WHEN "001"=>num<=din5;WHEN "000"=>num<=din6;WHEN OTHERS=>num<="ZZZZZZZ";END CASE;END PROCESS;END behav;元器件例化模块含报时LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY shuzishizhong ISPORT(clk1,clk2,clrh,clrm,clrs,clr,ah,am,as,en:IN STD_LOGIC;load_1,load_10:IN STD_LOGIC_VECTOR(3 DOWNTO 0);sel:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);num:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);alm:OUT STD_LOGIC);END shuzishizhong;ARCHITECTURE one OF shuzishizhong ISCOMPONENT liushijinzhi ISPORT(clk,clr,en,a: IN STD_LOGIC;load_1,load_10: IN STD_LOGIC_VECTOR(3 DOWNTO 0);co: OUT STD_LOGIC;q_10,q_1: OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END COMPONENT;COMPONENT ershisijinzhi ISPORT(clk,clr,en,a:IN STD_LOGIC;load_1,load_10:IN STD_LOGIC_VECTOR(3 DOWNTO 0);q_1,q_10:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END COMPONENT;COMPONENT qdmkz ISPORT(clk,clr:IN STD_LOGIC;din1,din2,din3,din4,din5,din6:IN STD_LOGIC_VECTOR(6 DOWNTO 0);sel:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);num:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END COMPONENT;SIGNAL co1,co2:STD_LOGIC;SIGNAL sq_1,sq_10,mq_1,mq_10,hq_1,hq_10:STD_LOGIC_VECTOR(6 DOWNTO 0);BEGINu1:liushijinzhi PORT MAP (clk1,clrs,en,as,load_1,load_10,co1,sq_10,sq_1);u2:liushijinzhi PORT MAP (co1,clrm,en,am,load_1,load_10,co2,mq_10,mq_1);u3:ershisijinzhi PORT MAP (co2,clrh,en,ah,load_1,load_10,hq_1,hq_10);u4:qdmkz PORT MAP(clk2,clr,hq_10,hq_1,mq_10,mq_1,sq_10,sq_1,sel,num);PROCESS(sq_10,sq_1,mq_10,mq_1,hq_10,hq_1)BEGINIF(((hq_10="1111110" AND hq_1="1111110")OR(hq_10="0110000" AND hq_1="1101101")) AND mq_1="1111110"AND mq_10="1111110" AND ((sq_10="1111110"AND(sq_1="1111110"OR sq_1="1101101"OR sq_1="0110011"OR sq_1="0011111"OR sq_1="1111111"))OR(sq_10="0110000"AND(sq_1="1111110"OR sq_1="1101101"OR sq_1="0110011"OR sq_1="0011111"OR sq_1="1111111")) OR(sq_10="1101101"AND(sq_1="1111110"OR sq_1="1101101")))) THENalm<='1';ELSIF(((hq_10="1111110" AND hq_1="0110000") OR (hq_10="0110000" AND hq_1="1111001")) AND mq_1="1111110"ANDmq_10="1111110" AND sq_10="1111110"AND sq_1="1111110") THENalm<='1';ELSIF(((hq_10="1111110" AND hq_1="1101101") OR (hq_10="0110000" AND hq_1="0110011")) AND mq_1="1111110"ANDmq_10="1111110" AND sq_10="1111110"AND (sq_1="1111110" OR sq_1="1101101")) THENalm<='1';ELSIF(((hq_10="1111110" AND hq_1="1111001") OR (hq_10="0110000" AND hq_1="1011011")) AND mq_1="1111110"ANDmq_10="1111110" AND sq_10="1111110"AND (sq_1="1111110" OR sq_1="1101101" OR sq_1="0110011")) THENalm<='1';ELSIF(((hq_10="1111110" AND hq_1="0110011") OR (hq_10="0110000" AND hq_1="0011111")) AND mq_1="1111110"ANDmq_10="1111110" AND sq_10="1111110"AND (sq_1="1111110" OR sq_1="1101101" OR sq_1="0110011" OR sq_1="0011111")) THENalm<='1';ELSIF(((hq_10="1111110" AND hq_1="1011011") OR (hq_10="0110000" AND hq_1="1110000")) AND mq_1="1111110"AND mq_10="1111110"AND sq_10="1111110"AND (sq_1="1111110" OR sq_1="1101101" OR sq_1="0110011" OR sq_1="0011111"OR sq_1="1111111")) THENalm<='1';ELSIF(((hq_10="1111110" AND hq_1="0011111") OR (hq_10="0110000" AND hq_1="1111111")) AND mq_1="1111110"AND mq_10="1111110"AND ((sq_10="1111110"AND (sq_1="1111110" OR sq_1="1101101" OR sq_1="0110011" OR sq_1="0011111"OR sq_1="1111111"))OR(sq_10="0110000"AND sq_1="1111110"))) THENalm<='1';ELSIF(((hq_10="1111110" AND hq_1="1110000") OR (hq_10="0110000" AND hq_1="1110011")) AND mq_1="1111110"AND mq_10="1111110"AND ((sq_10="1111110"AND (sq_1="1111110" OR sq_1="1101101" OR sq_1="0110011" OR sq_1="0011111"OR sq_1="1111111"))OR(sq_10="0110000"AND (sq_1="1111110"OR sq_1="1101101")))) THENalm<='1';ELSIF(((hq_10="1111110" AND hq_1="1111111") OR (hq_10="1101101" AND hq_1="1111110")) AND mq_1="1111110"AND mq_10="1111110"AND ((sq_10="1111110"AND (sq_1="1111110" OR sq_1="1101101" OR sq_1="0110011" OR sq_1="0011111"OR sq_1="1111111"))OR(sq_10="0110000"AND (sq_1="1111110"OR sq_1="1101101" OR sq_1="0110011")))) THENalm<='1';ELSIF(((hq_10="1111110" AND hq_1="1110011") OR (hq_10="1101101" AND hq_1="0110000")) AND mq_1="1111110"AND mq_10="1111110"AND ((sq_10="1111110"AND (sq_1="1111110" OR sq_1="1101101" OR sq_1="0110011" OR sq_1="0011111"OR sq_1="1111111"))OR(sq_10="0110000"AND (sq_1="1111110"OR sq_1="1101101" OR sq_1="0110011" OR sq_1="0011111")))) THENalm<='1';ELSIF(((hq_10="0110000" AND hq_1="1111110") OR (hq_10="1101101" AND hq_1="1101101")) AND mq_1="1111110"AND mq_10="1111110"AND ((sq_10="1111110"AND (sq_1="1111110" OR sq_1="1101101" OR sq_1="0110011" OR sq_1="0011111"OR sq_1="1111111"))OR(sq_10="0110000"AND (sq_1="1111110"OR sq_1="1101101" OR sq_1="0110011" OR sq_1="0011111" OR sq_1="1111111")))) THENalm<='1';ELSIF(((hq_10="0110000" AND hq_1="0110000") OR (hq_10="1101101" AND hq_1="1111001")) AND mq_1="1111110"AND mq_10="1111110"AND ((sq_10="1111110"AND (sq_1="1111110" OR sq_1="1101101" OR sq_1="0110011" OR sq_1="0011111"OR sq_1="1111111"))OR(sq_10="0110000"AND (sq_1="1111110"OR sq_1="1101101" OR sq_1="0110011" OR sq_1="0011111" OR sq_1="1111111"))OR(sq_10="1101101"AND sq_1="1111110"))) THENalm<='1';ELSEalm<='0';END IF;END PROCESS;END;四、系统仿真/硬件验证五、设计中遇到的问题与体会在置数方面,第一次写时,在时钟沿内,同步置数,下载在试验箱上很难实现,于是把置数改成异步置数。

EDA课程设计 数字时钟

EDA课程设计 数字时钟

EDA课程设计报告一·设计任务使用硬件描述语言,在CPLD/FPGA上实现一个多功能数字钟。

二·设计要求除按键、LED、扬声器、时钟信号外,整个数字钟的功能要求在一块芯片上实现。

a)具有时,分,秒,计数显示功能,以24小时循环计时;b)具有时间清零功能;c)具有小时、分钟和秒钟调整功能(个位和十位分开调或合起来调)。

d)具有闹钟功能,能预设闹钟时间,精确到秒。

整个数字钟只设一个时钟输入端口,所需不同频率信号在内部分频实现。

(LED扫描频率设为50Hz以上)。

三·设计方案设计采用模块方式,分别为分频模块:产生1Hz的脉冲作为秒的输入,和产生1kHz的脉冲作为数码管显示的动态扫描。

计时模块:秒模块,分模块,时模块。

闹钟模块,显示模块,控制模块。

四·模块端口设置1. 分频模块输入:clkin : 本实验输入为50MHz晶振输出:clk : 为显示模块及始终调节提供1KHz脉冲clkt: 为计数器模块提供1Hz脉冲2. 计时模块m 是模式按键,当m=0 时,进入计时模式,在计时模式下可以进行时间调整。

num3,num4 产生加速调整时间,当其值为1 时,可以快速调整时间,该调整时间的频率由clk 提供。

counta,count1 是手动调节时间。

Turn 接按键,可以改变当前调节的是小时还是分钟,长按turn 键还可以使秒钟信号清零。

sec1,min1,hour1 输出的是计时的秒,分,时。

3.闹钟模块原理:num1,num2 产生加速调整时间,当其值为1 时,可以快速调整时间,该调整时间的频率由clk 提供。

countb,count2 是手动调节闹钟时间。

amin,ahour 是输出的闹钟的分钟和小时4. 控制模块m 是模式按键,当m=0 时,指当前输出的是计时功能;当m=1 时,指当前调整的是闹钟时间;当m=2 时,指当前调整的是计时时间;当m=3 时,此时turn 按键可用于跑表的暂停与开始。

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课程设计报告数字电子钟

EDA课程设计报告数字电子钟

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

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

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

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

<注意>1、时钟源使用频率为0.1HZ的连续脉冲。

2、设置两个按钮,一个供“开始”及“停止”使用,一个供系统“复位”用。

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

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

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

二、【分析与设计】数字钟是计数器的综合应用,数字钟由十分之一秒、秒钟、分钟、时钟组成,十分之一秒由十进制计数器74160组成,秒钟由六十进制计数器构成,分钟由六十进制计数器,时钟由十二进制计数器构成。

该数字钟程序的底层文件主要有六进制计数器模块、六十进制计数器模块和十二进制模块,对各模块进行封装,供顶层文件调用,各模块有VHDL文本设计及原理图设计。

输入端clk是连续脉冲,clrn是高电平系统复位,en是高电平使能端,输出端是十分之一秒位、秒钟个位、秒钟十位、分钟个位、分钟十位、时钟个位、时钟十位,最后由7个数码管显示各位的值。

该数字钟程序的底层文件主要有六进制计数器模块、六十进制计数器模块和十二进制模块,对各模块进行封装,供顶层文件调用,各模块有VHDL 文本设计及原理图设计。

程序框图:十分之一秒 秒钟 分钟 小时三、【程序代码及原理图】 1、六进制计数器VHDL 代码:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY cout6 ISPORT(clk,en,clrn,load:IN STD_LOGIC;date:IN STD_LOGIC_VECTOR(2 DOWNTO 0); cnt:OUT STD_LOGIC_VECTOR(2 DOWNTO 0); co:OUT STD_LOGIC ); END cout6;ARCHITECTURE behave OF cout6 ISSIGNAL q:STD_LOGIC_VECTOR(2 DOWNTO 0); BEGINco<='1' WHEN((q="101")AND(en='1'))ELSE'0'; PROCESS(en,clk) BEGINIF clrn='0' THEN q<="000";ELSIF(clk'event and clk='1') THENIF load='0' THEN q<=date;ELSIF en='1' THEN q<=q+1;IF(q="101")THEN q<="000";END IF;END IF;END IF;END PROCESS;cnt<=q;END behave;波形仿真:2、六十进制计数器原理图:波形仿真:3、十二进制计数器VHDL代码:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY cout12 ISPORT(clk,clrn,ldn,en:IN STD_LOGIC;ha:IN STD_LOGIC_VECTOR(3 DOWNTO 0); hb:IN STD_LOGIC;qa:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); qb:out STD_LOGIC);END cout12;ARCHITECTURE behav OF cout12 ISSIGNAL q:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL b:STD_LOGIC;SIGNAL a:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGINPROCESS(en,clk)BEGINIF clrn='0' THENq<="0000";ELSIF(clk'event and clk='1') THEN IF ldn='0' THENb<=hb;a<=ha;ELSIF en='1' THENq<=q+1;IF(q="1011")THENq<="0000"; END IF;END IF;END IF;CASE q ISWHEN"0000"=>b<='1';a<="0010"; WHEN"0001"=>b<='0';a<="0001"; WHEN"0010"=>b<='0';a<="0010"; WHEN"0011"=>b<='0';a<="0011"; WHEN"0100"=>b<='0';a<="0100"; WHEN"0101"=>b<='0';a<="0101"; WHEN"0110"=>b<='0';a<="0110"; WHEN"0111"=>b<='0';a<="0111"; WHEN"1000"=>b<='0';a<="1000"; WHEN"1001"=>b<='0';a<="1001"; WHEN"1010"=>b<='1';a<="0000"; WHEN"1011"=>b<='1';a<="0001"; WHEN OTHERS =>NULL;END CASE;END PROCESS;qa<=a;qb<=b;END ARCHITECTURE behav;波形仿真:4、数字钟原理图:波形仿真:四、【结果与测试】根据六进制的波形图判断出六进制的设计正确,实现了0~5的计数,并且在5处产生进位,将六进制进行封装与十进制74160根据原理图设计成六十进制计数器,然后将它进行封装,根据六十进的波仿真图可以看出实现了0~59的计数,并且在59处产生进位,然后将它进行封装。

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 简单数字电子钟的设计

EDA 简单数字电子钟的设计

《EDA技术》课程实验报告学生姓名:**所在班级:**指导教师:** 老师记分及评价:报告满分3分得分一、实验名称实验1-3:简单数字电子钟的设计(原理图输入设计方法)二、任务及要求【基本部分】1、在QuartusII平台上,采用原理图输入设计方法,调用两片74160十进制计数器,采用反馈置数法,完成一个24进制同步计数器的设计,并进行时序仿真。

要求具备使能功能和异步清零功能,设计完成后封装成一个元件。

2、同1,采用原理图输入设计方法,调用两片74160十进制计数器,采用反馈置数法,完成一个60进制同步计数器的设计,并进行时序仿真。

要求具备使能功能和异步清零功能,设计完成后封装成一个元件。

3、利用1和2所设计的60进制计数器和24进制计数器元件,采用同步的方式设计一个简单的数字电子钟并进行时序仿真,要求具有时分秒功能显示功能、使能功能和异步清零功能。

4、由于实验箱数码管采用的动态扫描方式,本实验暂时只要求仿真,硬件验证到实验7再完成。

【发挥部分】1、思考:采用反馈清零法设计的计数器与反馈置数法有何不同?请用实例进行仿真。

2、如何实现电子钟时分秒连续可调的功能?三、原理图二十四进制原理图六十进制原理图数字电子钟原理图四、仿真及结果分析24进制时序仿真图24进制计数器采用的是两片74160集成块,利用同步置数原理,在第23个脉冲的时候跳转为零。

这时个位计数器g3到g0的数值时0011,十位计数器的s3到s0的数值时0010。

另外,使能断也应接入到与非门的中,与非门的作用是防止受干扰发生误写。

60进制时序仿真图60进制计数器采用的是两片74160集成块,利用同步置数原理,在第59个脉冲的时候跳转为零。

这时个位计数器g3到g0的数值时1001,十位计数器的s3到s0的数值时0101。

另外,使能断也应接入到与非门的中,与非门的作用是防止受干扰发生误写。

电子时钟时序仿真图电子时钟计数器采用的是两片60进制的计数器与一片24进制的计数器组成的,连接到一起就可以组成电子时钟计数器,要注意的是如果前面的24进制计数器与60进制计数器的使能短没接入与非门的话,可能会时钟脉冲的波形不是严格的按要求翻转。

EDA实验报告 数字时钟设计

EDA实验报告  数字时钟设计

1.引言随着科学技术的迅猛发展,在计算机技术的推动下电子技术获得了飞速的发展。

电子产品几乎渗透到了工业、生活的各个领域,其中集成电路的设计正朝着速度快、性能高、容量大、体积小和微功耗的方向发展。

基于这种情况,可编程逻辑器件的出现和发展大大改变了传统的系统设计方法。

可编程逻辑器件和相应的设计技术主要体现在三个方面:一是可编程逻辑器件的芯片技术;二是适用于可逻辑编程器件的硬件编程技术,三是可编程逻辑器件设计的EDA开发工具,它主要用来进行可编程逻辑器件应用的具体实现。

在本设计中采用了集成度较高的FPGA 可编程逻辑器件,选用了VHDL硬件描述语言和Quartus II开发软件进行设计。

VHDL硬件描述语言在电子设计自动化( EDA)中扮演着重要的角色,由于采用了具有多层次描述系统硬件功能的“自顶向下”(Top -Down)的全新设计方法,使设计师们摆脱了大量的辅助设计工作,而把精力集中于创造性的方案与概念构思上,用新的思路来发掘硬件设备的潜力,从而极大地提高了设计效率,缩短了产品的研制周期。

Quartus II软件是集成了编辑器、仿真工具、检查/分析工具和优化/综合工具的这些所有开发工具的一种集成的开发环境,通过该开发环境能够很方便的检验设计的仿真结果以及建立起与可编程逻辑器件的管脚之间对应的关系。

EDA技术是以计算机为工具,根据硬件描述语言HDL完成的设计文件,自动地完成逻辑编译、化简、分割、综合及优化、布局布线。

仿真以及对于特定目标芯片的适配编译和编程下载等工作。

典型的EDA工具中必须包含两个特殊的软件包,即综合器和适配器。

综合器的功能就是将设计者在EDA平台上完成的针对某个系统项目的HDL、原理图或状态图形描述,针对给定的硬件系统组件,进行编译、优化、转换和综合,最终获得我们欲实现功能的描述文件。

综合器在工作前,必须给定所要实现的硬件结构参数,它的功能就是将软件描述与给定的硬件结构用一定的方式联系起来。

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课程设计报告之数字时钟设计(免费哦~)

计算机科学与技术学院EDA课程设计报告设计题目:数字时钟的设计班级:姓名:学号:日期:2011年6月20日一、系统设计要求1、具有时、分、秒的计数显示功能,24小时循环显示。

2、具有异步清零、预置初值功能,实现LED动态显示,整点报时采用声音报时,几点报几下。

3、采用元件例化方式实现各模块间的连接。

二、系统设计方案1、整个模块采用两个时钟,一个时钟的频率为一秒,用于程序秒的输入。

另一个时钟频率较高,用于七段显示器的选择端口三八译码器的输入时钟。

2、时分秒皆采用两个位的计数,一位代表十位,一位代表个位。

分秒为60进制,时为24进制。

个位逢九向十位进一,秒逢59向分进一,分逢59向时进一。

3、在小时的子程序里把两位小时数转换成一位数作为报时程序的输入。

三、主要VHDL源程序秒—底层LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY SECOND ISPORT (CLK1,R:IN STD_LOGIC;CO1:OUT STD_LOGIC;S0,S1:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END ;ARCHITECTURE XIA OF SECOND ISBEGINPROCESS(CLK1,R,SS0,SS1)VARIABLE SSS0,SSS1:STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINIF R='1' THEN SSS0:="";SSS1:="";ELSIF CLK1'EVENT AND CLK1='1' THENIF SSS1="" AND SSS0=""THEN CO1<='1';SSS0:=""; SSS1:="";ELSIF SSS0="" THEN SSS0:="";SSS1:=SSS1+1;ELSE SSS0:=SSS0+1;CO1<='0';END IF;END IF;S0<=SSS0;S1<=SSS1;END PROCESS;END ;分—底层LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY MINUTE ISPORT (CLK2,R,S:IN STD_LOGIC;MM0,MM1:IN STD_LOGIC_VECTOR(3 DOWNTO 0);CO2:OUT STD_LOGIC;M0,M1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END ;ARCHITECTURE XIA OF MINUTE ISBEGINPROCESS(CLK2,R,S,MM0,MM1)VARIABLE MMM0,MMM1:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINIF R='1' THEN MMM0:="0000";MMM1:="0000";ELSIF S='1' THEN MMM0:=MM0;MMM1:=MM1;ELSIF CLK2'EVENT AND CLK2='1' THENIF MMM1="0101" AND MMM0="1001"THEN CO2<='1';MMM0:="0000"; MMM1:="0000";ELSIF MMM0="1001" THEN MMM0:="0000";MMM1:=MMM1+1;CO2<='0'; ELSE MMM0:=MMM0+1;CO2<='0';END IF;END IF;M0<=MMM0;M1<=MMM1;END PROCESS;END ;时—底层LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.std_logic_unsigned.all;ENTITY HOUR ISPORT (CLK3,R,S:IN STD_LOGIC;HH0:IN STD_LOGIC_VECTOR(3 DOWNTO 0);HH1:IN STD_LOGIC_VECTOR(1 DOWNTO 0);H0:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);H1:OUT STD_LOGIC_VECTOR(1 DOWNTO 0);NUMBER2:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END ;ARCHITECTURE XIA OF HOUR ISBEGINPROCESS(CLK3,R,S,HH0,HH1)VARIABLE HHH0:STD_LOGIC_VECTOR(3 DOWNTO 0);VARIABLE HHH1:STD_LOGIC_VECTOR(1 DOWNTO 0);VARIABLE NUMBER1,NUMBER0:STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINIF R='1' THEN HHH0:="0000";HHH1:="00";ELSIF S='1' THEN HHH0:=HH0;HHH1:=HH1;ELSIF CLK3'EVENT AND CLK3='1' THENIF HHH0="0011" AND HHH1="10"THEN HHH0:="0000";HHH1:="00";ELSIF HHH0="1001" THEN HHH1:=HHH1+1;HHH0:="0000"; ELSE HHH0:=HHH0+1;END IF;END IF;H0<=HHH0;H1<=HHH1;IF HHH1="00" THEN NUMBER0:="";ELSIF HHH1="01" THEN NUMBER0:="";ELSIF HHH1="10" THEN NUMBER0:="";END IF;NUMBER1:=NUMBER0+HHH0;IF NUMBER1="" THEN NUMBER2<="";ELSIF NUMBER1>"" THEN NUMBER2<=NUMBER1-"";ELSE NUMBER2<=NUMBER1;END IF;END PROCESS;END ;报时—底层LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY RING ISPORT(CLK4,CLK5:IN STD_LOGIC;NUMBER:IN STD_LOGIC_VECTOR(7 DOWNTO 0);P:OUT STD_LOGIC);END;ARCHITECTURE ONE OF RING ISBEGINPROCESS(CLK4,CLK5,NUMBER)VARIABLE R:STD_LOGIC;VARIABLE TEX:STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINIF CLK4='1' THENIF (NUMBER/=""AND TEX<NUMBER) THEN R:=CLK5;ELSE R:='0';END IF;IF CLK5'EVENT AND CLK5='1' THENIF TEX<NUMBER THENTEX:=TEX+1;END IF;END IF;ELSE TEX:="";END IF;P<=R;END PROCESS;END;显示—底层LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY dec7s ISPORT(a1,a2:IN STD_LOGIC_VECTOR(7 DOWNTO 0);a3,a4,a5:IN STD_LOGIC_VECTOR(3 DOWNTO 0); a6:IN STD_LOGIC_VECTOR(1 DOWNTO 0);led7s1,led7s2,led7s3,led7s4,led7s5,led7s6 :OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END;ARCHITECTURE one OF dec7s ISBEGINPROCESS(a1,a2,a3,a4,a5,a6)BEGINCASE a1 ISWHEN ""=>led7s1<="";WHEN ""=>led7s1<="";WHEN ""=>led7s1<="";WHEN ""=>led7s1<="";WHEN ""=>led7s1<="";WHEN ""=>led7s1<="";WHEN ""=>led7s1<="";WHEN ""=>led7s1<="";WHEN ""=>led7s1<="";WHEN ""=>led7s1<="";WHEN OTHERS=>led7s1<="";END CASE;CASE a2 ISWHEN ""=>led7s2<="";WHEN ""=>led7s2<="";WHEN ""=>led7s2<="";WHEN ""=>led7s2<="";WHEN ""=>led7s2<="";WHEN ""=>led7s2<="";WHEN ""=>led7s2<="";WHEN ""=>led7s2<="";WHEN ""=>led7s2<="";WHEN ""=>led7s2<="";WHEN OTHERS=>led7s2<="";END CASE;CASE a3 ISWHEN "0000"=>led7s3<="";WHEN "0001"=>led7s3<="";WHEN "0010"=>led7s3<="";WHEN "0011"=>led7s3<="";WHEN "0100"=>led7s3<="";WHEN "0101"=>led7s3<="";WHEN "0110"=>led7s3<="";WHEN "0111"=>led7s3<="";WHEN "1000"=>led7s3<="";WHEN "1001"=>led7s3<="";WHEN OTHERS=>led7s3<=""; END CASE;CASE a4 ISWHEN "0000"=>led7s4<="";WHEN "0001"=>led7s4<="";WHEN "0010"=>led7s4<="";WHEN "0011"=>led7s4<="";WHEN "0100"=>led7s4<="";WHEN "0101"=>led7s4<="";WHEN "0110"=>led7s4<="";WHEN "0111"=>led7s4<="";WHEN "1000"=>led7s4<="";WHEN "1001"=>led7s4<="";WHEN OTHERS=>led7s4<=""; END CASE;CASE a5 ISWHEN "0000"=>led7s5<="";WHEN "0001"=>led7s5<="";WHEN "0010"=>led7s5<="";WHEN "0011"=>led7s5<="";WHEN "0100"=>led7s5<="";WHEN "0101"=>led7s5<="";WHEN "0110"=>led7s5<="";WHEN "0111"=>led7s5<="";WHEN "1000"=>led7s5<="";WHEN "1001"=>led7s5<="";WHEN OTHERS=>led7s5<=""; END CASE;CASE a6 ISWHEN "00"=>led7s6<="";WHEN "01"=>led7s6<="";WHEN "10"=>led7s6<="";WHEN OTHERS=>led7s6<=""; END CASE;END PROCESS;END one;顶层LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY TOP ISPORT (CP,CLK,R0,S0:IN STD_LOGIC;SM0,SM1,SH0:IN STD_LOGIC_VECTOR(3 DOWNTO 0);SH1:IN STD_LOGIC_VECTOR(1 DOWNTO 0);SEL:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);Y:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);PP:OUT STD_LOGIC);END;ARCHITECTURE XIA OF TOP ISSIGNAL Y0,Y1:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL Y2,Y3,Y4:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL Y5:STD_LOGIC_VECTOR(1 DOWNTO 0);SIGNAL YY6,YY1,YY2,YY3,YY4,YY5,YY7,PNUMBER:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL CO11,CO22:STD_LOGIC;component SECONDPORT (CLK1,R:IN STD_LOGIC;CO1:OUT STD_LOGIC;S0,S1:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));end component;component MINUTEPORT (CLK2,R,S:IN STD_LOGIC;MM0,MM1:IN STD_LOGIC_VECTOR(3 DOWNTO 0);CO2:OUT STD_LOGIC;M0,M1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));end component;component HOURPORT (CLK3,R,S:IN STD_LOGIC;HH0:IN STD_LOGIC_VECTOR(3 DOWNTO 0);HH1:IN STD_LOGIC_VECTOR(1 DOWNTO 0);H0:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);H1:OUT STD_LOGIC_VECTOR(1 DOWNTO 0);NUMBER2:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));end component;component RINGPORT(CLK4,CLK5:IN STD_LOGIC;NUMBER:IN STD_LOGIC_VECTOR(7 DOWNTO 0);P:OUT STD_LOGIC);end component;component dec7sPORT(a1,a2:IN STD_LOGIC_VECTOR(7 DOWNTO 0);a3,a4,a5:IN STD_LOGIC_VECTOR(3 DOWNTO 0);a6:IN STD_LOGIC_VECTOR(1 DOWNTO 0);led7s1,led7s2,led7s3,led7s4,led7s5,led7s6:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));end component;BEGINYY7<="";U1:SECOND PORT MAP(CLK1=>CLK,R=>R0,S0=>Y0,S1=>Y1,CO1=>CO11); U2:MINUTE PORT MAP(CLK2=>CO11,R=>R0,S=>S0,M0=>Y2,M1=>Y3,CO2=>CO22,MM0=>SM0,MM1=>SM1);U3:HOUR PORT MAP(CLK3=>CO22,R=>R0,S=>S0,H0=>Y4,H1=>Y5,HH0=>SH0,HH1=>SH1,NUMBER2=>PNUMBER);U4:RING PORT MAP(CLK4=>CO22,CLK5=>CLK,NUMBER=>PNUMBER,P=>PP); U5:dec7s PORT MAP(a1=>Y0,led7s1=>YY1,a2=>Y1,led7s2=>YY2,a3=>Y2,led7s3=>YY3,a4=>Y3,led7s4=>YY4,a5=>Y4,led7s5=>YY5,a6=>Y5,led7s6=>YY6);PROCESS(CP)VARIABLE SELL:STD_LOGIC_VECTOR(2 DOWNTO 0);BEGINIF CP'EVENT AND CP='1' THENIF SELL="111" THEN SELL:="000" ;ELSE SELL:=SELL+1;END IF;END IF;CASE SELL ISWHEN "000"=>Y<=YY1;WHEN "001"=>Y<=YY2;WHEN "010"=>Y<=YY3;WHEN "011"=>Y<=YY4;WHEN "100"=>Y<=YY5;WHEN "101"=>Y<=YY6;WHEN OTHERS=>Y<=YY7;END CASE;SEL<=SELL;END PROCESS;END;四、系统仿真/硬件验证五、设计中遇到的问题与体会自己想了哈。

EDA课程设计数字电子钟

EDA课程设计数字电子钟

一、设计任务及要求1、设计内容选用合适的可编程逻辑器件及外围电子元器件,设计一个数字电子钟,利用EDA 软件(QUARTUS Ⅱ)进行编译及仿真,设计输入采用Verilog HDL硬件描述语言输入法,并下载到EDA实验箱系统,连接外围电路,完成实际测试。

2、设计要求(1)具有时、分、秒计数显示功能,该电子钟正常显示小时、分钟、秒,各用2位数码管(共6位数码管),显示范围为0—23时59分59秒。

(2)具有复位清零的功能,且能够对计时系统的小时、分钟进行调整。

(3)定时响铃功能,设计计时到01分10秒后蜂鸣器开始响,持续时间10秒。

二、设计思想对于数字钟来说首先是时分秒的计数功能,然后能显示,附带功能是清零、调整时分,拟定如下方案:计时校正模块中,用1Hz时钟送入秒脉冲信号,“秒计数器”采用60进制,每累计60秒,发出一个“分脉冲”信号,该信号将被送到“分计数器”。

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

“时计数器”采用24进制,可实现24小时的累计计数,时钟使用三个输入按键K1、K2、K3,分别控制数字钟的校时、校分、清零,每次分别按下K1、K2按键,对应的时、分计数就加1,按下K3,时间清零。

显示模块中,分别用六个八位数码管显示时钟的时十位、时个位、分十位、分个位、秒十位、秒个位,设置一个时钟脉冲用于扫描数码管显示。

最后的定时响铃功能,本报告设计为计时到01分10秒开始驱动蜂鸣器响,持续十秒。

三、程序清单Verilog HDL源程序:module clock(clk1,clk2,dx,wei,k1,k2,rst,led);input clk1,clk2,k1,k2,rst;output [2:0] wei;output [7:0] dx;output led;reg led;reg [2:0] wei;reg [7:0] dx;reg [7:0] as,ts,am,tm,ah,th,xs;reg [7:0] q;always @(posedge clk1 or posedge rst)beginif(rst){as,ts,xs,am,tm,xs,ah,th}<=8'b00000000; else if(k1)beginif(ah==8'b00001001)beginah=8'b00000000;th=th+8'b00000001;endelse if(ah==8'b00000011&&th==8'b00000010) beginth=8'b00000000;ah=8'b00000000;endelse ah=ah+8'b00000001;endelse if(k2)beginif(am==8'b00001001)beginam=8'b00000000;if(tm==8'b00000101)tm=8'b00000000;else tm=tm+8'b00000001;endelse am=am+8'b00000001;endelse if(as==8'b00001001)beginas=8'b00000000;if (ts==8'b00000101) begints=8'b00000000;if(am==8'b00001001)beginam=8'b00000000;if(tm==8'b00000101)begintm=8'b00000000;if(ah==8'b00001001)beginah=8'b00000000;th=th+8'b00000001;endelseif(ah==8'b00000011&&th==8'b00000010)beginth=8'b00000000;ah=8'b00000000;endelse ah=ah+8'b00000001;endelse tm=tm+8'b00000001;endelse am=am+8'b00000001;end else ts=ts+8'b00000001; endelse as=as+8'b00000001;endalways @(posedge clk2)beginif(wei==3'b111)wei<=3'b000;else wei<=wei+3'b001;endalways @(q or wei or k1)beginif(wei==3'b000)q<=as;else if(wei==3'b001)q<=ts;else if(wei==3'b010)q<=8'b11111111;else if(wei==3'b011)q<=am;else if(wei==3'b100)q<=tm;else if(wei==3'b101)q<=8'b11111111;else if(wei==3'b110)q<=ah;else if(wei==3'b111)q<=th;case(q)0:dx<=8'b11111100;1:dx<=8'b01100000;2:dx<=8'b11011010;3:dx<=8'b11110010;4:dx<=8'b01100110;5:dx<=8'b10110110;6:dx<=8'b10111110;7:dx<=8'b11100000;8:dx<=8'b11111110;9:dx<=8'b11110110;default dx<=8'b00000010;endcaseendalways @(posedge clk1)beginled=1;if(ts==8'b00000001&&am==8'b00000001&&tm==8'b00000000&&ah= =8'b00000000&&th==8'b00000000)led=~led;elseif(as==8'b00000000&&ts==8'b00000010&&am==8'b00000001&&tm= =8'b00000000&&ah==8'b00000000&&th==8'b00000000) led=0;endendmodule四、调试及总结1.仿真波形图2.总结通过此次课程设计,让我对EDA这门技术有了更深的体会,并更好的学会了使用QuartusⅡ软件进行硬件设计。

简易数字钟的EDA设计

简易数字钟的EDA设计

序号:学号:课程名称: FPGA设计及应用论文题目:简易数字钟的EDA设计学生姓名:学院(系):专业班级:简易数字钟的EDA设计一、产品设计需求说明本产品实现的功能:1、数字钟功能:数字钟时间为24小时一个周期:数字钟须显示时、分、秒。

2、校时功能:可以分别对时、分、秒进行单独校时,使其调整到标准时间。

3、扩展功能:整点报时系统。

设计整点报时电路,每当数字钟达到整点时开始报时,并发出鸣叫声,十秒后鸣叫结束。

设计参数:使用的芯片/硬件平台GW48实验系统软件平台WindowsXP + MuxplusII10.1二、方案设计及实现1、系统实现原理和总体框图数字式电子钟实际上是一个对标准1Hz进行计数的计数电路,秒计数器满60秒后向分计数器进位,分计数器满60秒后向时计数器进位,时计数器按24翻1规律计数,计数输出经译码器送LED显示器,由于计数的起始时间不可能与标准时间(北京时间)一致,故需要在电路上加上一个校时电路,该数字式电子钟除用于计时外,还能整点报时,如图(1-1)所示为多功能数字式电子钟的构成框图。

除校时功能外,电子钟处于其他功能状态时并不影响数字钟的运行,该电子钟利用GW48 EDA实验平台的扬声器进行整点报时。

图(1-1)多功能数字式电子钟的系统框图2、主要模块之计数器模块的设计计数器模块说明:时分秒计数器模块由秒个位、十位计数器,分个位、十位计数器以及时个位、十位计数电路组成。

其中,秒个位和秒十位计数器、分个位和分十位计数为六十进制计数器,而根据设计要求,时个位和时十位构成的为二十四进制计数器。

因此时分秒计数器模块可划分为时计数、分计数和秒计数3个子模块,根据设计要求,时计数子模块为一个二十四进制可预置的BCD码计数器模块;分计数和秒计数子模块均为六十进制可预置的BCD码计数器模块。

算法原理如图(1-2)、图(1-4)、图(1-6)所示源代码:1)、六进制计数器:--File:counter6.vhd--Designer:AAA--Module:decimal counter--Description: It is a decimal counter with a carry.--Simulator:MAX plusII 10.0.9/Window XP--Synthesizer:MAX plusII 10.0.9/Window XP--Date:10/16/11--Modify date:10/5/12LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; 图(1-2)六进制计数器工作流程图USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY counter6 ISPORT(clk:IN STD_LOGIC;reset:IN STD_LOGIC;din:IN STD_LOGIC_VECTOR(2 DOWNTO 0);dout:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);c:OUT STD_LOGIC);END counter6;ARCHITECTURE dianzizhong OF counter6 ISSIGNAL count:STD_LOGIC_VECTOR(2 DOWNTO 0);BEGINdout<=count;PROCESS(clk,reset,din)BEGINIF reset='0' THEN --计数器复位count<=din;c<='0';ELSIF rising_edge(clk) THENIF count="101" THEN --到5后,计数器清零count<="000";c<='1';ELSEcount<=count+1;c<='0';END IF;END IF;END PROCESS;END dianzizhong;仿真图:图(1-3) 六进制计数器功能仿真图2)、十进制计数器:--File:counter10.vhd--Designer:AAA--Module:decimal counter--Description: It is a decimal counter with a carry.--Simulator:MAX plusII 10.0.9/Window XP--Synthesizer:MAX plusII 10.0.9/Window XP--Date:10/16/11--Modify date:10/5/12LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; 图(1-4)十进制计数器工作流程图USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY counter10 ISPORT(clk :IN STD_LOGIC;reset: IN STD_LOGIC;din: IN STD_LOGIC_VECTOR(3 DOWNTO 0);dout: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);c: OUT STD_LOGIC);END counter10;ARCHITECTURE dianzizhong OF counter10 ISSIGNAL count:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINdout<=count;PROCESS(clk,reset,din)BEGINIF reset='0' THEN --计数器复位count<=din;c<='0';ELSIF rising_edge(clk) THENIF count="1001" THEN --到9后,计数器清零count<="0000";c<='1';ELSEcount<=count+1;c<='0';END IF;END IF;END PROCESS;END dianzizhong;仿真图:图(1-5) 十进制计数器功能仿真图3)、二十四进制计数器:--File:counter24.vhd--Designer:沙桂珍--Module:counter base-24--Description: It is a counter base-24.--Simulator:MAX plusII 10.0.9/Window XP--Synthesizer:MAX plusII 10.0.9/Window XP--Date:10/16/11--Modify date:10/5/12LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;图(1-6)二十四进制计数器工作流程图USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY counter24 ISPORT(clk:IN STD_LOGIC;reset:IN STD_LOGIC;din:IN STD_LOGIC_VECTOR(5 DOWNTO 0);dout:OUT STD_LOGIC_VECTOR(5 DOWNTO 0));END counter24;ARCHITECTURE dianzizhong OF counter24 ISSIGNAL count:STD_LOGIC_VECTOR(5 DOWNTO 0);BEGINdout<=count;PROCESS(clk,reset,din)BEGINIF reset='0' THENcount<=din;ELSIF rising_edge(clk) THENIF count="100011" THEN --达到23时下一次归0count<="000000";ELSIF count(3 DOWNTO 0)="1001" THENcount(3 DOWNTO 0)<="0000"; --低位到9后,计数器清零count(5 DOWNTO 4)<=count(5 DOWNTO 4)+1; --高位加1ELSEcount(3 DOWNTO 0)<=count(3 DOWNTO 0)+1;END IF;END IF;END PROCESS;END dianzizhong;仿真图:图(1-7) 二十四进制计数器功能仿真图3、主要模块之校时模块的设计校时模块说明:当刚接通电源或走时出现误差时都需要对时间进行校正,对时间的校正是通过对时间的重置来实现,当功能键reset为1、load为0时即进入校时模式,此模式下可通过对sel键的选择来给时,分,秒中的一个进行置数,当sel为“01”时是校时状态,为“10”时是校分状态,为“11”时是校秒状态,在对其中一个置数时不会影响其他两个计数。

EDA课设数字钟

EDA课设数字钟

课程设计任务书学生姓名:专业班级:电子科学与技术指导教师:工作单位:信息工程学院题目: 数字钟设计目的:1、掌握在QuartusⅡ软件的使用方法,并能熟练的在QuartusⅡ环境中运用VHDL语言完成一些简单程序的设计;2、掌握数字钟的主要功能与在FPGA中的实现方法。

要求完成的主要任务:1、课程设计工作量:1周。

2、技术要求:(1)设计一个6位LED动态扫描显示的数字钟,根据一个控制键能选择显示时、分、秒或年、月、日;(2)通过拨码开关可以进行时、分、年、月、日的调整,可以实现翻屏;3、查阅至少5篇参考文献。

按《武汉理工大学课程设计工作规范》要求撰写设计报告书。

全文用A4纸打印,图纸应符合绘图规范。

时间安排:1、2012 年12月17日集中,作课设具体实施计划与课程设计报告格式的要求说明。

2、2012年12月18日至2012年12 月21日查阅相关资料,学习电路的工作原理。

3、2012年12月22日至2012年12月27日,方案选择和电路设计。

4、2012年12月28日上交课程设计成果及报告,同时进行答辩。

指导教师签名:年月日系主任(或责任教师)签名:年月日目录摘要 (I)Abstract (II)1 绪论 (1)2 设计内容及要求 (1)2.1设计目的及主要任务 (1)2.1.1设计目的 (1)2.1.2 设计任务及要求 (1)2.2设计思想 (1)3 数字钟的设计 (2)3.1 设计原理与方法 (2)3.2 单元模块设计 (2)3.2.1 分频计模块设计 (2)3.2.2 消抖电路模块设计 (3)3.2.3 计数器模块设计 (3)3.2.4 多路复用器模块设计 (6)3.2.5 七段译码模块设计 (6)3.3 数字钟设计总原理图 (6)4 编译报告 (8)4.1 设计原理与方法 (8)5 电路仿真与硬件调试....................................... 错误!未定义书签。

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

实训一 简易数字钟的EDA设计1.2.1 设计要求本案例将在QuartusII开发系统中用可编程逻辑器件,完成简易数字钟的EDA设计,具体要求为:1数字钟功能:数字钟的时间为24小时一个周期;数字钟须显示时、分、秒;2校时功能:可以分别对时、分、秒进行单独校时,使期调整到标准时间;3扩展功能:整点报时系统。

设计报整点报时电路,每当数字钟计时59分50秒时开始报时,并发出鸣叫声,到达整点时鸣叫结束,鸣叫频率为100Hz。

1.2.2 功能描述数字式电子钟实际上是一个对标准1Hz进行计数的计数电路,秒计数器满60后向分计数器进位, 分计数器满60后向时计数器进位, 时计数器按24翻1规律计数, 计数输出经译码器送LED显示器, 由于计数的起始时间不可能与标准时间(如北京时间)一致,故需要在电路上加上一个校时电路,该数字式电子钟除用于计时外,还能整点报时,如图8-4所示为多功能数字式电子钟的构成框图。

除校时功能外,电子钟处于其他功能状态时并不影响数字钟的运行,该电子钟利用GW48 实验平台的扬声器进行整点报时,设置2个按键作为功能键和调整键。

图8-4多功能数字式电子钟的系统框图1输入1)K1:模式选择键,第一次按K1按钮时为校秒状态, 按第二次为校分状态, 按第三次为校时状态,按第四次为计时状态,系统初始状态为计时状态。

2)K2:手动校时调整键,当按住该键不放时,表示调整时间直至校准的数值,松开该键则停止调整。

3)clk_1kHz:1000Hz的基准时钟输入,该信号10分频后作为整点报时所需的音频信号的输入时钟,1000分频后作为数字钟输入时钟。

2输出HH[1..0] HL[3..0]为BCD码小时输出显示;MH[2..0] ML[3..0]为 BCD码分输出显示;SH[2..0] SL[3..0]为BCD码秒输出显示;alarm为报时输出。

1.2.3 数字钟的层次化设计方案根据上述功能,可以把多功能数字式电子钟系统划分为三部分:时钟源(即标准秒钟的产生电路),时分秒计数器模块、数字钟模块、校时模块、数字秒表模块、闹钟和整点报模块。

1时钟源--晶体振荡器电路1)原理说明如精度要求不高可选用555构成的多谐振荡器,设其振荡频率为f0=1kHz,电路原理图如图8-5所示,而后通过分频器电路(1000分频)即可产生1Hz的方波信号供秒计数器进行计数,分频器电路可由3片十进制计数器级联而得,根据1.2.2节的描述,本设计案例选用图8-5的多谐振荡器电路的输出作为数字式电子钟的基准时钟输入,基准时钟输入一方面用于定时报时和整点报时所需的音频信号。

另一方面该信号惊10分频后作为数字秒表的输入时钟,经1000分频后作为数字钟输入时钟。

2)时钟电路子模块counter1k的设计时钟电路子模块可由3个十进制计数器74160级联而成,输出有10分频输出clk_10, 1000分频输出clk_1Hz,其原理图如图8-7所示,74LS160为同步可予置4bit十进制加法计数器,它具有同步载入,异步清零的功能。

图8-5 多谐振荡器电路 图8-6时钟电路子模块原理图在QuartusII中,利用原理图输入法完成源程序的输入、编译和仿真。

时钟电路子模块的仿真输出波形文件如图8-7所示。

在仿真结果正确无误后,可将以上设计的时钟电路子模块counter1k设置成可调用的元件counter1k.sym如图8-8所示。

,以备高层设计中使用。

图8-7时钟电路仿真输出波形 图8-8时钟电路模块元件符号图2时分秒计数器模块1)原理说明时分秒计数器模块由秒个位、十位计数器、分个位、十位计数及时个位、十位计数电路构成。

其中:秒个位和秒十位计数器、分个位和分十位计数为六十进制计数器,而根据设计要求时个位和时十位构成的为二十四进制计数器。

因此时分秒计数器模块可划分为时计数、分计数和秒计数3个子模块,根据设计要求时计数子模块为一个二十四进制可预置BCD码计数器模块;分计数和秒计数子模块均为六十进制可预置BCD码计数器模块。

2)秒计数器模块的EDA设计秒计数器模块的输入来自时钟电路的秒脉冲clk_1Hz。

为实现六十进制可预置BCD码的秒计数器的功能,可采用两级BCD码计数器同步级联而成。

第一级属于秒个位,用来计数和显示0~9秒,BCD 码计数器每秒数值加1,当这一级达到9秒时,BCD码计数器使其进位输出信号Tc有效,在下一个时钟脉冲有效沿,秒个位计数器复位到0。

秒个位计数器进位输出信号Tc使秒十位计数器(模6计数)使能,在秒个位计数器复位同时,秒十位计数器计数值加1,该过程将持续59秒,此时秒十位计数器状态为1012(5),秒个位计数器状态为10012(9),此时将显示读数为59,同时秒十位计数器进位输出信号Tc为高电平,下一脉冲到来时秒个位计数器和秒十位计数器同时复位到0,并同步产生分脉冲进位输出信号Cout。

根据分析,可用2片74160同步级联设计成六十进制可预置BCD码计数器。

74160为同步可预置4bit十进制加法计数器,它具有同步载入,异步清零的功能。

构成该计数器的所有触发器都由时钟脉冲同步,在时钟脉冲输入波形上升沿同时触发。

这些计数器可以使用置数输入端(LDN)进行予置,即当LDN=0时,禁止计数,输入ABCD上的数据在时钟脉冲上升沿予置到计数器上;如果在时钟脉冲上升沿来到以前LDN=1,则计数工作不受影响。

2个高电平有效允许输入(ENP和ENT)和行波进位(RCO)输出使计数器容易级联,ENT、ENP都为高电平时,计数器才能计数。

图8-9为使用2个74160同步级联设计的六十进制进制计数器秒计数器模块的原理图,由前面的分析知分和秒计数器都是模M=60的计数器,其规律为00→01→…→58→59→00…,此底层计数器模块的设计中保留了一个计数使能端CEN、异步清零端Clrn和进位输出端Tc,这三个引脚是为了实现各计数器模块之间进行级联,以便实现校时控制而预留的。

根据计数器置数清零法的原理,第一级计数器置数输入端的逻辑表达式为:Tc1=not(D1•D3•CEN) (8-1)第二级计数器置数输入端的逻辑表达式为:Tc2=not(D1•D3•D4•D6•CEN) (8-2)如图8-9所示。

从图8-9中可以知道当秒计数到010110012(59)时将产生一个进位输出Tc,此输出同时反馈至其置数输入端(LDN)实现0置数。

图8-9六十进制进制计数器原理图在QuartusII中,利用原理图输入法完成源程序的输入、编译和仿真。

六十进制可预置BC D码计数器子模块count60_160.bdf的仿真输出波形文件如图8-10(a)所示。

分析知仿真结果,当计数输出D[7..0]=59时,进位输出Tc=1,结果正确无误。

可将以上设计的六十进制可预置BCD码计数器子模块设置成可调用的元件count60_160.sym,以备高层设计中使用,其元件符号图如图8-10(b)所示。

(a) (b)图8-10六十进制可预置BC D码计数器子模块(a)仿真输出波形;(b)元件符号图3)分计数器模块的ED A设计分计数器模块和秒计数器模块的电路结构和工作原理完全相同。

分计数器模块的是使能输入CEN为秒计数器模块进位输出Tc,分计数器模块能计数和显示0~59分,分计数器模块的进位输出Tc,每小时一个脉冲。

4)时计数器模块的EDA设计时计数器模块由分和秒级使能,每小时只一个脉冲。

当该条件满足时,74160的ENT变为高电平,即分和秒级为“59分59秒”。

时计数器模块能计数和显示0~23小时.同样可用2片74160同步级联设计成二十四进制可预置BCD码计数器。

由前面的分析时计数器是模M=24的计数器,其规律为00→01→…→22→23→00…,即当数字种运行到“23时59分59秒”时,在下一个秒脉冲作用下,数字种显示“00时00分00秒”。

为实现校时控制,时计数器模块的设计中仍保留了一个计数使能端CEN、异步清零端Clrn和进位输出端Tc,这三个引脚也是为了实现各计数器模块之间进行级联。

小时置数控制端LDN=D1•D0•D5•CEN,从图8-9中可以知道当秒计数到001000112(23)时将产生一个进位输出Tc,此输出同时反馈至其置数输入端(LDN)实现0置数。

图8-11 二十四进制时计数器模块原理图最后,在QuartusII中,利用原理图输入法完成源程序的输入、编译和仿真。

二十四进制可预置BCD码计数器子模块count24_160.bdf的仿真输出波形文件如图8-12(a)所示。

分析知仿真结果,当计数输出D[7..0]=23时,进位输出Tc=1,结果正确无误。

可将以上设计的六十进制可预置BCD码计数器子模块设置成可调用的元件count24_160.sym,以备高层设计中使用,其元件符号图如图6-12(b)所示。

(a) (b)图8-12二十四进制可预置BCD码计数器子模块(a)仿真输出波形;(b)元件符号图3数字钟校时单元电路模块1)原理说明当刚接通电源或走时出现误差时都需要对时间进行校正,对时间的校正是通过截断正常的计数通路,而用频率较高的方波信号加到其需要校正的计数单元的输入端,这样可以很快使校正的时间调整到标准时间的数值,这时再将选择开关打向正常时就可以准确走时了。

下图所示为时、分、秒校时的校时电路。

在校时电路中,其实现方法是采用高速计数脉冲和计数使能来实现校时的,整个校时单元电路模块可分为两个子模块,一个是模式计数译码器子模块,一个是输出使能选择。

2)模式计数译码器子模块的设计模式计数译码器子模块的输入数字种的功能设置键Mode按钮,第一次按Mode按钮时为校秒状态, 按第二次为校分状态, 按第三次为校时状态,按第四次为计时状态,如此循环。

刚刚通电时MODE=0为计时状态。

为了选择不同的功能设置, 模式计数译码器子模块由宏模块74160组成的2位二进制计数器和一个2-4译码器,形成了计数译码器,该电路产生时分秒计数单元设置计数值的使能控制信号,其相应的功能如表8-1所示,另外在对分进行校时时应不能影响时计数,当校分时如果产生进位应该不影响时计数的计数。

计单选择表8-1数元功能表根据表8-1可得输出信号的逻辑表达式如下:SEL=2Q∙;M_EN=12QQ∙;H_EN==Q2•Q12QQ+;S_EN=11Q(8-3) 据此可在QuartusII中设计出模式计数译码器子模块的原理图,如图8-13所示。

图8-13模式计数译码器子模块的原理图图8-13中SEL为功能选择信号,当SEL=1时,系统执行正常计时功能;当SEL=0时,系统执行校时功能。

H_EN、M_EN、S_EN分别时分秒计数单元设置计数值的使能选择信号,高电平有效。

图8-14为其编译仿真后的输出时序波形图和生成的元件符号图。

相关文档
最新文档