数字时钟设计VHDL
fpga数字时钟课程设计
fpga数字时钟课程设计FPGA数字时钟课程设计随着科技的不断发展,数字时钟已经成为现代人生活中必不可少的物品。
数字时钟的准确性和便捷性吸引了越来越多的人使用。
而现在,我们可以通过FPGA数字时钟课程设计来实现一个高精度的数字时钟。
FPGA(Field Programmable Gate Array)是一种可编程逻辑器件,可以通过编程实现各种不同的功能。
数字时钟的实现也可以通过FPGA来完成。
在FPGA数字时钟课程设计中,我们需要先确定时钟的基础部分。
时钟的基础部分由时钟信号产生器、时钟分频器、时钟计数器和时钟显示器组成。
时钟信号产生器需要产生一个稳定的时钟信号,以供后续的计数器和分频器使用。
我们可以通过FPGA中的时钟模块来产生一个稳定的时钟信号。
接下来,时钟分频器需要将时钟信号分频,使得计数器可以进行精确的计数。
分频器的分频系数可以通过FPGA中的数码开关进行设置。
然后,时钟计数器需要根据分频器的设定进行精确的计数。
计数器的计数值可以通过FPGA中的计数器模块进行设置。
时钟显示器需要将计数器的计数值进行显示。
我们可以通过FPGA 中的数码管模块来实现时钟的显示功能。
除了基础部分,我们还可以通过添加更多的功能来完善数字时钟。
例如,我们可以添加闹钟功能、日期显示功能等,以增加数字时钟的实用性。
在FPGA数字时钟课程设计中,我们可以使用VHDL(VHSIC Hardware Description Language)语言进行编程。
VHDL是一种硬件描述语言,可以用于FPGA和ASIC的设计。
通过编写VHDL 程序,我们可以实现数字时钟的各种功能。
FPGA数字时钟课程设计是一个非常有趣和实用的课程项目。
通过这个项目,我们可以深入了解数字时钟的工作原理,熟悉FPGA的编程方法,同时也可以锻炼自己的编程能力。
vhdl数字时钟设计精选全文
可编辑修改精选全文完整版数字时钟设计一、题目分析1、功能介绍1)具有时、分、秒计数显示功能,以24小时循环计时。
2)时钟计数显示时有LED灯的花样显示。
3)具有调节小时、分钟及清零的功能。
4)具有整点报时功能。
2、总体方框图3、性能指标及功能设计1)时钟计数:完成时、分、秒的正确计时并且显示所计的数字;对秒、分——60进制计数,即从0到59循环计数,时钟——24进制计数,即从0到23循环计数,并且在数码管上显示数值。
2)时间设置:手动调节分钟、小时,可以对所设计的时钟任意调时间,这样使数字钟真正具有使用功能。
我们可以通过实验板上的键7和键4进行任意的调整,因为我们用的时钟信号均是1HZ的,所以每LED灯变化一次就来一个脉冲,即计数一次。
3)清零功能:reset为复位键,低电平时实现清零功能,高电平时正常计数。
可以根据我们自己任意时间的复位。
4)蜂鸣器在整点时有报时信号产生,蜂鸣器报警。
产生“滴答.滴答”的报警声音。
5)LED灯在时钟显示时有花样显示信号产生。
即根据进位情况,LED不停的闪烁,从而产生“花样”信号。
二、选择方案1、方案选择方案一:根据总体方框图及各部分分配的功能可知,本系统可以由秒计数器、分钟计数器、小时计数器、整点报时、分的调整以及小时的调整和一个顶层文件构成。
采用自顶向下的设计方法,子模块利用VHDL语言设计,顶层文件用原理图的设计方法。
显示:小时采用24进制,而分钟均是采用6进制和10进制的组合。
方案二:根据总体方框图及各部分分配的功能可知,本系统可以由秒计数器、分钟计数器、小时计数器、整点报时、分的调整以及小时的调整和一个顶层文件构成。
采用自顶向下的设计方法,子模块利用VHDL语言设计,顶层文件用原理图的设计方法。
显示:小时采用24进制,而分钟和秒均60进制。
终上所述,考虑到试验时的简单性,故我选择了方案二。
三、细化框图根据自顶向下的方法以及各功能模块的的功能实现上述设计方案应系统细化框图:四、编写程序、仿真和分析1、秒计数器1)VHDL 语言描述程序见附录 2)秒计数器的仿真波形图3)波形分析数字时钟控制单元 时调整 分调整使能端信号 CLK 信号时显示 分显示 秒显示24进制 60进制 60进制LED 显示整点报花样显利用60进制计数器完成00到59的循环计数功能,当秒计数至59时,再来一个时钟脉冲则产生进位输出,即enmin=1;reset作为复位信号低电平有效,即高电平时正常循环计数,低电平清零。
VHDL数字时钟设计
VHDL数字时钟设计序⾔这个是我在做FPGA界的HelloWorld——数字钟设计时随⼿写下的,再现了数字钟设计的过程⽬标分析1. 时钟具有时分秒的显⽰,需6个数码管。
为了减⼩功耗采⽤扫描法显⽰2. 按键设置时间,需要对按键进⾏消抖3. 时分秒即为2个60进制计数器,⼀个24进制计数器。
模块设计综上所述,我采⽤模块化设计⽅法进⾏设计,绘制框图如下。
1. 时钟分频产⽣各个模块所需频率时钟。
2. 按键处理模块对按键信号进⾏消抖、变长脉冲为短脉冲等处理。
3. 时间控制模块产⽣时间信号或对时间进⾏设置。
4. 数码管驱动模块负责对时间信号BCD码译码为数码管的段码并且扫描输出到数码管。
下⾯对各个模块分别详细叙述时钟分频模块我打算把时钟分频模块做成“数控N分频器”,通过给分频器传⼊数值N来对时钟信号进⾏N分频。
得到的信号频率为原时钟信号的频率/N,占空⽐为1/N。
稍微考虑下其他模块所需时钟:按键处理模块100Hz ,时间控制模块1Hz,数码管驱动50Hz。
⽽输⼊时钟为33.8688MHz。
我不想传⼊的N数值过⼤,我打算先对时钟进⾏两次:第⼀次调⽤时钟分频模块得到1Mhz,第⼆次得到1Khz。
这样N的位数为10可以满⾜需求。
代码如下library IEEE;use IEEE.STD_LOGIC_1164.all;use IEEE.STD_LOGIC_UNSIGNED.all;entity ClkDiv isport(clk_i:IN STD_LOGIC;N_i: IN STD_LOGIC_VECTOR(9 DOWNTO 0);clk_o:OUT STD_LOGIC);end ClkDiv;architecture behavior of ClkDiv issignal count:STD_LOGIC_VECTOR(9 DOWNTO 0):="0000000001";signal clk_temp:STD_LOGIC:='0';beginprocess(clk_i)beginif(clk_i'EVENT and clk_i='1')thenif (count=N_i)thencount<="0000000001";clk_temp<='1';elsecount<=count+1;clk_temp<='0';end if;end if;end process;clk_o<=clk_temp;end behavior;仿真结果如下:2分频:输出信号为f/2Hz,占空⽐1:23分频:输出信号为f/3Hz,占空⽐1:3按键处理模块去抖动根据以往的经验,按键按下弹起电平会有⼀⼩段⽑刺,可能会引起电路误操作,所以要对按键进⾏消抖处理使变为⼲净的矩形信号。
关于VHDL中的时钟是不是可综合的问题
关于VHDL中的时钟是不是可综合的问题1。
VHDL综合器中把通过边沿触发其他信号的东西统统定义为时钟信号。
比如说,一个信号B的变化需要A的下降沿来触发,那么在相应的进程中就把A看作是时钟信号,即使A可能只变化了这一次。
2。
明确了1,就来看2。
任意一个信号或者变量只能有一个时钟驱动。
多时钟驱动的信号或变量会在综合时报错。
比如说,如下语句在一个进程中:if (clk'event and clk = '1') thenB <= '1';end if;if (A'event and A = '0') thenB < = '0';end if;这里面的B就叫做被时钟clk和时钟A同时驱动了,虽然我们平时不习惯把A 也叫做时钟,但是它在综合时似确实被这样认为的。
因此,这就要求我们在写程序之前,要把所有的信号都拼尽全力的用不多于一个时钟来驱动,当然不用时钟也是可以的。
同时也引申出一点,就是一个进程的敏感表表示的是进程间的驱动关系,这个需要极其认真地考虑,要弄清楚进程间究竟是用什么通信的,尤其牵扯到时钟的时候,到搞懂究竟是哪个时钟触发了信号。
切不可随意添加信号,在仿真时可能问题不大,但是综合的时候可能会有大问题。
这个从物理上也好理解,一个又边沿触发的信号物理上就是用一个D触发器实现的,无论这个触发信号是变化很长时间还是只变化一次,只要是牵扯到检测边沿,就需要一个D触发器。
而一个信号只能对应一个D触发器,一个D触发器只能由一个时钟驱动,所以以上语句是无法综合的。
也就是说,两个时钟同时触发的D触发器现阶段无法实现。
为什么无法实现呢?留个问题。
3。
使用异步电路只有如下一种书写方式可以综合:process(clk,reset)beginif (reset = '1') thenB <= '1';elsif (clk'event and clk = '0') thenB < = '0';end if;end process;下面的语句会在综合中报错:process(clk,reset)beginif (reset = '1') thenB <= '1';end if;if (clk'event and clk = '0') thenB < = '0';end if;end process;报的错误是同步时钟前面存在异步信号。
VHDL电子时钟的设计
VHDL电子时钟的设计VHDL(Very High Speed Integrated Circuit Hardware Description Language)是一种硬件描述语言,用于设计和模拟数字电路和系统。
在这篇文章中,我们将探讨VHDL电子时钟的设计。
设计一个VHDL电子时钟需要考虑以下几个方面:时钟的显示方式、时钟的时钟源以及时钟的控制逻辑。
首先,我们需要确定时钟的显示方式。
常见的电子时钟显示方式有7段LED显示和LCD显示。
在这里,我们选择使用7段LED显示。
7段LED 显示由7个LED灯组成,可以显示0到9的数字。
此外,还需要考虑到显示小时和分钟的两个时钟。
接下来,我们需要确定时钟的时钟源。
时钟源决定了时钟的精度和稳定性。
在VHDL设计中,常用的时钟源有晶体振荡器和时钟发生器。
晶体振荡器由晶体和振荡电路组成,可以提供非常精确和稳定的时钟信号。
时钟发生器则基于计数器和除频器的原理产生时钟信号。
根据实际需求选择合适的时钟源。
最后,我们需要设计时钟的控制逻辑。
控制逻辑决定了时钟的功能和操作方式。
在这里,我们将设计一个简单的时钟,包括设置时间、调节时间、显示时间和闹钟功能。
我们可以使用按钮和开关控制时钟的功能。
下面是一个VHDL电子时钟的示例设计代码:```vhdl--时钟显示模块entity ClockDisplay isportclk : in std_logic;reset : in std_logic;hours : in integer range 0 to 23;minutes : in integer range 0 to 59;alarm : in std_logic;seg7 : out std_logic_vector(6 downto 0) end entity ClockDisplay;architecture Behavioral of ClockDisplay is signal count : integer := 0;signal sec : integer := 0;signal disp_hours : integer := 0;signal disp_minutes : integer := 0;beginprocess (clk, reset)beginif reset = '1' thencount <= 0;sec <= 0;disp_hours <= 0;disp_minutes <= 0;elsif rising_edge(clk) thencount <= 0;sec <= sec + 1;elsecount <= count + 1;end if;end if;end process;process (sec, reset, hours, minutes, alarm)beginif reset = '1' thendisp_hours <= 0;disp_minutes <= 0;elsif rising_edge(sec) thenif alarm = '1' and hours = disp_hours and minutes = disp_minutes then--闹钟触发逻辑elsif sec = 59 thenif minutes = 59 thenif hours = 23 thendisp_hours <= 0;disp_minutes <= 0;elsedisp_hours <= hours + 1; disp_minutes <= 0;end if;elsedisp_hours <= hours;disp_minutes <= minutes + 1; end if;elsedisp_hours <= hours;disp_minutes <= minutes;end if;end if;end process;process (disp_hours, disp_minutes)begincase disp_hours is...end case;case disp_minutes is...end case;end process;end architecture Behavioral;```这个代码中,我们使用了两个进程来处理时钟的计时和显示逻辑。
VHDL数字钟
课程设计报告设计题目:用VHDL语言实现数字钟的设计班级:学号:姓名:指导老师:设计时间:摘要本设计是基于VHDL语言的数字钟,硬件平台是Xilinx的Virtex2系列FPGA 开发板。
该数字钟具备预置年月日时分秒的功能,通过按键还可以改变数字钟显示的内容和进入不同的设置状态,并通过加减按键调整系统时间。
在整个VHDl数字电路系统中,采用层次化设计方法,自顶向下进行设计。
设计中根据系统的功能要求合理划分出层次,进行分级设计和仿真验证,将较为复杂的数字系统逻辑简化为基本的模型从而降低实现的难度。
工程中底层实体实现了年月日、时分秒的双向计数器功能,另外还单独设计了系统的时钟模块,用来生成周期为125Hz的按键扫描时钟和周期为1Hz单位脉冲时钟。
为了消除按键的抖动,为此设计了按键消抖模块,采用了状态机来对按键进行消抖。
为了实现根据年份和月份对当前月的天数的判断逻辑,采用了函数对该逻辑进行分析,给出正确的判断结果。
为了提高利用率,在工程中建立了一个包集文件,对底层实体进行了统一封装,方便顶层的调用。
底层的所有实体系统的顶层主要完成了底层的元件例化,主控状态机对系统的状态转换进行控制,按键响应和时钟重新分配电路则完成了整个系统的控制逻辑。
关键词:层次化设计,元件例化,函数,状态机目录摘要 (2)一、课程设计目的 (4)二、课程设计内容及其要求 (4)三、VHDL程序设计 (5)1.设计方案论证 (5)2.设计思路与方法 (6)3.VHDL源代码及其仿真结果 (7)1、六进制可逆计数器 (7)2、十进制可逆计数器, (9)3、十二进制可逆计数器, (11)4、二十四进制可逆计数器 (13)5、天数计数器 (16)6、判断闰年和月份 (18)7、时钟分频模块 (22)8、按键消抖模块 (24)9、程序包 (27)10、顶层实体(主控状态机) (29)四、编程下载 (38)五、课程设计总结 (38)六、参考文献 (38)一、课程设计目的诞生于1983年的VHDL语言,在1987年被美国国防部和IEEE指定为标准硬件描述语言。
基于VerilogHDL设计的多功能数字钟
3' b101: Disp_Temp=4' b1010;
#(60000*HALF_PERIOD) S1_in=1;
3' b110: Disp_Temp=SECH;
end
3' b111: Disp_Temp=SECL;
//产 生 调 节 分 钟 信 号
endcase
initial
end
begin
always@(Disp_Temp) //显示转换
新
图 1 多功能数字钟端口功能图
Clk: 10KHZ 的系统基准时钟输入。作为七段码管 扫描频率。将其 10000 分频可得到 1HZ 的数字钟工作 频率。将其 8 分频和 4 分频分别分时送入扬声器, 使 其产生嘀( 1.25KHZ) 、嗒( 2.5KHZ) 的报时声。
Rst: 系统复位信号, 低电平有效。复位后显示 00- 00- 00。
Abstr act: In this paper, the process of designing multifunctional digital clock by the Verilog HDL top- down design method is pre- sented, which has shown the readability, portability and easily understanding of Verilog HDL as a hard description language. Circuit synthesis and simulation are performed by Altera QuartusⅡ 4.1 and ModelSim SE 6.0. The program can be used in the truly digital clock display by downloading to the FPGA chip. Keywor ds: Ver ilog HDL; har dwar e descr iption language; FPGA
电子秒表设计VHDL
一、设计题目:基于VHDL语言的电子秒表设计(可调时,有闹钟、定时功能)二、设计目的:⑴掌握较复杂的逻辑设计和调试⑵学习用原理图+VHDL语言设计逻辑电路⑶学习数字电路模块层次设计⑷掌握QuartusII软件及Modelsim软件的使用方法三、设计内容:(一)设计要求1、具有以二十四小时计时、显示、整点报时、时间设置和闹钟的功能。
2、设计精度要求为1S。
(二).系统功能描述1 . 系统输入:系统状态及校时、定时转换的控制信号为k、set、ds;时钟信号clk,采用实验箱的50MHz;系统复位信号为reset。
输入信号均由按键产生。
系统输出:8位LED七段数码管显示输出,蜂鸣器声音信号输出。
多功能数字钟系统功能的具体描述如下:2. 计时:set=1,ds=1工作状态下,每日按24h计时制计时并显示,蜂鸣器无声,逢整点报时。
3. 校时:在set=0,ds=0状态下,按下“k键”,进入“小时”校准状态,之后按下“k键”则进入“分”校准状态,继续按下“k键”则进入“秒校准”状态,之后如此循环。
1)“小时”校准状态:在“小时”校准状态下,显示“小时”数码管以1Hz的频率递增计数。
2)“分”校准状态:在“分”校准状态下,显示“分”的数码管以1Hz的频率递增计数。
3)“秒”复零状态:在“秒复零”状态下,显示“分”的数码管以1Hz的频率递增计数。
4. 整点报时:蜂鸣器在“59”分钟的第50—59,以1秒为间隔分别发出1000Hz,500Hz的声音。
5. 显示:采用扫描显示方式驱动8个LED数码管显示小时、分、秒。
闹钟:闹钟定时时间到,蜂鸣器发出交替周期为1s的1000Hz、500Hz的声音,持续时间为一分钟;6. 闹钟定时设置:在set=0,ds=1状态下,按下“k”,进入闹钟的“时”设置状态,之后按下“k键”进入闹钟的“分”设置状态,继续按下“k 键”则进入“秒”设置状态, 之后如此循环。
1)闹钟“小时”设置状态:在闹钟“小时”设置状态下,显示“小时”的数码管以1Hz 的频率递增计数。
多功能数字电子钟_VHDL
四、各功能模块的源程序代码 :
-- CONTOR 模块 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; entity contor is
1 )“小时” 校时状态: 进入“小时”校时状态后,显示 “小时” 的数码管闪烁,每按动“ k” 键一次,“小时” +1,若不按动“ k”键 则小时数不变,一直按下“ k” 键则小时数一 4Hz 的频率递增计数。
2 )“分”校时状态:进入“分”校时状态后,显示“分”的数 码管闪烁,每按动“ k” 键一次,“分” +1,若不按动“ k”键则分数 不变,一直按下“ k” 键则分数一 4Hz的频率递增计数。
chs,cms,css,f4 :in std_logic; bsg,bmg,bhg,bsd,bmd,bhd :buffer std_logic_vector(3 downto 0); comout :out std_logic); end time_com; architecture time_comx of time_com is begin com:process(hh,mh,sh,hl,ml) begin if(bhg=hh and bhd=hl and bmg=mh and bmd=ml and bsg=sh)then comout<='1'; else comout<='0'; end if; end process; set:process(f4) begin if(f4'event and f4='1')then if(chs='1'and k='0')then if(bhg="0010" and bhd="0011")then bhd<="0000";bhg<="0000"; elsif(bhd="1001")then bhd<="0000";bhg<=bhg+1; elsif(bhd="0000"or bhd="0001" or bhd="0010"or bhd="0011"or bhd="0100"or bhd="0101"or bhd="0110"or bhd="0111"or bhd="1000")then bhd<=bhd+1; end if; end if; end if; end process; process(f4) begin if(f4'event and f4='1')then if(cms='1'and k='0')then if(bmg="0101" and bmd="1001")then
基于VHDL数字时钟的设计与实现
1 引言随着科学技术的不断发展,人们对时间计量的精度要求越来越高。
相对机械钟而言,数字钟能实现准确计时,并显示时,分,秒,而且可以方便,准确的对时间进行调节。
在此基础上,还可以实现整点报时的功能。
因此,数字钟的应用十分广泛。
所谓数字时钟,是指利用电子电路构成的计时器。
1.1课题的背景、目的电子技术是一门应用很广,发展极为迅速的科学技术,尤其由于数字电子技术具有高抗干扰能力、更高的可靠性和便于计算机处理等特点,近年来得到更加迅速的发展,数字通讯设备、数字电视、数字照相机、数字摄象机等数字化产品近年如雨后春笋般大量涌现,数字电子技术已经成为今后电子技术发展的主要方向。
现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。
钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。
诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、定时启闭电路、定时开关烘箱、通断动力设备,甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。
因此,研究数字钟及扩大其应用,有着非常现实的意义。
通过数字时钟的设计,巩固计算机组成原理课程,理论联系实际,提高分析、解决计算机技术的实际问题的独立工作能力;掌握用VHDL语言编制简单的小型模块,学会数字钟的设计方法,熟悉集成电路的使用方法,初步掌握电子钟的设计方法并实现时间的显示和校对,以及报时的功能,并能对数字电子钟进行扩展。
数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,因此得到了广泛的使用。
1.2 课程设计的内容本课程设计实现一个数字时钟,具有按秒走时功能,能够分别显示小时(2位24小时)、分钟(2位)、秒(2位)。
具有整点报时、时间调整功能,且能够对计时系统的小时、分钟进行调整。
基于VHDL的时钟、正弦波和方波实验报告
数字时钟、正弦波和方波实验报告一:实验要求。
设计一个时钟,能设置两个时间,到这两个时间能够控制自动响铃30秒。
时间调整和定时的设置使用两个按钮实现。
二:试验程序及说明。
说明:clk:时钟基准信号,做正常走时的秒时钟信号。
clk2:用于在调整(校准)时间和设置闹铃时间时,相应的时钟位能闪烁。
clk5:用于使蜂鸣器响所需的1KHz的时钟。
pb1:用于调整时间的按钮。
每按一下,相应的时钟位时钟加一。
pb2:用于调整时钟的状态。
正常走时状态0,设置时钟小时1,设置时钟分钟2,设置定时a小时时3,设置定时a分钟4,设置定时b小时5,设置定时b小时6,然后回到0。
状态的变化根据pb1的信号变化。
pb2用来改变设置值。
pt1:输出的秒时钟信号。
pt2:输出的10秒位信号。
ptml:输出的分钟信号的低位。
ptmh:输出的分钟信号的高位。
pthl:输出的小时信号的低位。
pthh:输出的小时信号的高位。
ring:输出的打铃信号,它和时钟信号clk5相与的结果作为蜂鸣器的输入信号。
k:打铃开关信号,当为高电平时,打铃时间设置有效,到打铃时间,蜂鸣器会响;当为低电平时,到打铃时间,蜂鸣器不响。
下面的signal信号均为中间量,并不作为最终的输出信号。
q1,q2,q3,q4,q5,q6:秒的高低位输出信号,分钟的高低位输出信号,小时的高低位输出信号。
dq1,dq2,dq3,dq4,dq5,dq6:正常走时的时钟信号输出,相应的译码输出,分别对应:秒的高低位,分钟的高低位,小时的高低位。
dpa1,dpa2,dpa3,dpa4,dpb1,dpb2,dpb3,dpb4:设置的打铃时间的小时和分钟的译码输出信号,分为a和b。
dpa1,dpa2:a打铃时间的分钟的低高位,dpa3,dpa4:小时的低高位;dpb1,dpb2:b打铃时间的低高位,dpb3,dpb4:小时的低高位。
c1,c2,c3,c4:c1:秒低位的进位信号,c2:秒高位的进位信号,c3:分钟的低位进位信号,c4:分钟的高位进位信号。
基于VHDL语言的数字时钟设计
l rr e : 2 i ayi e 一 4进 制 计 数 器 VHD 语 言 描 述 b e L
u e ie . d lgc 6 .l; s e es t o ij 1 4al
_
程 序 的仿 真 波 形 如 图 2所 示 ,n为 使 能 端 ,o为 计 满 标 e c
1 . 系统 的 工 作 流 程描 述 3
1 数 字 时钟 的 设计 方 案及 框 图
1 设 计 方 案 . 1
系统 要 完 成 的 主要 功能 有 : 1数 字 时 钟 按 2 ) 4h制 设 计 , 6只 数 码 管 显 示 小 时 、 由 分
钟、 ; 秒
如 图 1 时 钟 系 统 具 有 一 个 使 能 端 e 、 个 异 步 清 零 端 。 n一
管 的片 选 信 号 , 时作 为 选 择 显 示 数据 模 块 的地 址 产 生 器 。 同
12 系统 的 模 块 框 图 . 如 图 1 示 。 用 自顶 向 下 的 设 计 方 法 圈 通 过 对 功 能 框 所 采 , 图 的分 析 , 系 统分 模 块 来进 行 设 计 , 后 再 通 过例 化语 句 完 将 然 成 各模 块 间的衔 接 , 终实 现了顶 层描述 , 最 完成 系统预 定功 能 。
时 功 能 [ 并 且 具 有 异 步 清 零 端 cr低 电平 有 效 ) 使 能 端 e 5 1 , l( 、 n
( 电 平 有 效 ) 当 数 字 钟 处 于 正 常 计 时 状 态 时 , 成 小 时 计 高 ; 完
时 , 且 受 分计 时模 块 (0进 制 ) 位 输 出信 号 的控 制 。程 序 并 6 进
示 译码 器 . 即在一个时 间单 元 内只显示 一路信号 的值 ; ⑤动
vhdl实验报告--数字钟
VHDL实验报告一、实验目的1、设计一个24小时制数字钟,要求能显示时,分,秒,并且可以手动调整时和分。
2、通过复杂实验,进一步加深对VHDL语言的掌握程度。
二、实验原理数字钟的主体是计数器,它记录并显示接收到的秒脉冲个数,其中秒和分为模60计数器,小时是模24计数器,分别产生3位BCD码。
BCD码经译码,驱动后接数码管显示电路。
秒模60计数器的进位作为分模60计数器的时钟,分模60计数器的进位作为模24计数器的时钟。
为了实现手动调整时间,在外部增加了setm(调整分),seth(调整时)按键,当这两个按键为低电平时,电路正常计时,当为高电平时,分别调整分,时。
同时在外部还增加了一个清零按键clr.和消抖动电路。
三、实验步骤1、单元模块设计部分1)消抖动电路关键部分signal key_in1,key_in2:std_logic:='0';beginprocess(clk,key_in)beginif clk'event and clk='1' thenkey_in1<=key_in;key_in2<=key_in1;if key_in='1' and key_in1='1' and key_in2='1' then key_out<='1';else key_out<='0';end if;2) 模60计数器程序关键部分:signal md_temp,mg_temp:std_logic_vector(3 downto 0);beginprocess(clk,clr)beginif clr='1' thenmd_temp<="0000"; mg_temp<="0000";elsif set='1' thenmd_temp<=setl; mg_temp<=seth;elsif clk'event and clk='1' thenif md_temp="1001" thenmd_temp<="0000";mg_temp<=mg_temp+'1';else md_temp<=md_temp+'1';if md_temp="1001" and mg_temp="0101" thenmd_temp<="0000";mg_temp<="0000";2、模24计数器程序关键部分signal hd_temp,hg_temp:std_logic_vector(3 downto 0);beginprocess(clk,clr,set,setl,seth)isbeginif set='1' then hd_temp<=setl; hg_temp<=seth;elsif clr='1' then hd_temp<="0000"; hg_temp<="0000";elsif clk'event and clk='1' thenif hg_temp="0010" and hd_temp="0011" thenhd_temp<="0000"; hg_temp<="0000";elsif hd_temp="1001" thenhg_temp<=hg_temp+'1' hd_temp<="0000";else hd_temp<=hd_temp+'1';end if;end if;end process ;3、清零和调时部分显示部分关键程序process (sd,sg,md,mg,hd,hg)begincase sd iswhen "0000" =>sl<="1111110";when "0001" =>sl<="0110000";when "0010" =>sl<="1101101";when "0011" =>sl<="1111001";when "0100" =>sl<="0110011";when "0101" =>sl<="1011011";when "0110" =>sl<="1011111";when "0111" =>sl<="1110000";when "1000" =>sl<="1111111";when "1001" =>sl<="1111011";when others =>sl<="0000000";end case;if clk_g'event and clk_g='1' thenif sel="101" thensel<="000";else sel<=sel+'1';end if;end if;process(sel,sd,sl,sg,sh,md,ml,mg,mh,hd,hl,hg,hh)begincase sel iswhen"000"=>led<=sl;led_which<=sd;when"001"=>led<=sh;led_which<=sg;when"010"=>led<=ml;led_which<=md;when"011"=>led<=mh;led_which<=mg;when"100"=>led<=hl;led_which<=hd;when"101"=>led<=hh;led_which<=hg;when others=>led<="0000000";led_which<="0000";end case;4、顶层文件关键程序port(clk,clk_g:in std_logic;-----clk_g是用在数码管显示里面的信号clr: in std_logic;------clr=1时清零setm,seth:in std_logic;---------setm为1时调分,seth为1时调时setd,setg:in std_logic_vector(3 downto 0);----调整时间的时候,setd调整的是低位setg 调整高位led:out std_logic_vector(6 downto 0);sel_out: out std_logic_vector(2 downto 0);led_which: out std_logic_vector(3 downto 0));---输出的是秒分时的哪一个beginu1:de_shake port map (clk=>clk,key_in=>clr,key_out=>clro);u2:de_shake port map (clk=>clk,key_in=>setm,key_out=>setmo);u3:de_shake port map (clk=>clk,key_in=>seth,key_out=>setho);u4:s60 port map (clk=>clk,clr=>clro,sd=>sdl,sg=>sgh,fenmaichong=>fenmaichong o);u5:m60 port map (clk=>fenmaichongo,clr=>clro,md=>mdl,mg=>mgh,xiaoshimaichong=> xiaoshimaichongo,setl=>setd,seth=>setg,set=>setmo);u6:h24 port map (clk=>xiaoshimaichongo,clr=>clro,hd=>hdl,hg=>hgh,set=>setho,se tl=>setd,seth=>setg);u7:led_xs port map (clk_g=>clk_g,sd=>sdl,sg=>sgh,md=>mdl,mg=>mgh,hd=>hdl, hg=>hgh,led=>led,sel_out=>sel_out,led_which=>led_which);四、实验结果及分析本设计,满足了本次试验设计的任务要求,能显示时分秒,并且可以手动调节分和时。
基于硬件描述语言VHDL的电子时钟设计
1 引言 随着电子设计自动化 ( E DA) 的高速发展, 电子 系统的设计技术 和工具发生了深刻的变化。EDA 的关键技术之一是要求用形式化方式 来描述数字系统的硬件电路 , 即要用所谓硬件描述语言来 描述 硬件 电 路。本文即介绍如何利用 VHDL 硬件描述语言设计一 款具有调整时间 和整点报时功能的电子时钟, 并且利用 Q ua rtu sⅡ开发环境进行编译、 仿真。 2 设计原理 电子时钟电路由秒、分、时 5 个计数模块和 6 个 显示 译码 模块组 成。秒计数模块的计数时钟 clk 为 1 Hz 的标准信号。当电子时钟处于正 常计时状态时, 秒计数器的进位输出信号 c 作为分钟模块的计数信号, 分计数模块的进位输出 c 为小时模块的计数信号。电子时钟除了正常计 时外, 还能够调整时间。在本文中, 通过手动调节 d in 3 个输入量的高 低电平而分别实现对秒、分、时的调整。 3 功能模块设计 本文中的电子时钟由上述 1 1 个模块组成。设计时, 首先用 VHDL 语言编写各个功能模块, 分别在 Q ua rtu sⅡ开发环境下编译、仿真, 然 后再用顶层文件将各功能模块连接起来。以下介绍各模块的设计方法和 技巧。 3.1 秒、分、时计数模块 秒、分计数模块都是 6 0 进制的加法计数器, 时计数模块是 24 进 制计数器。与一般的标准计数器不同的是秒、分、时计数模块中分别添 加了调节秒、分和小时的功能, 即 当 c lk 的 上升沿到来时, 分别调 节 d in 的高低电平, 就可达到调整秒、分、小时的目的。其中 6 0 进制 加 法器是由 一个 10 进制和一 个 6 进制计 数器组成 的。10 进 制计数 器 VHD L 程序 : e ntityc ounte r10 is; Port ( clk : in std_logic; re se t : in s td_logic; din :ins td_logic_vec tor(3 dow nto0); dout :out std_logic_vec tor(3 downto 0); c:out std_logic); e nd counter10; archite cture Be ha vioral of counte r10 is; signal count : std_logic_ve ctor(3 dow nto 0); begin; dout < = count; proce ss(clk,re se t,din); be gin; if re se t= '0'then; count <= din; c <= '0'; e ls if rising_e dge(clk)then; if c ount = "1001"then; count< = "0000"; c <= '1'; els e; < = count+ 1; c <= '0 '; 10 进制计数器仿真:
基于VHDL的数字时钟的设计
字 时钟具有 一定 的实 际应 用性 。
关键 词 : 字 时钟 ; 数 VHD Qu ru 1 L; at sI
中 图分 类号 : TN72 0
文 献标 识码 : A
h v n r d c d d a a d r fs a s i o m ut f n t n dg tl l c d sg a e o VH DL a e ito u e ie s n c atm n hp f li u ci ii co k e in b s d n — o a
制及 计算机 应用领 域 的重 要性 日益 突 出。E DA 技 术 就是 依 赖 功 能 强大 的 计算 机 , E A 工 在 D 具 软件 平 台上 , 以硬 件描述 语 言 VHDL为系 统逻 辑 描述 手段 完 成 的设 计 文件 , 对 自动地 完 成 逻 辑优 化和 仿真 测试 , 至实现 既定 的 电子线路 系统功 能 。本 文介 绍 了基于 VHD 直 L硬件 描述 语 言设 计 的 多功能数 字 时钟 的思路和 技 巧。在 Qu ru atsI开发 环境 中编译 和 仿真 了所设 计 的 1
文章 编号 :0 60 9 20 )20 1—5 10—0X(08 0—000
De i n o g t lc o k ba e n VH DL sg fdi ia l c s d o
Z a g Zi a g , u Ge ,Ti n P n h n — n L g a eg
维普资讯
第 2 期
20 08年 6 月
气 象 水 文 海 洋 仪 器
基于VHDL的数字时钟设计
1.引言在传统的硬件电路设计中,主要的设计文件是电路原理图,而采用硬件描述语言(HDL)设计系统硬件电路时主要使用HDL编写源程序。
所谓硬件描述语言,就是该语言可以描述硬件电路的功能、信号连接关系及定时关系。
许多公司开发了自己专有的HDL,但一直没有一种标准的HDL,直到1987年底,IE EE确认美国国防部开发的VHDL 为标准的硬件描述语言(IEEE-1076)。
此后,各EDA公司研制的硬件电路设计工具逐渐向VHDL靠拢,VHDL在电子设计领域得到广泛的接受,1993年,IEEE对VHDL进行了修订,公布了新版本的VHDL(即IEEE-1076-1993)。
现在,VHDL和Verilo g作为IEEE的工业标准硬件描述语言,在电子工程领域,设计人员都极其重视对其的学习研究, VHDL成为事实上的通用硬件描述语言。
2.VHDL的优点及设计流程VHDL支持硬件的设计、验证、综合和测试,以及硬件设计数据的交换、维护、修改和硬件的实现,具有描述能力强、生命周期长、支持大规模设计的分解和已有设计的再利用等优点。
VHDL程序结构特点是将一个电路模块或一个系统分成端口和内部功能算法实现两部分。
对于一个电路模块或者数字系统而言,定义了外部端口后,一旦内部功能算法完成后,其他系统可以直接依据外部端口调用该电路模块或数字系统,而不必知道其内部结构和算法。
VHDL的特点使得电子系统新的设计方法一一“自顶向下”设计方法更加容易实现。
可以先对整个系统进行方案设计,按功能划分成若干单元模块,然后对每个单元模块进一步细分编程,直到简单实现的单元电路。
本设计在MAX+plusII环境中进行,M AX+plusII是美国ALT ERA 公司提供的FPGA/CPL D开发集成环境。
M AX+plusII界面友好,使用便捷被誉为业界最容易的EDA软件。
下面详细论述使用M AX+plusII设计简易电子表的全过程。
3.VHDL设计举例:简易电子表3.1设计思想简易电子表是由各种功能管脚和计数器模块共同构成的,而其中的计数器模块是由两个60进制计数器和一个24进制计数器三个子模块组成的。
VHDL数字时钟
一、功能要求:1、能够分别显示时、分、秒,以24小时循环设计;2、能够对小时、分钟进行调时;3、能够设置闹钟,使其能够在指定时间响;二、设计原理:该数字时钟有三个状态,分别是正常显示状态、调时状态和闹钟设置状态,每当来到一个z的上升沿时,状态改变一次;正常显示状态:对输入的频率clk1进行分频,产生一个与秒的频率相等的频率信号clk,用clk来控制秒的走时,秒的个位每到10往秒的十位进位,秒的十位每到6就往分的个位进位,分的个位十位进位和秒一样,时的个位每到10就往时的十位进位,时的十位每到2就为0;当时间为23:59:59时,全部清零,重新开始计时;调时状态:当处于调时状态时,可对时间进行调整,先选择对哪位进行调整,可分别对分和时的个位和十位进行调整,每当来到一个md2的上升沿时可选中其中一位,每来到一个md3的上升沿时对其进行加“1”操作并设置一个开关allow1,当allow1接通一次时可把设置的时间赋给正常显示的时间,否则不影响正常显示的时间;闹钟设置状态:当处于闹钟设置状态时,同样通过md2选择要调整的位,并通过md3对其进行加“1”操作,并设置一个闹钟开关allow2,接通时闹钟开启;数字显示:对6个显示器用一个频率进行循环扫描,利用人眼停留的效果使其达到同时显示的效果;三、变量说明:端口说明:clk1:输入频率md1:负责对时钟状态的切换,每接通一次,状态就切换一次md2:在调时状态和闹钟设置状态时,负责选定对那个位进行操作(时的个位和十位,分的个位和十位)md3:负责对所选中的位进行加“1”操作,每接通一次,就加“1”allow1:负责是否确定对时钟的设置,设置好时钟后,若allow1接通一次,时钟就被修改;若allow1没有接通,则所调整的时间对原来的时钟没有影响allow2:负责是否确定开启闹钟,当allow2处于接通状态时,时钟到了设置的时间闹钟会响,断开allow2闹钟关闭speak:负责闹钟的发声dout,sellout:负责板子上显示管的显示数字内部变量说明:sel:选择哪个位置显示数counter:对输入频率进行分频,得出秒的频率clkcounter1:对输入频率进行分频,得出闹钟发声的频率z:选择时钟的状态,“00”为正常显示状态,“01”为调整状态,“10”为闹钟设置状态k:选择要对哪位进行操作,“00”为分的个位,“01”为分的十位,“10”为时的个位,“11”为时的十位hou1,hou2,min1,min2,sec1,sec2:分别代表正常显示状态下的时的十位,个位;分的十位,个位;秒的十位,个位;hou1n,hou2n,min1n,min2n,:分别代表处于调时状态时的时和分的十位和个位;seth1,seth2,setm1,setm2:分别代表处于闹钟设置状态的时和分的十位和个位;h1,h2,m1,m2,s1,s2:分别代表最终显示在板子上的时、分、秒的十位和个位;四、源代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity zhong isport(clk1:in std_logic;md1:in std_logic;-----xuan ze zhuang taimd2:in std_logic;------xuan ze she zhi na ge wei zhimd3:in std_logic;------jia yiallow1:in std_logic;allow2:in std_logic;speak:out std_logic;-----nao zhongdout:out std_logic_vector(6 downto 0);-------shu chuselout:out std_logic_vector(5 downto 0));-----xuan ze xian shi end zhong;architecture one of zhong issignal sel:std_logic_vector(2 downto 0);signal hou1:std_logic_vector(3 downto 0);signal hou2:std_logic_vector(3 downto 0);signal min1:std_logic_vector(3 downto 0);signal min2:std_logic_vector(3 downto 0);signal hou1n:std_logic_vector(3 downto 0);signal hou2n:std_logic_vector(3 downto 0);signal min1n:std_logic_vector(3 downto 0);signal min2n:std_logic_vector(3 downto 0);signal seth1:std_logic_vector(3 downto 0);signal seth2:std_logic_vector(3 downto 0);signal setm1:std_logic_vector(3 downto 0);signal setm2:std_logic_vector(3 downto 0);signal sec1:std_logic_vector(3 downto 0);signal sec2:std_logic_vector(3 downto 0);signal h1:std_logic_vector(3 downto 0);signal h2:std_logic_vector(3 downto 0);signal m1:std_logic_vector(3 downto 0);signal m2:std_logic_vector(3 downto 0);signal s1:std_logic_vector(3 downto 0);signal s2:std_logic_vector(3 downto 0);signal counter:std_logic_vector(8 downto 0);-----------secondsignal countern1:std_logic_vector(7 downto 0);----------speakersignal clk:std_logic;----------secondsignal clkn1:std_logic;-----speakersignal k:std_logic_vector(1 downto 0);---------xuan ze xian shisignal z:std_logic_vector(1 downto 0);------00 zheng chang ;01 tiao zheng;10 nao ling;-------------------------------------------------beginfen:process(clk1)beginif(clk1'event and clk1='1')thenif(counter="110000000")thencounter<="000000000";clk<=not clk;elsecounter<=counter+'1';end if;if(countern1="10000000")thencountern1<="00000000";elseclkn1<=not clkn1;end if;end if;end process fen;-------------------------------------------kong:process(md2)beginif( md2'event and md2='1')thenif(k="11")thenk<="00";elsek<=k+1;end if;end if;end process kong;process(md1)beginif(md1'event and md1='1')thenif(z="10")thenz<="00";elsez<=z+1;end if;end if;end process;----------------------------------------------choice:process(clk1)beginif clk1'event and clk1='1' thenif sel="101" thensel<="000";elsesel<=sel+1;end if;end if;end process choice;-------------------------------------------zheng chang xian shi-----------------------------------------------hour1hou_1:process(clk,hou2,min1,min2,sec1,sec2)beginif clk'event and clk='1' thenif (hou1="0010" and hou2="0011" and min1="0101" and min2="1001" and sec1="0101" andsec2="1001") thenhou1<="0000";elsif (hou2="1001"and min1="0101" and min2="1001" and sec1="0101" and sec2="1001") thenhou1<=hou1+1;end if;end if;if(allow1='1' and z="01")thenhou1<=hou1n;end if;end process hou_1;-----------------------------------------------hour2hou_2:process(clk,min1,min2,sec1,sec2,hou1)beginif clk'event and clk='1' thenif (hou1="0010" and hou2="0011"and min1="0101" and min2="1001" and sec1="0101" andsec2="1001") thenhou2<="0000";elsif hou2="1001"and(min1="0101" and min2="1001" and sec1="0101" and sec2="1001") thenhou2<="0000";elsif (min1="0101" and min2="1001" and sec1="0101" and sec2="1001")thenhou2<=hou2+1;end if;end if;if(allow1='1' and z="01")thenhou2<=hou2n;end if;end process hou_2;-----------------------------------------------min1min_1:process(clk,min2,sec1,sec2)beginif clk'event and clk='1' thenif (min1="0101" and min2="1001" and sec1="0101" and sec2="1001") then min1<="0000";elsif (min2="1001"and sec1="0101" and sec2="1001") thenmin1<=min1+1;end if;end if;if(allow1='1' and z="01")thenmin1<=min1n;end if;end process min_1;----------------------------------------------min2min_2:process(clk,sec1,sec2)beginif clk'event and clk='1' thenif (min2="1001" and sec1="0101" and sec2="1001")thenmin2<="0000";elsif (sec1="0101" and sec2="1001")thenmin2<=min2+1;end if;end if;if(allow1='1' and z="01")thenmin2<=min2n;end if;end process min_2;---------------------------------------------second1sec_1:process(clk)beginif clk'event and clk='1' thenif (sec1="0101" and sec2="1001")thensec1<="0000";elsif sec2="1001"thensec1<=sec1+1;end if;end if;if(allow1='1' and z="01")thensec1<="0000";end if;end process sec_1;--------------------------------------------second2sec_2:process(clk)beginif clk'event and clk='1' thenif sec2="1001" thensec2<="0000";else sec2<=sec2+1;end if;end if;if(allow1='1' and z="01")thensec2<="0000";end if;end process sec_2;-----------------------------------------------------------------------------------shi jian tiao zheng process(md3)-----------hour1beginif(z="01")thenif(k="11")thenif(md3'event and md3='1')thenif(hou1n="0010")thenhou1n<="0000";elsehou1n<=hou1n+1;end if;end if;end if;end if;end process;process(md3)-----------hour2beginif(z="01")thenif(k="10")thenif(md3'event and md3='1')thenif(hou2n="1001")or(hou1n="0010" and hou2n="0011")then hou2n<="0000";elsehou2n<=hou2n+1;end if;end if;end if;end if;end process;process(md3)-----------min1beginif(z="01")thenif(k="01")thenif(md3'event and md3='1')thenif(min1n="0110")thenmin1n<="0000";elsemin1n<=min1n+1;end if;end if;end if;end if;end process;process(md3)------------min2beginif(z="01")thenif(k="00")thenif(md3'event and md3='1')thenif(min2n="1001")thenmin2n<="0000";elsemin2n<=min2n+1;end if;end if;end if;end if;end process;--------------------------------------------------------------------------------------she zhi nao zhong sethour1:process(md3)beginif(z="10")thenif(k="11")thenif(md3'event and md3='1')thenif(seth1="0010")thenseth1<="0000";elseseth1<=seth1+1;end if;end if;end if;end if;end process sethour1;-------------------------------------------sethour2:process(md3)beginif(z="10")thenif(k="10")thenif(md3'event and md3='1')thenif(seth2="1001")or(seth2="0010" and seth2="0100")then seth2<="0000";elseseth2<=seth2+1;end if;end if;end if;end if;end process sethour2;-------------------------------------------setmin1:process(md3)beginif(z="10")thenif(k="01")thenif(md3'event and md3='1')thenif(setm1="0110")thensetm1<="0000";elsesetm1<=setm1+1;end if;end if;end if;end if;end process setmin1;----------------------------------------------setmin2:process(md3)beginif(z="10")thenif(k="00")thenif(md3'event and md3='1')thenif(setm2="1001")thensetm2<="0000";elsesetm2<=setm2+1;end if;end if;end if;end if;end process setmin2;----------------------------------------------------------------------------------------nao zhongspeaker:process(clk1,hou1,hou2,min1,min2)beginif clk1'event and clk1='1'thenif(allow2='1')thenif seth1=hou1 and seth2=hou2 and setm1=min1 and setm2=min2 thenspeak<=clkn1;elsespeak<='0';end if;end if;end if;end process speaker;--------------------------------------------------------------------------------------disp:process(sel,md1,hou1,hou2,min1,min2,sec1,sec2,seth1,seth2,setm1,setm2) beginif sel="000" thenselout<="111110";case h1 iswhen "0000"=>dout<="1000000";--0when "0001"=>dout<="1111001";--1when "0010"=>dout<="0100100";--2when others =>dout<="1000000";--0end case;elsif sel="001" thenselout<="111101";case h2 iswhen "0000"=>dout<="1000000";--0when "0001"=>dout<="1111001";--1when "0010"=>dout<="0100100";--2when "0011"=>dout<="0110000";--3when "0100"=>dout<="0011001";--4when "0101"=>dout<="0010010";--5when "0110"=>dout<="0000010";--6when "0111"=>dout<="1111000";--7when "1000"=>dout<="0000000";--8when "1001"=>dout<="0010000";--9when others=>dout<="1000000";end case;elsif sel="010" thenselout<="111011";case m1 iswhen "0000"=>dout<="1000000";--0 when "0001"=>dout<="1111001";--1 when "0010"=>dout<="0100100";--2 when "0011"=>dout<="0110000";--3 when "0100"=>dout<="0011001";--4 when "0101"=>dout<="0010010";--5 when others=>dout<="1000000";--0 end case;elsif sel="011" thenselout<="110111";case m2 iswhen "0000"=>dout<="1000000";--0 when "0001"=>dout<="1111001";--1 when "0010"=>dout<="0100100";--2 when "0011"=>dout<="0110000";--3 when "0100"=>dout<="0011001";--4 when "0101"=>dout<="0010010";--5 when "0110"=>dout<="0000010";--6 when "0111"=>dout<="1111000";--7 when "1000"=>dout<="0000000";--8 when "1001"=>dout<="0010000";--9 when others=>dout<="1000000";--0 end case;elsif sel="100" thenselout<="101111";case s1 iswhen "0000"=>dout<="1000000";--0 when "0001"=>dout<="1111001";--1 when "0010"=>dout<="0100100";--2 when "0011"=>dout<="0110000";--3 when "0100"=>dout<="0011001";--4 when "0101"=>dout<="0010010";--5 when others=>dout<="1000000";--0 end case;elsif sel="101" thenselout<="011111";case s2 iswhen "0000"=>dout<="1000000";--0 when "0001"=>dout<="1111001";--1 when "0010"=>dout<="0100100";--2 when "0011"=>dout<="0110000";--3 when "0100"=>dout<="0011001";--4 when "0101"=>dout<="0010010";--5when "0110"=>dout<="0000010";--6when "0111"=>dout<="1111000";--7when "1000"=>dout<="0000000";--8when "1001"=>dout<="0010000";--9when others=>dout<="1000000";--0end case;end if;if z="00" then---------------zheng chang xian shih1<=hou1;h2<=hou2;m1<=min1;m2<=min2;s1<=sec1;s2<=sec2;elsif z="01"thenh1<=hou1n;h2<=hou2n;m1<=min1n;m2<=min2n;s1<="0000";s2<="0000";elsif z="10" then ----------------nao zhong xian shi h1<=seth1;h2<=seth2;m1<=setm1;m2<=setm2;s1<="0000";s2<="0000";end if;end process disp;------------------------------------------end one;11。
基于硬件描述语言(VHDL)的数字时钟设计
品设计 开发技 术 的发 展 . 者 以微 细加 工 技 术 为 代 前
表, 而后 者 的代 表 就 是 电子 设 计 自动 化 ( l t nc ee r i co ds na t t , D 技 术 . D 以计 算机 为工作 平 ei uo i E A) g mac EA
计, 而两个 不 同侧 面 的设 计 人 员 各 自从 事 自身 的 工 作, 彼此 很少涉 足对 方 的工作 领域 . 随着 计算 机 技 术 的发展 和硬件描 述语 言 的 出现 , 种 界 限被 打 破 , 这 即 软件 设计 人员 也 同样 可借 助 V D H L设计 出符 合 不 同
( col f l t nc Ifr ao n o m n ai sE gne n , S ho o e r i nom t nadC m u i t n nier g E co s i c o i .叭i nvr t o T cnlg , i j 0 1 1 C ia r i U i sy f ehooy Ta i 3 0 9 , h ) i n e i nn n
Absr c t a t:VHDL c n be u e o d s rb a s d t e c e, sm ua e a d de in diia y tm utmai al No d y i i lt n sg gtls se a o tc y. l wa a s, i b c me e t e o sa k y tc oo n utmai lcr ni sg e hn lg i a o t ee to cde in.Thee i o fs p ro t n t sde c pt n l n ua .Thi ri l nto u e h y c r sa lto u e r y i hi s r i a g ge i i i o sa tce i r d c st e meho n heprc s sn t d a d t o e s u ig VHDL t sg i t y tm y a x mpl fdg t lc e in.Ther s l gv n i hi ode i a dgi s se b n e a n l a eo iia co k d sg l e ut i e n t s p p r s o h tVHDL i n ft esr n e ttosi r a e h wsta so eo h to g s o l nhadwa e d s rpto n ti e il mo h sg eh d. Th r e c i i na d i saf xb ea ngt ede i m to l n e meho ie n t i a e a e c h fiu t fd gtls se d sg nd i p o e te wo k e c e c 、 t d gv n i hs p p rc n r du e te di c ly o i i y tm e in a m r v h r f i n y f a i
EDA课程设计——基于VHDL语言的数字时钟设计(可编辑)
EDA课程设计——基于VHDL 语言的数字时钟设计(可编辑)(文档可以直接使用,也可根据实际需要修改使用,可编辑推荐下载)一、设计要求 0二、设计原理及框图 01、设计原理 02、结构框图 0三、设计过程 (1)1、模块化设计 (1)2、顶层文件生成 (2)四、仿真调试过程 (3)1、各模块时序仿真图 (3)2、仿真过程中遇到的问题 (4)五、设计体会及收获 (4)一、设计要求1、稳定的显示时、分、秒。
2、当电路发生走时误差时,要求电路有校时功能。
3、电路有整点报时功能。
报时声响为四低一高,最后一响高音正好为整点。
二、设计原理及框图1、设计原理系统框图由六个模块组成,分别为:秒、分、时计数模块,整点报时模块,LED动态显示扫描模块,调时控制模块组成。
其工作原理是:基准脉冲输入信号同时加到秒、分、时、分隔符的脉冲输入端,采用并行计数的方式,秒的进位接到分的使能端上,秒的使能借到分隔符的使能上,分得接到时的使能端上,完成秒、分、时和分隔符的循环计数。
整点报时是根据分的A、B输出同时为0时,整点报时模块输出高电平控制报时。
LED显示扫描模块根据输入的扫描信号CKDSP轮流选通秒、分、时、分隔符的8位八段数码管,LED显示译码器完成计数器输出的BCD的译码。
2、结构框图三、设计过程1、模块化设计(1)秒计时模块秒计时模块由一个60位计数器为主体构成,其输入输出端口组成为:Clk:计时时钟信号Reset:异步清零信号Setmin:分钟设置信号Enmin:使能输出信号Daout[6:0]:BCD码输出(2)分计时模块分计时模块由一个60位计数器为主体构成,其输入输出端口组成为:Clk、clk1:计时时钟信号Reset:异步清零信号Sethour:小时设置信号Enmin:使能输出信号Daout[6:0]:BCD码输出(3)时计时模块时计时模块由24位计数器为主体构成,其输入输出端口组成为:Clk:计时时钟信号Reset:异步清零信号Daout[6:0]:BCD码输出(4)显示模块系统时间输出由六个七段数码管显示。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验十七数字时钟实验目的设计一个可以计时的数字时钟,其显示时间范围是00:00:00~23:59:59,且该时钟具有暂停计时、清零等功能。
实验器材1、SOPC实验箱2、计算机(装有Quartus II 7.0软件)实验预习1、了解时钟设计原理和各主要模块的设计方法。
2、提前预习,编写好主模块的VHDL程序。
实验原理数字时钟框图如图17.1所示,一个完整的时钟应由4部分组成:秒脉冲发生电路、计数部分、译码显示部分和时钟调整部分。
1、秒脉冲发生:一个时钟的准确与否主要取决秒脉冲的精确度。
可以设计分频电路对系统时钟50MHz进行50000000分频从而得到稳定的1Hz基准信号。
定义一个50000000进制的计数器,将系统时钟作为时钟输入引脚clk,进位输出即为分频后的1Hz信号。
2、计数部分:应设计1个60进制秒计数器、1个60进制分计数器、1个24进制时计数器用于计时。
秒计数器应定义clk(时钟输入)、rst(复位)两个输入引脚,Q3~Q0(秒位)、Q7~Q4(十秒位)、Co(进位位)9个输出引脚。
分、时计数器类似。
如需要设置时间可再增加置数控制引脚Set和置数输入引脚d0~d7。
3、译码显示部分:此模块应定义控制时钟输入、时分秒计数数据输入共25个输入引脚;8位显示码输出(XQ7~XQ0)、6位数码管选通信号(DIG0~DIG5)共14个输出引脚。
在时钟信号的控制下轮流选择对十时、时、十分、分、十秒、秒输入信号进行译码输出至XQ7~XQ0,并通过DIG0~DIG5输出相应的选通信号选择数码管。
每位显示时间控制在1ms 左右。
时钟信号可由分频电路引出。
4、各模块连接方式如图17.1所示。
图17.1 数字时钟框图系统时钟为1024Hz产生1Hz模块Library IEEE;use IEEE.std_logic_1164.all;use IEEE.std_logic_unsigned.all;Entity clk_1Hz ISPORT(sys_clk:in std_logic;clk_1Hz:out std_logic);END entity clk_1Hz;Architecture bhv of clk_1Hz ISsignal clk_1Hz_r:std_logic;signal count:std_logic_vector(9 downto 0); BeginProcess(sys_clk)BeginIF sys_clk'EVENT AND sys_clk='1' THEN IF count="1000000000" THENcount<=(others=>'0');clk_1Hz_r<=NOT clk_1Hz_r;ELSE count<=count+1;END IF;END IF;END Process;clk_1Hz<=clk_1Hz_r;END bhv;24进制模块Library IEEE;use IEEE.std_logic_1164.all;use IEEE.std_logic_unsigned.all;Entity counter24 ISPORT(clk,rst:in std_logic;bcd:out std_logic_vector(7 downto 0);up:out std_logic);END entity counter24;Architecture bhv of counter24 ISsignal bcd_r:std_logic_vector(7 downto 0); signal up_r:std_logic;BeginProcess(clk,rst)BeginIF rst='0' THENbcd_r<=(others=>'0');up_r<='0';ELSIF clk'EVENT AND clk='1' THENIF bcd_r="00100100" THENbcd_r<=(others=>'0');up_r<='1';ELSIF bcd_r(3 downto 0)="1001" THENbcd_r(3 downto 0)<="0000";bcd_r(7 downto 4)<=bcd_r(7 downto 4)+1;up_r<='0';ELSE bcd_r(3 downto 0)<=bcd_r(3 downto 0)+1;up_r<='0';END IF;END IF;END PROCESS;bcd<=bcd_r;up<=up_r;END bhv;60进制模块Library IEEE;use IEEE.std_logic_1164.all;use IEEE.std_logic_unsigned.all;Entity counter60 ISPORT(clk,rst:in std_logic;bcd:out std_logic_vector(7 downto 0);up:out std_logic);END entity counter60;Architecture bhv of counter60 ISsignal bcd_r:std_logic_vector(7 downto 0);signal up_r:std_logic;BeginProcess(clk,rst)BeginIF rst='0' THENbcd_r<=(others=>'0');up_r<='0';ELSIF clk'EVENT AND clk='1' THENIF bcd_r="01011001" THENbcd_r<=(others=>'0');up_r<='1';ELSIF bcd_r(3 downto 0)="1001" THENbcd_r(3 downto 0)<="0000";bcd_r(7 downto 4)<=bcd_r(7 downto 4)+1;up_r<='0';ELSE bcd_r(3 downto 0)<=bcd_r(3 downto 0)+1;up_r<='0';END IF;END IF;END PROCESS;bcd<=bcd_r;up<=up_r;END bhv;数码管译码显示模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_Arith.ALL;USE IEEE.STD_LOGIC_Unsigned.ALL;ENTITY xianshi ISPORT(clk:IN STD_LOGIC;datain:IN STD_LOGIC_VECTOR(31 DOWNTO 0);dig,seg:OUT STD_LOGIC_VECTOR(7 DOWNTO 0) );END ENTITY;ARCHITECTURE one OF xianshi ISSIGNAL counter: std_logic_vector(2 DOWNTO 0); SIGNAL display: std_logic_vector(3 DOWNTO 0); SIGNAL seg_r: std_logic_vector(7 DOWNTO 0); SIGNAL dig_r: std_logic_vector(7 DOWNTO 0);BEGINAAA:PROCESS(clk)BEGINIF clk'EVENT AND clk='1' THENcounter<=counter+1;END IF;END PROCESS AAA;BBB:PROCESS(counter)BEGINCASE counter ISWHEN "000" => dig_r<="01111111";WHEN "001" => dig_r<="10111111";WHEN "010" => dig_r<="11011111";WHEN "011" => dig_r<="11101111";WHEN "100" => dig_r<="11110111";WHEN "101" => dig_r<="11111011";WHEN "110" => dig_r<="11111101";WHEN "111" => dig_r<="11111110";WHEN OTHERS =>NULL;END CASE;END PROCESS BBB;CCC:PROCESS(counter,datain)BEGINCASE counter ISWHEN "000" => display<=datain(31 DOWNTO 28);WHEN "001" => display<=datain(27 DOWNTO 24);WHEN "010" => display<=X"a";WHEN "011" => display<=datain(19 DOWNTO 16);WHEN "100" => display<=datain(15 DOWNTO 12);WHEN "101" => display<=X"a";WHEN "110" => display<=datain(7 DOWNTO 4);WHEN "111" => display<=datain(3 DOWNTO 0);WHEN OTHERS =>NULL;END CASE;END PROCESS CCC;DDD:PROCESS(display)BEGINCASE display ISWHEN X"0"=> seg_r<=X"c0";WHEN X"1"=> seg_r<=X"f9";WHEN X"2"=> seg_r<=X"a4";WHEN X"3"=> seg_r<=X"b0";WHEN X"4"=> seg_r<=X"99";WHEN X"5"=> seg_r<=X"92";WHEN X"6"=> seg_r<=X"82";WHEN X"7"=> seg_r<=X"f8";WHEN X"8"=> seg_r<=X"80";WHEN X"9"=> seg_r<=X"90";WHEN X"a"=> seg_r<=X"BF"; --显示‘-’WHEN X"b"=> seg_r<=X"83";WHEN X"c"=> seg_r<=X"c6";WHEN X"d"=> seg_r<=X"a1";WHEN X"e"=> seg_r<=X"86";WHEN X"f"=> seg_r<=X"8e";WHEN OTHERS =>NULL;END CASE;END PROCESS DDD;seg<=seg_r;dig<=dig_r;END ARCHITECTURE; 原理图。