基于VHDL的数字时钟设计

合集下载

数字逻辑电路(数电)课程设计_电子秒表_VHDL实现(含完整源代码!!)

数字逻辑电路(数电)课程设计_电子秒表_VHDL实现(含完整源代码!!)

电子科技大学UNIVERSITY OF ELECTRONIC SCIENCE AND TECHNOLOGY OF CHINA数字逻辑设计实验报告实验题目:电子秒表学生姓名:指导老师:一、实验内容利用FPGA设计一个电子秒表,计时范围00.00 ~ 99.00秒,最多连续记录3个成绩,由两键控制。

二、实验要求1、实现计时功能:域值范围为00.00 ~ 99.00秒,分辨率0.01秒,在数码管上显示。

2、两键控制与三次记录:1键实现“开始”、“记录”等功能,2键实现“显示”、“重置”等功能。

系统上电复位后,按下1键“开始”后,开始计时,记录的时间一直显示在数码管上;按下1键“记录第一次”,次按1键“记录第二次”,再按1键“记录第三次”,分别记录三次时间。

其后按下2键“显示第一次”,次按2键“显示第二次”,再按2键“显示第三次”,数码管上分别显示此前三次记录的时间;显示完成后,按2键“重置”,所有数据清零,此时再按1键“开始”重复上述计时功能。

三、设计思路1、整体设计思路先对按键进行去抖操作,以正确的得到按键信息。

同时将按键信息对应到状态机中,状态机中的状态有:理想状态、开始状态、3次记录、3次显示、以及其之间的7次等待状态。

因为需要用数码管显示,故显示的过程中需要对数码管进行片选和段选,因此要用到4输入的多路选择器。

在去抖、计时、显示的过程中,都需要用到分频,从而得到理想频率的时钟信号。

2、分频设计该实验中有3个地方需要用到分频操作,即去抖分频(需得到200HZ时钟)、计时分频(需得到100HZ时钟)和显示分频(需得到25kHZ时钟)。

分频的具体实现很简单,需首先算出系统时钟(50MHZ)和所需始终的频率比T,并定义一个计数变量count,当系统时钟的上升沿每来到一次,count就加1,当count=T时就将其置回1。

这样只要令count=1~T/2时clk=‘0’,count=T/2+1~T时clk=‘1’即可。

数字秒表的设计与实现实验报告

数字秒表的设计与实现实验报告

电子科技大学《数字秒表课程设计》姓名: xxx学号:学院:指导老师:xx摘要EDA技术作为电子工程领域的一门新技术,极大的提高了电子系统设计的效率和可靠性。

文中介绍了一种基于FPGA在ISE10.1软件下利用VHDL语言结合硬件电路来实现数字秒表的功能的设计方法。

采用VHDL硬件描述语言,运用ModelSim等EDA仿真工具。

该设计具有外围电路少、集成度高、可靠性强等优点。

通过数码管驱动电路动态显示计时结果。

给出部分模块的VHDL源程序和仿真结果,仿真结果表明该设计方案的正确,展示了VHDL语言的强大功能和优秀特性。

关键词:FPGA, VHDL, EDA, 数字秒表目录第一章引言 (4)第二章设计背景 (5)2.1 方案设计 (5)2.2 系统总体框图 (5)2.3 -FPGA实验板 (5)2.4 系统功能要求 (6)2.5 开发软件 (6)2.5.1 ISE10.1简介 (6)2.5.2 ModelSim简介 (6)2.6 VHDL语言简介 (7)第三章模块设计 (8)3.1 分频器 (8)3.2 计数器 (8)3.3 数据锁存器 (9)3.4 控制器 (9)3.5 扫描控制电路 (10)3.6 按键消抖电路 (11)第四章总体设计 (12)第五章结论 (13)附录 (14)第一章引言数字集成电路作为当今信息时代的基石,不仅在信息处理、工业控制等生产领域得到普及应用,并且在人们的日常生活中也是随处可见,极大的改变了人们的生活方式。

面对如此巨大的市场,要求数字集成电路的设计周期尽可能短、实验成本尽可能低,最好能在实验室直接验证设计的准确性和可行性,因而出现了现场可编程逻辑门阵列FPGA。

对于芯片设计而言,FPGA的易用性不仅使得设计更加简单、快捷,并且节省了反复流片验证的巨额成本。

对于某些小批量应用的场合,甚至可以直接利用FPGA实现,无需再去订制专门的数字芯片。

文中着重介绍了一种基于FPGA利用VHDL硬件描述语言的数字秒表设计方法,在设计过程中使用基于VHDL的EDA工具ModelSim对各个模块仿真验证,并给出了完整的源程序和仿真结果。

vhdl数字电子钟的设计与实现

vhdl数字电子钟的设计与实现

基于VHDL数字电子钟的设计与实现摘要:本课程设计完成了数字电子钟的设计,数字电子钟是一种用数字显示秒、分、时的计时装置,由于数字集成电路技术的发展和采用了先进的石英技术,它使数字钟具有走时准确、性能稳定、携带方便等优点。

数字钟已成为人们日常生活中必不可少的必需品,广泛用于个人家庭以及办公室等公共场所,给人们的生活带来极大的方便。

在这里我们将已学过的比较零散的数字电路的知识有机的、系统的联系起来用于实际,来培养我们的综合分析和设计电路的能力。

关键词:电子钟;门电路及单次按键;琴键开关目录第一章引言----------------------------------------------------------------11.1 课题的背景、目的------------------------------------------11.2 课程设计的内容------------------------------------------1 第二章EDA与VHDL简介--------------------------------------------------22.1 EDA的介绍---------------------------------------------22.2 VHDL的介绍--------------------------------------------32.2.1 VHDL的用途与优点-----------------------------------------------------------------32.2.2 VHDL的主要特点----------------------------------------------------------------------2.2.3 用VHDL语言开发的流程------------------------------------------------------------ 第三章数字电子钟的设计方案------------------------------------------63.1秒脉冲发生器--------------------------------------------73.2可调时钟模块--------------------------------------------83.3校正电路------------------------------------------------83.4闹铃功能------------------------------------------------103.5日历系统------------------------------------------------11 第四章结束语---------------------------------------------------------------134.1致谢----------------------------------------------------144.2参考文献------------------------------------------------151引言随着科学技术的不断发展,人们对时间计量的精度要求越来越高。

VHDL数字时钟设计

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数字钟

课程设计报告设计题目:用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指定为标准硬件描述语言。

VHDL语言实现数字电路设计

VHDL语言实现数字电路设计

VHDL语言实现数字电路设计数字电路是由逻辑门、寄存器以及其他数字组件组成的电子系统,用于处理和传输数字信号。

VHDL(Very High-Speed Integrated Circuit Hardware Description Language)是一种硬件描述语言,用于描述数字电路和系统。

通过使用VHDL语言,我们可以实现数字电路的设计,从而满足各种需求。

VHDL语言提供了一种结构化的设计方法,允许设计者描述硬件电路的结构、功能以及时序行为。

以下是一些常见的数字电路设计任务,以及如何使用VHDL语言来实现它们。

1. 门电路设计门电路是最简单的数字电路之一,由逻辑门组成。

使用VHDL语言,我们可以通过描述逻辑门的输入和输出来实现门电路的设计。

例如,我们可以使用VHDL语言描述一个与门:```vhdlentity AND_gate isport (A, B : in bit;Y : out bit);end entity AND_gate;architecture dataflow of AND_gate isbeginY <= A and B;end architecture dataflow;```在这个例子中,我们定义了一个输入端口A和B,以及一个输出端口Y。

在architecture部分,我们使用VHDL语言描述了Y的逻辑值为A和B的逻辑与。

2. 时序逻辑电路设计时序逻辑电路是根据时钟信号进行操作和状态转换的电路。

使用VHDL语言,我们可以描述时序逻辑电路的行为和状态变化。

例如,我们可以使用VHDL语言描述一个触发器:```vhdlentity D_flip_flop isport (D, CLK : in bit;Q : out bit);end entity D_flip_flop;architecture behavior of D_flip_flop issignal Q_temp : bit;beginprocess(CLK)beginif CLK'event and CLK = '1' thenQ_temp <= D;end if;end process;Q <= Q_temp;end architecture behavior;```在这个例子中,我们定义了一个输入端口D和CLK,以及一个输出端口Q。

数字秒表实验报告

数字秒表实验报告

EDA课程设计题目:基于VHDL的数字秒表设计学生姓名学号学院电子信息学院专业 10通信工程指导教师二零一二年十二月基于VHDL的数字秒表设计摘要当前电子系统的设计正朝着速度快,容量大,体积小,质量轻,省电的方向发展。

推动该潮流迅速发展的决定性因素就是使用了现代化的EDA设计工具。

此次课程设计先确定了系统的逻辑功能,选择电路结构,然后确定并设计电路所需的数据处理以及控制模块,在Quartus II上以超高速硬件描述语言VHDL为系统逻辑描述方法完成了数字秒表所需的分频模块,十进制计数控制模块,六进制计数控制模块与顶层设计和引脚分配,对其进行编译仿真,并下载到实验板上实际验证,通过本设计锻炼了计算机应用能力、VHDL语言的编程能力和Quartus II 的使用能力,此次设计圆满完成了用VHDL语言设计1/1000秒数字秒表并仿真和实际下载到ALTERA公司的ACEX1K系列的EP1K30TC144-3中实现。

关键词:EDA、Quartus II、VHDL、模块、仿真、ACEX1KAbstractThe electronic system design is moving speed, large capacity, small volume, light weight, energy saving direction. The trend of rapid development of determinant is the use of modern EDA design tools. This course is designed to determine the logic function of the system, establish the algorithm process, selection of circuit structure and circuit design, and then determine the desired data processing and control module, in the Quartus II to very high speed hardware description language VHDL as the system logical description method for completing the digital stopwatch desired frequency module, decimal counting control module, base six counting control module with top design and pin assignment, the compiled simulation, and downloaded to the experiments on actual test and verify, through the design of exercise ability of computer application and VHDL programming language and Quartus II using capability, the design was completed by VHDL language design 1\/1000 seconds stopwatch and simulation and the actual download to ALTERA company's ACEX1K series EP1K30TC144-3 implementation.Key Words:EDA、Quartus II、VHDL、Module、Simulation、ACEX1K目录摘要----------------------------------------------------------------2 Abstract------------------------------------------------------------2一、设计要求--------------------------------------------------------4二、设计思想与方案论证----------------------------------------------42.1 设计思想----------------------------------------------------42.2 方案论证----------------------------------------------------4三、系统设计--------------------------------------------------------53.1 顶层电路设计------------------------------------------------53.2时钟分频电路模块---------------------------------------------63.3十进制计数控制模块-------------------------------------------73.4六进制计数控制模块-------------------------------------------7四、系统仿真--------------------------------------------------------84.1 模块仿真----------------------------------------------------84.1.1 时钟分频电路模块仿真 ----------------------------------84.1.2 十进制计数控制模块仿真---------------------------------94.1.3 六进制计数控制模块仿真---------------------------------94.2 总体仿真---------------------------------------------------10五、下载实现--------------------------------------------------------105.1 引脚分配---------------------------------------------------115.2 下载验证---------------------------------------------------11六、问题与不足-----------------------------------------------------13七、心得体会-------------------------------------------------------13参考文献-----------------------------------------------------------14附录---------------------------------------------------------------14附录1 :本设计各模块代码-------------------------------------------14一、设计要求设计用于体育比赛用的数字秒表,要求1、计时精度大于1/1000秒,计时器能显示1/1000秒的时间,提供给计时器内部定时的时钟频率为12MHz;计时器的最长计时时间为1小时,为此需要一个7位的显示器,显示的最长时间为59分59.999秒2、设计有复位和起/停开关(1) 复位开关用来使计时器清零,并做好计时准备。

多功能数字电子钟_VHDL

多功能数字电子钟_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

数电实验 数字钟

数电实验  数字钟

数字钟简介:这是一个以EPM7128SLC84-15为软件载体,数码管作显示器件,蜂鸣器作提示器件,拥有4个按键的电子钟。

它能够正常计时,支持12小时和24小时两种计时方式,同时允许用户手动调时和设置整点报时。

在正常计时状态下,用户可以选择12或24小时的计时方式,也可以设置或取消整点报时的功能(蜂鸣器作整点报时的提示设备)。

同时,数码管会有相应的显示来指示当前电子钟的设置。

当用户通过按键进入校时状态时,闪烁的一位数便是当前调节的数;用户可以通过按键选择要调的位,并对选择位的数字进行修改。

(具体按键的功能说明请查阅软件编写部分三、2 )该电子钟的软件部分用VHDL编写,编译环境采用的是MAX+plus II.主要分为分频、按键防抖动、模式控制、计时校时、显示输出五个模块。

(具体设计见软件编写部分四)由于时间有限、作者才疏,纰漏在所难免,敬请老师指正。

关键字:显示模块的刷新率:=显示模块的输入时钟频率/数码管的个数;防抖动模块的基准频率:按键操作会产生上升沿,只有当两个上升沿发生在不同的基准周期时才被看作是两次按键;正常计时的基准频率:1Hz时钟状态:即mode,分为正常计时(mode=0)和校时(mode=1)两个状态;12/24 hour:即tm,tm=1为12小时制;tm=0为24小时制;选择位:在校时操作时,用户操作的当前位,可以是时分秒的低位或高位,从硬件显示上看,就是在校时状态下,闪烁的那一位。

硬件支持部分软件设计部分一、设计要求设计并制作一台能显示时、分、秒的数字钟。

1、可手动校时,能分别进行时、分的校正;2、12小时(含上下午显示)、24小时计时制可手动选择;3、选做:整点报时。

4、选做:闹铃功能,当计时计到预定时间时,蜂鸣器发出闹铃信号,闹铃时间为1秒,可提前终止闹铃。

5、选做:自拟其它功能。

二、程序编写方案比较与选择方案一:将所有功能设计好,程序结构制定完备后,将代码写入一个或几个文件里。

基于VHDL语言的数码管闪烁控制的实现

基于VHDL语言的数码管闪烁控制的实现

在上位机调试时 , 最重要 的是顺序的处理数据 , 因为
不 同的数据在转化 时会乘 以不同的权 ,所 以如果数据顺
序不正确 , 将得不到预期的效果。当输入一个方波时 , 现
象如 图 7 示 。 所
[ 刘皖, 4 ] 何道君’ 谭明. G F A设计与应用[ ] P M. 北京: 清华大学
出版社, 0 , . 2 66 0 0
[赵宇 玲. 于 F G 5 ] 基 P A的信号采集 与处理 系统设计 与实
现[】 D. 南京: 京理工大学, 0 ,: — 3 南 2 8 2 2. 0 62
1 4
_
w e ” 1” > au =h m ( ; h n 0 = do t su g ) 1 < 3
w e ”0 ” > au< su g ) h n 10= do t=h m ( ; 4 w e ”0 ” > au =h m ( ; h n 1 1= do t su g ) < 5 w e ” ” > au =h m ( ; h n 10= do t su g ) 1 < 6
基 于 V D 语 言的数码管闪烁控制的实现 HL
电子 质 量 ( 1第 0 期) 22 7 0
为数码管闪烁的基准时钟 , 用于控制数字 闪烁 的快慢 , 从
而达到调速的 目的。
S 4:
W HEN 3 >F S = LOW ER2 = 3CURRENT S < FF ; TAT : E<
的 显示 。
END CAS E; END I F;
2各模块设计
21分频模块 。 该模块主要用 V D H L语言实现四分频 和八分频。设
计时主要用 到计数器。主要代码如下 :
I I I GE C K I )HEN FR SNG ED fL NT

基于VHDL语言的数字时钟设计

基于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实验报告--数字钟

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

基于VHDL的数字电子钟系统设计

集成电路软件设计基于VHDL的数字电子钟系统设计学院信息工程学院班级电科1112姓名闭应明学号 2011850057 成绩指导老师卫雅芬2013 年 12 月 10 日目录一、摘要 (1)二、关键词 ............................................. 错误!未定义书签。

三、引言................................................ 错误!未定义书签。

四、设计要求........................................... 错误!未定义书签。

五、技术指标 (1)六、设计思想 (1)七、设计原理 (2)八、设计方案 (2)九、设计各个模块的功能 (3)十、各个模块的波形仿真结果 (1)十一、各个电路模块的DV综合的网标和电路模型 (12)十二、设计结果分析 (19)十三、论文结论 (20)十四、参考文献 (20)十五、附录 (21)十六、致谢 (50)一、摘要:本设计采用层次化设计方法,自顶向下进行设计。

设计中根据系统的功能要求合理划分出层次,进行分级设计和仿真验证,将较为复杂的数字系统逻辑简化为基本的模型从而降低实现的难度。

突出了其作为硬件描述语言的良好的可读性、可移植性和易理解等优点,并通过ModelSim SE 6.1完成综合、仿真。

二、关键词:Modelsim VHDL 硬件描述语言设计数字钟三、引言:硬件描述语言HDL(Hardware Description Language)是一种用形式化方法来描述数字电路和系统的语言。

目前.电子系统向集成化、大规模和高速度等方向发展,以硬件描述语言和逻辑综合为基础的自顶向下的电路设计方法在业界得到迅猛发展,VHDL在这种形势下显示出了巨大的优势,展望将来VHDL在硬件设计领域的地位将与c语言和c++在软件设计领域的地位一样,在大规模数字系统的设计中,它将逐步取代传统的逻辑状态表和逻辑电路图等硬件描述方法,而成为主要的硬件描述工具。

基于VHDL的数字时钟的设计

基于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的数字时钟设计

基于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数字时钟

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)的数字时钟设计

基于硬件描述语言(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语言的数字时钟设计(可编辑)

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)显示模块系统时间输出由六个七段数码管显示。

vhdl设计实例

vhdl设计实例

vhdl设计实例VHDL设计实例:数字电子钟引言:数字电子钟是一种常见的电子设备,用于显示当前时间。

本文将介绍如何使用VHDL设计一个简单的数字电子钟。

一、设计概述数字电子钟由时钟模块、数码管显示模块和控制模块组成。

时钟模块用于生成计时脉冲,数码管显示模块用于将时钟模块输出的计时脉冲转换为对应的数字显示,控制模块用于调整时钟和设置时间。

二、时钟模块设计时钟模块是整个电子钟的核心,它需要能够精确地生成计时脉冲。

使用VHDL语言,可以使用计数器和时钟分频器实现时钟模块。

计数器用于计数,时钟分频器用于将计数器的输出分频为1秒钟一次的脉冲。

三、数码管显示模块设计数码管显示模块用于将时钟模块输出的计时脉冲转换为数字显示。

在数码管显示模块中,每个数码管对应一个数字显示,通过切换不同的数码管,可以实现显示小时、分钟和秒钟。

使用VHDL语言,可以使用多路复用器和BCD转换器实现数码管显示模块。

四、控制模块设计控制模块用于调整时钟和设置时间。

通过增加按钮和减少按钮,可以实现调整时钟的功能。

通过设置按钮,可以进入设置时间的模式,并通过增加按钮和减少按钮设置小时、分钟和秒钟。

使用VHDL语言,可以使用状态机实现控制模块。

五、测试与验证在设计完成后,需要进行测试和验证。

可以使用仿真工具对设计的各个模块进行仿真,验证其功能是否正常。

同时,还可以将设计烧录到FPGA开发板上进行实际测试,确保数字电子钟能够正常工作。

六、总结本文以VHDL设计实例为题,详细介绍了数字电子钟的设计过程。

通过时钟模块、数码管显示模块和控制模块的设计,实现了一个简单的数字电子钟。

通过测试和验证,确保了设计的正确性和可靠性。

希望本文对读者理解VHDL设计实例并进行创作有所帮助。

通过自己的实践和研究,不断探索和创新,可以设计出更多实用的数字电子设备。

让我们一起努力,推动数字电子技术的发展!。

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

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进制计数器三个子模块组成的。

秒针是由60进制计数器构成的,它的计数脉冲就是秒信号,当秒计数器为59时,再来个秒信号,秒计数器就清零,且进位为一。

分针也是由60进制计数器构成的,它的计数脉冲就是秒计数器的进位,当分计数器为59时,下个秒计数器的进位分计数器就清零,且进位为一。

时针是由24进制计数器构成的,它的计数脉冲为分计数器的进位,当时计数器为23时,再来个分计数器的进位,时计数器就清零。

功能管脚主要包括一个清零的清除端,一个校正的预置端(需要输入端配合)和一个控制工作的使能端。

3.2VHDL实体设计根据设计思想,端口部分共设计十个输入端,六个输出端。

输入端包括一个脉冲输入端,即外部秒信号的输入端;一个同步清除端,只要脉冲信号在有效状态,不管计数器现态为何,输出一律为0;一个预置端,有效时不管计数器现态为何,输出一律为输入预置端状态;一个使能端,有效时计数器正常计数,无效时,计数器保持现态不变;六个输入预置端,接受外部输入状态。

六个输出端表示电路现态。

实体部分的VHDL代码:ENT IT Y clo ck ISPORT(CL R,LDN,EN,CL K:IN STD_L OGIC;---时钟输入端CL K,同步清除端CL R,预置端LDN,使能端ENXSa,XMa,XHa:IN INTEGER RANGE0TO9;———输入预置端时、分、秒的低位XSb,XM b:IN INT EGER RANGE0T O5;———输入预置端分、秒的高位XHb:IN INTE GER RANGE0T O1;———输入预置端时的高位YSa,YM a,Yha:OUT INTE GER RANGE0T O9;———输出端时、分、秒的低位YSb,YMb:OUT INTEGER RANGE0T O5;———输出端分、秒的高位YHb:OUT INTEGER RANGE0T O1;———输出端时的高位);END clo ck;3.3VHDL构造体设计因为VHDL语言是一种硬件描述语言,所以在利用VHDL语言进行编程时只需要描述清楚各信号或变量之间的逻辑关系,而不需要受到实际信号流向的约束。

因此在对计数模块进行编程时,我们只需要判断几个特殊的状态,并给出结果,不符合特殊状态则正常计数。

对时计数器,在59分59秒的现态,如果是23时,那么下个状态是00时;如果是9时,则下个状态是10时;如果是19时,则下个状态是20时;否则,时计数器自动加一。

对分计数器,在59秒的现态,如果是59分,则下个状态是00分;如果是其余的9分,则十位加一,个位清零;否则分计数器自动加一。

对秒计数器,如果现态为59秒,则下个状态是00秒;如果是其余的9秒,则十位加一,个位清零;否则秒计数器自动加一。

核心程序如下:IF(YSb=5AND Ysa=9AND YM b=5AND YM a=9)T HENIF(YHb=2AND Yha=3)THENYHb:=0;Yha:=0;EL SIF YHa=9T HENYHa:=0;YHb:=YHb+1;EL SE YHa:=YHa+1;END IF;EDN IF;IF(YSb=5AND YSa=9)T HENIF YM a=9THENYM a:=0;IF YM b=5T HENYM b=0;EL SE YM b:=YM b+1;END IF;L S YM=YM+;(下转第6页)基于VHDL的数字时钟设计万春迎(山东英才学院计算机电子信息工程学院山东济南250104)【摘要】VHDL是一种标准的硬件描述语言,该语言可以描述硬件电路的功能、信号连接关系及定时关系,是当今电子设计自动化(EDA)的核心技术。

本文通过简易电子表的设计实例,详细介绍了利用VHDL设计电路的流程和方法。

【关键词】EDA技术;VHDL语言;电子表【Abstr act】VHDL is a standard hardware d escriptio n lang uag e,it can describe the functio n of the hardw are circuitry,signal co nnectio n relatio ns and reg ular relatio ns,and it is the electro nic desig n automatio n(EDA)the core techno log y.Throug h simple ex amples of the desig n of electronic clo ck, details o n the use of VHDL circuit design pro cesses and m etho ds.【K ey wor ds】EDA technolog y;VHDL language;Electronic clo ckE E a:a11772经过对人工挖孔桩处理断桩实践,7d 后经小应变测试,该桩符合I 类桩标准,达到了预期的效果。

该桩处理时间前后约20d ,浇灌混凝土16m 3,比补桩方案节省大量的时间和费用。

该桩处理成功,主要做到了以下几点:⑴及时回填孔位,保证后续断桩处理顺利;⑵重视护壁混凝土的施工配合比,掺加了外加剂;⑶在孔壁渗漏水处理中合理应用防水材料及挖孔时及时调整施工方案;⑷前后工序衔接严密,准备工作充分。

四、防止类似事故发生的几点措施断桩是严重的质量事故。

必须在施工初期就彻底消除其隐患,同时又必须准备相应的对策,预防事故的发生或一旦发生事故及时采取补救措施。

断桩产生的原因有以下几个方面。

1.初灌未封底:桩底沉渣量过大,使初灌不能正常返浆,或导管距孔底太远,初灌量不够没有埋住导管。

一次清孔后,不符合要求时,要采取措施:如改善泥浆性能,延长清孔时间等进行清孔。

在下完钢筋笼后,再检查沉渣量,如沉渣量超过规范要求,应进行二次清孔。

导管底端距孔底高度依据桩径、隔水阀种类及大小而定,最高不超过0.5m 。

2.导管堵塞:浇注时间过长,上部混凝土已接近初凝,形成硬壳,而且随时间增长,泥浆中残渣将不断沉淀,从而加厚了积聚在混凝土表面的沉淀物,造成混凝土浇注极为困难而堵管,因此应尽可能提高混凝土浇注速度,开始浇混凝土时尽量积累大量混凝土,产生极大的冲击力可以克服泥浆阻力。

快速连续浇注,使混凝土和泥浆一直保持流动状态,可防导管堵塞;如突然浇注大量的混凝土导管内空气不能马上排出,可能带动导管拔出混凝土面。

混凝土的质量是堵塞导管的主要原因,必须把好质量关,混凝土和易性不好或离析使石子聚集在一起,从而流动性差,导致堵管。

导管使用后应及时冲洗,保证导管内壁干净光滑。

如发生堵管在导管上部可用钢筋疏通,在下部提取导管上下振击。

3.导管漏水:导管使用前须做密封试验,浇注前检查导管是否漏水、弯曲等缺陷,发现问题要及时更换。

在浇注过程中发现漏水应加快浇注速度,并加大混凝土埋深,使管内混凝土超出漏水处。

4.导管拔出混凝土面。

导管提漏有两种原因:①当导管堵塞时,一般采用上下提振法,使混凝土强行流出,但如果此时导管埋深很少,极易提漏;②因泥浆过稠,在测量导管埋深时,对混凝土浇注高度判断错误,而在卸管时多提,使导管提离混凝土面,也就产生提漏。

浇注混凝土过程中,测定已灌混凝土表面标高出现错误,导致导管埋深过小,出现拔脱提漏。

特别是浇注后期,易将泥浆中混合的坍土层误为混凝土表面。

因此,必须严格按照规程用规定的测深锤测量孔内混凝土表面高度,并认真核对,保证提升导管不出现失误。

如误将导管拔出混凝土面,必须及时处理。

孔内混凝土面高度较小时,终止浇注,重新成孔。

孔内混凝土面高度较高时,可以用二次导管插入法,将导管底端加底盖阀,插入混凝土面1.0m 左右,导管料斗内注满混凝土时,将导管提起约0.5m ,底盖阀脱掉,即可继续进行水下浇注混凝土施工。

由于要克服泥浆对导管的浮力,混凝土面较深时,不宜采用。

此方法使用时,必须由有经验的工程师现场指导,导管长度、吊预制混凝土球阀铁丝长度、铁丝抗拉强度、混凝土面实际位置等数据,必须在事先正确确定。

5.导管被混凝土埋住、卡死。

在浇注过程中,导管的埋置深度是一个重要的施工指标。

导管埋深过大,以及浇注时间过长,导致已浇混凝土流动性降低,从而增大混凝土与导管壁的摩擦力,加上导管采用已很落后而且提升阻力很大的法兰盘连接的导管,在提升时连接螺栓拉断或导管破裂而产生断桩。

因此钢筋笼主筋接头要焊平,导管法兰连接处罩以圆锥形白铁罩,底部与法兰大小一致,并在套管头上卡住,避免提导管时,法兰挂住钢筋笼。

导管插入混凝土中的深度应根据搅拌混凝土的质量、供应速度、浇注速度、孔内护壁泥浆状态来决定,一般情况下,以2-6m 为宜。

相关文档
最新文档