基于VHDL语言的秒表综合设计
基于VHDL的秒表
内容1、总体设计要求具有启动停止功能;计时器能显示0.01s的时间;计时器最长计时时间为24h;具有复位功能在任何情况下按复位键秒表无条件清零;2、系统功能描述本次课程设计通过VHDL做的秒表主要有以下的功能:(1)在下载到实验箱后,打开开始开关才能开始计时;(2)在开始开关打开后,能够通过另一个开关进行暂停;(3)再按下清零键后能够清零,并且是在任何条件下都能清零;(4)能够精确到0.01秒,更加精确的计时3、系统设计方案论述,画出顶层电路图及功能分割图,并说明之间的联系或功能。
先是将100进制计数器、60进制计数器、60进制计数器和24进制计数器连接,将100进制计数器的进位接到60进制计数器的CLK输入端上,然后将60进制的进位连接到另一个60进制的CLK输入端上,然后将已将连接进位的60进制计数器的几位连接到24进制计数器的输入端口CLK上,24进制的仅为端悬空,这就是秒表的主体。
当100进制计数器进位端口为1时,与之相连的60进制计数器开始工作,当进位为0时停止工作,剩余两个计数器的工作原理与之相同。
将100进制计数器、两个60进制计数器和24进制计数器的en端口相连并连接到input得输入端口上,并且将他们的cir连接到一起也连接到input 的输入端口上,这样就实现了暂停和清零的功能,并且秒表的精确度为0.01。
在100进制的输入端口处还剩下一个clk端口,将两个输入端口通过一个与门与之相连,其中一个接入clk信号,而另一个就可当做一个开关,实现开始的功能,并且能够暂停。
将100进制计数器、两个60进制的计数器和24进制计数器的输出端分别接到8选1的数据选择器的输入端上,并且按高低位接好,而八进制的选择功能是通过一个8进制的不管计数来实现的,所以在8选1的数据选择器的sel 输入端端口接到8进制计数器的输出端上,而八进制的输入端口上,通过两个输入端input,一个接扫描频率,另一个通过一个开关来控制8进制的工作,并且清零端接1使它的清零作用失效。
vhdl实现秒表
案例一秒表一、案例说明1.功能描述(1).设计一块用数码管显示的秒表。
(2).能够准确地计时并显示。
(3).开机显示00.00.00。
(4).用户可随时清零、暂停、计时。
(5).最大计时59分钟,最小精确到0.01秒。
2.可选器件EPM7128S、共阴极七段数码管、发光二极管、按键开关、电阻、电容。
二、硬件电路结构图数字显示的秒表总体框图如图所示:图带数字显示的秒表总体框图三、软件设计Library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity watch isport(sel: out std_logic_vector(6 downto 1);seg: out std_logic; --开始、停止计数。
reset: in std_logic);end watch;architecture behave of watch issignal num1:std_logic_vector(3 downto 0);signal num2:std_logic_vector(3 downto 0);signal num3:std_logic_vector(3 downto 0);signal num4:std_logic_vector(3 downto 0);signal num5:std_logic_vector(3 downto 0);signal num6:std_logic_vector(3 downto 0);signal num:std_logic_vector(3 downto 0);signal numlet:std_logic_vector(2 downto 0);signal count:std_logic_vector(17 downto 1);signal selsig:std_logic_vector(6 downto 1);signal segsig:std_logic_vector(7 downto 0);signal cp1:std_logic;signal cp3:std_logic;beginprocess(cp2) --分频。
电子秒表设计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语言的电子秒表设计
设计制作数码世界 P.108基于VHDL语言的电子秒表设计高皑琼 甘肃工业职业技术学院摘要:与其他硬件描述语言相比,VHDL语言抽象能力强,覆盖面广,具备更强的行为描述能力。
强大的行为描述能力是避开具体的器件结构,是设计大规模电子系统的重要保证。
EDA技术即电子设计自动化技术已经成为数字电子系统设计的主流。
本文在QuartusⅡ工作平上台,采用VHDL语言编程完成对电子秒表的行为描述,再经过EDA工具综合处理最终生成硬件系统,整个过程设计人员只需利用软件的方式就能完成对硬件电路的设计。
关键词;电子秒表 VHDL语言 EDA技术引言电子秒表在很多领域充当着重要的角色,尤其在各种比赛中对秒表的精度要求很高。
以往的电路多选用单元电路来实现,采用传统的“自底向上”设计方法,其设计主要依赖设计者的经验与技巧,这种方式设计成本高,效率低。
本设计采用EDA技术,以VHDL语言为系统逻辑描述,自动完成由软件描述系统到硬件电路的实现。
整个设计“自顶向下”完成功能模块的划分,各模块相对独立。
可以对各模块单独进行设计、调试和修改,极大地减少了设计人员的工作量,更提高了设计的灵活性和可靠性。
1 设计思路及模块划分1.1 设计思路秒表实际上是一个对标准脉冲信号(1HZ)进行计数的电路,能够精确反映计时时间。
在此过程中具备启动、暂停、复位等功能,使其真正具有实用功能。
秒表计时的最大范围为1小时,精度为0.01秒,当按下暂停按键后,由显示电路显示计时时间。
1.2 模块划分电子秒表的设计模块主要包括分频器、计数器电路、控制电路、报时电路和译码显示电路等。
其中,计时电路和控制电路是系统的主要部分,计时电路完成对秒脉冲信号的计数功能,而控制电路具有直接控制计数器的清零、启动计数、停止 3 种状态的功能。
(1)计数器模块主要完成对时钟信号的精确计时。
其实质是对有分频器输出的秒脉冲信号(频率为1HZ)进行计数,通过计数完成计时。
秒、分部分为60进制计数,即从0到59循环计数,计至59分59秒时归零。
vhdl秒表报告
实验:vhdl秒表设计报告一、实验目的:秒表的逻辑结构比较简单,它主要由、显示译码器、分频器、十进制计数器、六进制计数器组成。
秒表实现功能:计时范围60s。
可以用4个键(k0-k3)控制计数器实现清零,开始,暂停,结束功能。
清零键k0:当k0按下后,计数器清零,显示为0.开始键k1:k1按下后,开始计数暂停键k2:k2按下后,显示暂停,但计数器继续在行走。
结束键k3:k3按下后,计数器停止,显示最终的时间。
二、结构组成:1、一个十进制计数器:用来对秒时钟进行计数;2、一个六进制计数器:用来分别对十秒进行计数;3、分频率器:用来产生1hz的计数脉冲;4、状态控制器:对秒表各状态的控制。
设计为4个状态s1,s2,s3,s4.三、实验内容及步骤:1、用vhdl语言实现各小功能模块设计。
并仿真无误,生成模块符号。
2、设计顶层原理图文件。
3、综合编译并仿真,实现特定功能。
4、下载到硬件上,确保设计的正确。
四、实验源代码如下:1,分频器模块:功能:产生秒时钟。
原理图如下源代码vhdl语言如下:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity div isport(inclk:in std_logic;outclk:out std_logic:='0');end;architecture behave of div issignal temp:integer range 0 to 99999;signal internal:std_logic:='0';beginprocess(inclk)beginif inclk'event and inclk='1'thenif temp=10thentemp<=0;internal<=not internal;else temp<=temp+1;end if;outclk<=internal;end if;end process;end behave;2,十进制计数器模块原理图:十进制vhdl源码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt10 isport(clk,clr,en:in std_logic;q:buffer std_logic_vector(3 downto 0);c10:out std_logic);end;architecture behave of cnt10 isbeginprocess(clr,clk)beginif clr='0'then q<="0000";elsif clk'event and clk='1'thenif en='1'thenif q<9else q<="0000";end if;end if;end if;end process;process(q)beginif q="0000"then c10<='1';else c10<='0';end if;end process;end;3,六进制计数模块原理图源代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt6 isport(clk,clr,en:in std_logic;q:buffer std_logic_vector(2 downto 0);c6:out std_logic);end;architecture behave of cnt6 isbeginprocess(clr,clk)beginif clr='0'then q<="000";elsif clk'event and clk='1'thenif en='1'thenif q<5else q<="000";end if;end if;end if;end process;process(q)beginif q="000"then c6<='1';else c6<='0';end if;end process;end;4,十进制锁存原理图:代码:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity suo isport(inp:in std_logic_vector(3 downto 0);suo:in std_logic;--stop:in std_logic;clr:in std_logic;outp:out std_logic_vector(3 downto 0)); end;architecture behave of suo issignal temp:std_logic_vector(3 downto 0);signal temp1:std_logic_vector(3 downto 0); beginprocess(suo)beginif suo'event and suo='0'then temp<=inp;end if;end process;process(inp,clr)beginif clr='0' then outp<="0000";elsif suo='1' then outp<=inp;else outp<=temp;end if;end process;end behave;5,六进制锁存原理图:Vhdl语言:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity suo6 isport(inp:in std_logic_vector(2 downto 0);suo:in std_logic;clr:in std_logic;clk:in std_logic;outp:out std_logic_vector(3 downto 0)); end;architecture behave of suo6 issignal temp:std_logic_vector(3 downto 0); beginprocess(suo)beginif suo'event and suo='0'then temp<='0'&inp; --temp1<=temp;end if;end process;process(clr,clk)beginif clr='0' then outp<="0000";elsif clk'event and clk='1'thenif suo='1' then outp<='0'&inp;else outp<=temp;end if;end if;end process;end behave;6,状态机控制器原理图:Vhdl语言:library ieee;use ieee.std_logic_1164.all;entity key isport(clk:in std_logic;k:in std_logic_vector(3 downto 0);suo:out std_logic;clr:out std_logic;--stop:out std_logic;en:out std_logic);--_vector(2 downto 0)); end;architecture behave of key istype statetype is (s0,s1,s2,s3);signal state:statetype:=s0;beginprocess(clk)beginif clk'event and clk='1'thencase state iswhen s0=> if k(1)='0'then state <=s1;else state <=s0;end if;when s1=> if k(0)='0'then state <=s0;elsif k(2)='0' then state <=s2;elsif k(3)='0' then state <=s3;else state <=s1;end if;when s2=> if k(1)='0'then state <=s1;elsif k(3)='0' then state <=s3;else state <=s2;end if;when s3=> if k(0)='0'then state <=s0;else state <=s3;end if;when others=>null;end case;end if;end process;process(clk)beginif clk'event and clk='1'thencase state iswhen s0=> en<='0'; suo<='0'; clr<='0';when s1=> en<='1'; suo<='1'; clr<='1';when s2=> en<='1'; suo<='0'; clr<='1';when s3=> en<='0'; suo<='1'; clr<='1';when others=> null;end case;end if;end process;end;五,顶层原理图文件:六,仿真结果结果分析:k0为0时,清零初始化。
基于VHDL语言的FPGA秒表设计电子实验报告
4.1 任务要求.................................................................................................................................................... 23 4.2 设计思路.................................................................................................................................................... 23 4.3 原理框图.................................................................................................................................................... 24
3.3.1 建立项目工程................................................................................................................................... 13 3.3.2 行为仿真............................................................................................................................................ 14 3.3.3 建立顶层原理图............................................................................................................................... 16 3.3.4 综合..................................................................................................................................................... 19 3.3.5 布局布线............................................................................................................................................ 21 3.3.6 下载及硬件仿真............................................................................................................................... 21
基于verilog语言编程的数字秒表设计
数字秒表设计系别:电子通信工程系专业:电子信息工程班级:学号:姓名:数字秒表(基于verilong语言编程)课程设计一、设计要求用verilong语言编写程序,结合实际电路,设计一个4位LED数码显示“秒表”,显示时间为99.9~00.0秒,每秒自动减一,精度为0.1。
另设计一个“开始”按键和一个“复位”按键。
再增加一个“暂停”按键。
按键说明:按“开始”按键,开始计数,数码管显示从99.9开始每秒自动减一;按“复位”按键,系统复位,数码管显示99.9;按“暂停”按键,系统暂停计数,数码管显示当时的计数。
二、设计目的1、通过本次课程设计加深对verilong语言课程的全面认识、复习和掌握,对EPM7064芯片的应用达到进一步的了解。
2、掌握定时器、外部中断的设置和编程原理。
3、通过此次课程设计能够将软硬件结合起来,对程序进行编辑,调试。
使其能够通过电脑下载到芯片,正常工作。
4、实际操作Quartus II软件,复习巩固以前所学知识。
三、总体设计本秒表系统具有复位、暂停、秒表计时等功能。
clk为系统工作时钟,采用Altera DE2上的50M时钟信号,经过分频器产生秒表计时周期为0.01s的时钟,再经过计数器,分别对秒表的百分位、十分位、秒、秒十位、分、分十位进行计数。
onoff为启动/暂停控制信号,当它为0时,启动计时,当它为1时,计时暂停。
clr为复位信号,当该信号有效时,计数器和译码清零,此时数码管显示输出为00:00:00。
在总体电路图中,根据设计要求,需要两个输入控制信号onoff和clr。
由于开发板上除了拨动开关就是瞬时的按键开关,且按键开关平时都呈高电平,按一下为低电平。
故在实际测试时采用了拨动开关SW0来控制秒表的启动/暂停,通过KEY0来控制秒表的清零。
四、设计思路描述该实验要求进行计时并在数码管上显示时间,通过相关软件Quartus II编译,利用JTAG 下载电路到核心芯片,驱动硬件工作。
VHDL数字秒表设计
VHDL语言课程设计-秒表设计一、设计实验目的:在MAX+plusII软件平台上,熟练运用VHDL语言,完成数字时钟设计的软件编程、编译、综合、仿真,使用EDA实验箱,实现数字秒表的硬件功能。
二、设计实验说明及要求:1、数字秒表主要由:分频器、扫描显示译码器、一百进制计数器、六十进制计数器(或十进制计数器与6进制计数器)、十二进制计数器(或二十四进制计数器)电路组成。
在整个秒表中最关键的是如何获得一个精确的100H Z计时脉冲,除此之外,数字秒表需有清零控制端,以及启动控制端、保持保持,以便数字时钟能随意停止及启动。
2、数字秒表显示由时(12或24进制任选)、分(60进制)、秒(60进制)、百分之一秒(一百进制)组成,利用扫描显示译码电路在八个数码管显示。
3、能够完成清零、启动、保持(可以使用键盘或拨码开关置数)功能。
4、时、分、秒、百分之一秒显示准确。
三、我的设计思路:1、四个十进制计数器:用来分别对百分之一秒、十分之秒、秒和分进行计数;2、两个6进制计数器:用来分别对十秒和十分进行计数;3、一个24进制计数器,用来对小时进行计数;3、分频率器:用来产生100Hz的计数脉冲;4、显示译码器:完成对显示译码的控制。
四、设计过程:1.分频器:由10MHz变为100Hz,10MHz的周期是10的(-7)次方,而100Hz 的周期是10的(-2)次方,而且方波是高低相间,只有高电平有效,所以100Hz 的周期需要取一半,即0.02秒,这样算出的分频倍数就是50000分频器代码:将10MHz脉冲变成100Hz程序:library ieee;use ieee.std_logic_1164.all;entity fenpin isport(clr,clk: in bit;q: buffer bit);end fenpin;architecture a of fenpin issignal counter:integer range 0 to 49999;beginprocess(clr,clk)beginif (clk='1' and clk'event) thenif clr='1' thencounter<=0;elsif counter=49999 thencounter<=0;q<= not q;elsecounter<=counter+1;end if;end if;end process;end a;分频器的仿真图:2.十进制计数器:原理为加法计数器,从0加到9,计到10个数时由cout进位程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity c10 isport(clr,start,clk: in bit;daout: out std_logic_vector(3 downto 0)); end c10;,architecture a of c10 issignal temp:std_logic_vector(3 downto 0); begindaout<=temp;process(clk,clr)beginif clr='1' thentemp<="0000";cout<='0';elsif (clk'event and clk='1') thenif start='1' thenif temp>="1001" thentemp<="0000";cout<='1';elsetemp<=temp+1;cout<='0';end if;end if;end process;end a;十进制计数器仿真图:3.六进制计数器:原理为加法计数器,从0 加到5计到第六个数时由cout进位。
新实验四 VHDL数字秒表设计
11
采用双进程描述的带分频60进制计数器
12
采用双进程描述的带分频60进制计数器(续)
13
五、实验步骤
1. 通过QuartusII建立一个新项目; 2. 建立项目时选MAXII系列(family)的目标器件
26
然后单击start按钮,即开始配置/编程;
23
正在下载程序……
当下载窗口右上角progress显示出100%,表示下载成功;
观察LED的显示效果是否达到设计要求。
24
6、故障处理
若编程器自身有故障或者未正确连接,则不能编程 /配置,底部的信息栏会有红色字体的信息提示, 这时需要检查编程器的连接。
计算机,可编程逻辑器件实验板
2
三、PLD器件简述
可编程逻辑器件(Programmable Logic Devices, PLD),发展于20世纪70年代,属半定制集成电路;
使用PLD器件,借助EDA设计方法,可以方便、快速地 构建数字系统;
任何组合逻辑电路都可以用“与门-或门”二级电路实现; 任何时序逻辑电路都可以由组合逻辑电路加上存储元件
用逻辑电路控制8个LED灯,左边4个代表秒表计数 的十位,右边4个代表秒表计数的个位,在脉冲信号 CP的作用下,间接显示秒表的BCD数值;
7
LED灯表示数字秒表的状态示意图:
0秒
1秒
2秒 ………………
………………
9秒 10秒
19秒 20秒
59秒
……………… ………………
……………… ………………
进制的计数器进行级联构成,这种计数器也称为BCD计数 器; 采用VHDL分别描述10进制计数器和6进制计数器,当计数 值为59时,若再来一个时钟脉冲,计数器回到初值0重新 计数。 也可以直接描述60进制计数器,然后除10,得到的商为十 位,余数为个位。
基于VHDL的秒表设计以及在FPGA span3E上运行
是
rst 是系统复位信号标志,strt 是时钟clock模块是否继续计时的标志
否
否
(4)两个七段数码管的驱动
由秒表时钟运行产生的时间out_time,作为数据的输入,
高四位数字由led_b0显示,低四位数字由led_b1显示,
对系统时钟进行2^19倍分频,控制led_b0 和led_b1 的显示,以及对
out_time高四位和低四位的选择,输送到四位的数组reg_data
对reg_data进行译码,得到八位的字符组放在led_seg里
再对led_srck进行8分频,控制led_seg数据逐个赋给led_data
对系统时钟进行64倍的分频,输出移位信号led_srck,移位工作频率约为1M 对led_srck进行32倍分频,输出存储信号led_rck,
使能信号led_oe 始终有效
(5)按键去抖动设计
对按键信号使用两个D触发器进行延时2个时钟周期,达到去抖动的目的对按键信号进行三个时钟周期的延时,来辅助使按键在放开的时候有效
(2)复位之后进入停止计时状态,此时数码管显示秒
(4)第二次按下并松开start后计时停止(5)按下并松开select后,转换到显示分钟
(7)第三次按下并松开select后,转换到显示秒(8)由下图可以看出led_b0,led_b1的显示转换
2、教师批改学生实验报告时间应在学生提交实验报告时间后10日内。
基于VHDL的秒表
内容1、总体设计要求具有启动停止功能;计时器能显示0.01s的时间;计时器最长计时时间为24h;具有复位功能在任何情况下按复位键秒表无条件清零;2、系统功能描述本次课程设计通过VHDL做的秒表主要有以下的功能:(1)在下载到实验箱后,打开开始开关才能开始计时;(2)在开始开关打开后,能够通过另一个开关进行暂停;(3)再按下清零键后能够清零,并且是在任何条件下都能清零;(4)能够精确到0.01秒,更加精确的计时3、系统设计方案论述,画出顶层电路图及功能分割图,并说明之间的联系或功能。
先是将100进制计数器、60进制计数器、60进制计数器和24进制计数器连接,将100进制计数器的进位接到60进制计数器的CLK输入端上,然后将60进制的进位连接到另一个60进制的CLK输入端上,然后将已将连接进位的60进制计数器的几位连接到24进制计数器的输入端口CLK上,24进制的仅为端悬空,这就是秒表的主体。
当100进制计数器进位端口为1时,与之相连的60进制计数器开始工作,当进位为0时停止工作,剩余两个计数器的工作原理与之相同。
将100进制计数器、两个60进制计数器和24进制计数器的en端口相连并连接到input得输入端口上,并且将他们的cir连接到一起也连接到input 的输入端口上,这样就实现了暂停和清零的功能,并且秒表的精确度为0.01。
在100进制的输入端口处还剩下一个clk端口,将两个输入端口通过一个与门与之相连,其中一个接入clk信号,而另一个就可当做一个开关,实现开始的功能,并且能够暂停。
将100进制计数器、两个60进制的计数器和24进制计数器的输出端分别接到8选1的数据选择器的输入端上,并且按高低位接好,而八进制的选择功能是通过一个8进制的不管计数来实现的,所以在8选1的数据选择器的sel 输入端端口接到8进制计数器的输出端上,而八进制的输入端口上,通过两个输入端input,一个接扫描频率,另一个通过一个开关来控制8进制的工作,并且清零端接1使它的清零作用失效。
VHDL课程设计--数字秒表
基于VHDL语言的数字秒表实现041020421夏进1510301班2013-5-1基于VHDL语言的数字秒表实现041020421 夏进 1510301班1 设计方案1.1 系统功能要求设计一块数字秒表,能够精确反映计时时间,并完成复位、计时功能。
秒表计时的最大范围为1小时,精度为0.01秒,并可显示计时时间的分、秒、0.1秒等度量。
( 1) 具有秒表系统功能要求显示功能, 用6个数码管分别显示分、秒、0.01秒; 计时范围为00: 00: 00~ 59: 59:99。
( 2) 计时精度是0.01s;( 3) 具有启/ 停开关, 复位开关。
1. 2 总体框图根据系统设计要求, 系统的底层设计主要由六十进制计数器模块、二十四进制计数器模块、分频模块、LED显示模块组成。
系统顶层设计图如图所示:图中左边为三个输入信号en,clk,reset;分为启/ 停开关,时钟信号和复位开关。
主要模块有:模60计数器(count60),模100计数器(count100),分频器(clk_div),复位控制(control),译码器(yima),防抖模块(fdou),状态变换模块(change)。
右边是六个LED显示输出信号。
2 模块功能设计由模60计数器模块与模100计数器模块进行计数;实验室仪器可产生标准的1kHz的时钟信号,通过分频器模块产生所需的100Hz的时钟信号;复位模块可进行计数器复位操作;译码器是为了将四位二进制信号转换为LED所需的七位二进制编码;防抖模块用于消除用户按键时的抖动消除,为方便仿真,此处原始时钟信号3周期以上可产生信号;状态变换模块是为了用户按键后信号的变换及保持。
2. 1 模60计数器该模块部分VHDL 源程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY count60 ISPORT( en,Reset,clk: in STD_LOGIC;qa: out STD_LOGIC_VECTOR(3 DOWNTO 0);qb: out STD_LOGIC_VECTOR(3 DOWNTO 0);rco: OUT STD_LOGIC);END count60;ARCHITECTURE a OF count60 ISBEGINprocess(clk)variable tma: STD_LOGIC_VECTOR(3 DOWNTO 0);variable tmb: STD_LOGIC_VECTOR(3 DOWNTO 0);beginIf Reset ='0'then tma:="0000"; tmb:="0000";elsif clk'event and clk='1' thenif en='1' thenrco<=tmb(2)and tmb(0)and tma(3)and tma(0);if tma="1001" then tma:="0000";if tmb="0101" then tmb:="0000";else tmb:=tmb+1;end if;else tma:=tma+1;end if;end if;end if;qa<=tma;qb<=tmb;end process;END a;2. 2 模100计数器该模块部分VHDL 源程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY count100 ISPORT( en,Reset,clk: in STD_LOGIC;qa: out STD_LOGIC_VECTOR(3 DOWNTO 0);qb: out STD_LOGIC_VECTOR(3 DOWNTO 0);rco: OUT STD_LOGIC);END count100;ARCHITECTURE a OF count100 ISBEGINprocess(clk)variable tma: STD_LOGIC_VECTOR(3 DOWNTO 0);variable tmb: STD_LOGIC_VECTOR(3 DOWNTO 0);beginIf Reset ='0'then tma:="0000"; tmb:="0000";elsif clk'event and clk='1' thenif en='1' thenrco<=tmb(3)and tmb(0)and tma(3)and tma(0);if tma="1001" then tma:="0000";if tmb="1001" then tmb:="0000";else tmb:=tmb+1;end if;else tma:=tma+1;end if;end if;end if;qa<=tma;qb<=tmb;end process;END a;2. 3 分频器模块该模块部分VHDL 源程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY clk_div ISPORT(clk :IN STD_LOGIC;clk_out :OUT STD_LOGIC);END clk_div;ARCHITECTURE rtl OF clk_div ISSIGNAL clk_temp :STD_LOGIC;BEGINPROCESS(clk)VARIABLE counter: INTEGER RANGE 0 TO 15; BEGINIF (clk'EVENT AND clk='1') THENIF (counter = 9) THENCounter := 0;Clk_out <= '1';ELSECounter :=counter +1 ;Clk_out <= '0';END IF;END IF;END PROCESS;END rtl;2. 4 复位控制该模块部分VHDL 源程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY control ISPORT( CLK,RST:in std_logic;CLK_OUT:out std_logic);END control;ARCHITECTURE behav OF control ISsignal clk_data:std_logic;SIGNAL CNT : INTEGER := 0;BEGINPROCESS(CLK)BEGINIF RST = '0' THEN CNT<=0 ;ELSIF CLK'EVENT AND CLK='1' THENIF CNT=2 THEN clk_data<=NOT clk_data;CNT<=0;ELSE CNT<=CNT+1;END IF;END IF;CLK_OUT<=clk_data;END PROCESS;END behav;2. 5 译码器该模块部分VHDL 源程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY yima ISPORT( num:in STD_LOGIC_VECTOR(3 downto 0);led:out STD_LOGIC_VECTOR(6 downto 0));END yima ;ARCHITECTURE a OF yima ISBEGINprocess(num)begincase num iswhen"0000"=>led<="0111111";when"0001"=>led<="0000110";when"0010"=>led<="1011011";when"0011"=>led<="1001111";when"0100"=>led<="1100110";when"0101"=>led<="1101101";when"0110"=>led<="1111101";when"0111"=>led<="0100111";when"1000"=>led<="1111111";when"1001"=>led<="1101111";when others=>led<="0000000";end case;end process;END a;2. 6 防抖模块该模块部分VHDL 源程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY fdou ISPORT(CLK,DIN:IN STD_LOGIC;DOUT:OUT STD_LOGIC);END ENTITY fdou;ARCHITECTURE ARC OF fdou ISSIGNAL CP:STD_LOGIC;SIGNAL JSQ:INTEGER RANGE 0 TO 3;BEGINPROCESS(CLK)BEGINIF (CLK' EVENT AND CLK= '1' ) THEN IF DIN='1' THENIF JSQ=3 THENJSQ<=JSQ;ELSEJSQ<=JSQ+1;END IF;IF JSQ=1 THENCP<='1';ELSECP<='0';END IF;ELSEJSQ<=0;END IF;END IF;DOUT<=CP;END PROCESS;END ARC ;2. 7 状态变换模块该模块部分VHDL 源程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY change ISPORT( clk_in,clk:IN STD_LOGIC;clk_out:OUT STD_LOGIC);END ENTITY change;ARCHITECTURE a OF change ISSIGNAL cp:STD_LOGIC;BEGINPROCESS(CLK)BEGINIF (CLK' EVENT AND CLK= '1' ) THEN IF (clk_in ='1') THENcp<='0';ELSEcp<='1';END IF;END IF;clk_out<=CP;END PROCESS;END a ;3仿真波形及分析各部分模块完成后, 用Quartus 对程序编译、仿真、得到的仿真波形,各模块仿真波形及顶层仿真波形如下:3.1模60计数器模块仿真clk:时钟信号rst:复位信号低电平清零en:置数端低电平不让它继续计数qb、qa:分别为输出数的十位个位,qb取值范围为0-5,qa取值范围为0-9rco:进位信号,当qb=5,qa=9, rco=0时,clk上升沿来到后,qb=0, qa=0, rco=1;当qb=0,qa=0, rco=1时,clk上升沿来到后,qb=0, qa=1, rco=03.2模100计数器模块仿真clk:时钟信号cst:复位信号低电平清零en:置数端低电平不让它继续计数qb、qa:分别为输出数的十位个位,qb取值范围为0-9,qa取值范围为0-9rco:进位信号,当qb=9,qa=9, rco=0时,clk上升沿来到后,qb=0, qa=0, rco=1;当qb=0,qa=0, rco=1时,clk上升沿来到后,qb=0, qa=1, rco=03.3分频器模块仿真因时钟脉冲(为1khz)通过分频器分频后频率(为100hz)。
VHDL课程设计--数字秒表
基于VHDL语言的数字秒表实现2013-5-1基于VHDL语言的数字秒表实现1 设计方案1.1 系统功能要求设计一块数字秒表,能够精确反映计时时间,并完成复位、计时功能。
秒表计时的最大范围为1小时,精度为0.01秒,并可显示计时时间的分、秒、0.1秒等度量。
( 1) 具有秒表系统功能要求显示功能, 用6个数码管分别显示分、秒、0.01秒; 计时范围为00: 00: 00~ 59: 59:99。
( 2) 计时精度是0.01s;( 3) 具有启/ 停开关, 复位开关。
1. 2 总体框图根据系统设计要求, 系统的底层设计主要由六十进制计数器模块、二十四进制计数器模块、分频模块、LED显示模块组成。
系统顶层设计图如图所示:图中左边为三个输入信号en,clk,reset;分为启/ 停开关,时钟信号和复位开关。
主要模块有:模60计数器(count60),模100计数器(count100),分频器(clk_div),复位控制(control),译码器(yima),防抖模块(fdou),状态变换模块(change)。
右边是六个LED显示输出信号。
2 模块功能设计由模60计数器模块与模100计数器模块进行计数;实验室仪器可产生标准的1kHz的时钟信号,通过分频器模块产生所需的100Hz的时钟信号;复位模块可进行计数器复位操作;译码器是为了将四位二进制信号转换为LED所需的七位二进制编码;防抖模块用于消除用户按键时的抖动消除,为方便仿真,此处原始时钟信号3周期以上可产生信号;状态变换模块是为了用户按键后信号的变换及保持。
2. 1 模60计数器该模块部分VHDL 源程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY count60 ISPORT( en,Reset,clk: in STD_LOGIC;qa: out STD_LOGIC_VECTOR(3 DOWNTO 0);qb: out STD_LOGIC_VECTOR(3 DOWNTO 0);rco: OUT STD_LOGIC);END count60;ARCHITECTURE a OF count60 ISBEGINprocess(clk)variable tma: STD_LOGIC_VECTOR(3 DOWNTO 0);variable tmb: STD_LOGIC_VECTOR(3 DOWNTO 0);beginIf Reset ='0'then tma:="0000"; tmb:="0000";elsif clk'event and clk='1' thenif en='1' thenrco<=tmb(2)and tmb(0)and tma(3)and tma(0);if tma="1001" then tma:="0000";if tmb="0101" then tmb:="0000";else tmb:=tmb+1;end if;else tma:=tma+1;end if;end if;end if;qa<=tma;qb<=tmb;end process;END a;2. 2 模100计数器该模块部分VHDL 源程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY count100 ISPORT( en,Reset,clk: in STD_LOGIC;qa: out STD_LOGIC_VECTOR(3 DOWNTO 0);qb: out STD_LOGIC_VECTOR(3 DOWNTO 0);rco: OUT STD_LOGIC);END count100;ARCHITECTURE a OF count100 ISBEGINprocess(clk)variable tma: STD_LOGIC_VECTOR(3 DOWNTO 0);variable tmb: STD_LOGIC_VECTOR(3 DOWNTO 0);beginIf Reset ='0'then tma:="0000"; tmb:="0000";elsif clk'event and clk='1' thenif en='1' thenrco<=tmb(3)and tmb(0)and tma(3)and tma(0);if tma="1001" then tma:="0000";if tmb="1001" then tmb:="0000";else tmb:=tmb+1;end if;else tma:=tma+1;end if;end if;end if;qa<=tma;qb<=tmb;end process;END a;2. 3 分频器模块该模块部分VHDL 源程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY clk_div ISPORT(clk :IN STD_LOGIC;clk_out :OUT STD_LOGIC);END clk_div;ARCHITECTURE rtl OF clk_div ISSIGNAL clk_temp :STD_LOGIC;BEGINPROCESS(clk)VARIABLE counter: INTEGER RANGE 0 TO 15; BEGINIF (clk'EVENT AND clk='1') THENIF (counter = 9) THENCounter := 0;Clk_out <= '1';ELSECounter :=counter +1 ;Clk_out <= '0';END IF;END IF;END PROCESS;END rtl;2. 4 复位控制该模块部分VHDL 源程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY control ISPORT( CLK,RST:in std_logic;CLK_OUT:out std_logic);END control;ARCHITECTURE behav OF control ISsignal clk_data:std_logic;SIGNAL CNT : INTEGER := 0;BEGINPROCESS(CLK)BEGINIF RST = '0' THEN CNT<=0 ;ELSIF CLK'EVENT AND CLK='1' THENIF CNT=2 THEN clk_data<=NOT clk_data;CNT<=0;ELSE CNT<=CNT+1;END IF;END IF;CLK_OUT<=clk_data;END PROCESS;END behav;2. 5 译码器该模块部分VHDL 源程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY yima ISPORT( num:in STD_LOGIC_VECTOR(3 downto 0);led:out STD_LOGIC_VECTOR(6 downto 0));END yima ;ARCHITECTURE a OF yima ISBEGINprocess(num)begincase num iswhen"0000"=>led<="0111111";when"0001"=>led<="0000110";when"0010"=>led<="1011011";when"0011"=>led<="1001111";when"0100"=>led<="1100110";when"0101"=>led<="1101101";when"0110"=>led<="1111101";when"0111"=>led<="0100111";when"1000"=>led<="1111111";when"1001"=>led<="1101111";when others=>led<="0000000";end case;end process;END a;2. 6 防抖模块该模块部分VHDL 源程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY fdou ISPORT(CLK,DIN:IN STD_LOGIC;DOUT:OUT STD_LOGIC);END ENTITY fdou;ARCHITECTURE ARC OF fdou ISSIGNAL CP:STD_LOGIC;SIGNAL JSQ:INTEGER RANGE 0 TO 3;BEGINPROCESS(CLK)BEGINIF (CLK' EVENT AND CLK= '1' ) THEN IF DIN='1' THENIF JSQ=3 THENJSQ<=JSQ;ELSEJSQ<=JSQ+1;END IF;IF JSQ=1 THENCP<='1';ELSECP<='0';END IF;ELSEJSQ<=0;END IF;END IF;DOUT<=CP;END PROCESS;END ARC ;2. 7 状态变换模块该模块部分VHDL 源程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY change ISPORT( clk_in,clk:IN STD_LOGIC;clk_out:OUT STD_LOGIC);END ENTITY change;ARCHITECTURE a OF change ISSIGNAL cp:STD_LOGIC;BEGINPROCESS(CLK)BEGINIF (CLK' EVENT AND CLK= '1' ) THEN IF (clk_in ='1') THENcp<='0';ELSEcp<='1';END IF;END IF;clk_out<=CP;END PROCESS;END a ;3仿真波形及分析各部分模块完成后, 用Quartus 对程序编译、仿真、得到的仿真波形,各模块仿真波形及顶层仿真波形如下:3.1模60计数器模块仿真clk:时钟信号rst:复位信号低电平清零en:置数端低电平不让它继续计数qb、qa:分别为输出数的十位个位,qb取值范围为0-5,qa取值范围为0-9rco:进位信号,当qb=5,qa=9, rco=0时,clk上升沿来到后,qb=0, qa=0, rco=1;当qb=0,qa=0, rco=1时,clk上升沿来到后,qb=0, qa=1, rco=03.2模100计数器模块仿真clk:时钟信号cst:复位信号低电平清零en:置数端低电平不让它继续计数qb、qa:分别为输出数的十位个位,qb取值范围为0-9,qa取值范围为0-9rco:进位信号,当qb=9,qa=9, rco=0时,clk上升沿来到后,qb=0, qa=0, rco=1;当qb=0,qa=0, rco=1时,clk上升沿来到后,qb=0, qa=1, rco=03.3分频器模块仿真因时钟脉冲(为1khz)通过分频器分频后频率(为100hz)。
VHDL-数字秒表设计
通达学院2017/2018学年第一学期课程设计实验报告模块名称VHDL课程设计专业学生班级学生学号学生姓名指导教师目录一、课程设计目的与要求 (1)1.1 课程设计目的 (1)1.2 基本要求 (1)二、设计方案--数字秒表的设计 (1)2.1 设计功能 (1)2.2 秒表基本原理及设计方法 (2)2.3 数字秒表设计原理 (2)三、开发环境 (3)四、模块结构 (4)4.1 数字秒表RTL级电路 (4)4.2 计时器模块 (6)4.3 取数模块 (8)4.4 编码模块 (9)4.5 数码管显示控制模块 (13)4.6 数码管地址选择模块 (15)五、设计仿真和实验 (16)5.1 计时器模块仿真 (16)5.2 秒表仿真 (17)5.3 pin引脚接口图 (18)5.4 实验结果图 (18)六、总结与体会 (20)6.1 错误分析 (20)6.2 心得体会 (20)七、参考文献 (21)一、课程设计目的与要求1.1 课程设计目的《EDA 技术综合设计与实践》(注:EDA 即电子设计自动化,Electronics Design Automation)是继《模拟电子技术基础》、《数字电子技术基础》、《电子技术基础实验》、《EDA》等课程后,电子类等专业学生在电子技术实验技能方面综合性质的实验训练课程,是电子技术基础的一个部分,其目的和任务是通过一周的时间,让学生掌握EDA 的基本方法,熟悉一种EDA 软件(Quartus II),并能利用EDA 软件设计一个电子技术综合问题,并在实验板上成功下载,为以后进行工程实际问题的研究打下设计基础。
1.2 基本要求(1)通过课程设计使学生能熟练掌握一种EDA 软件(Quartus II)的使用方法,能熟练进行设计输入、编译、管脚分配、下载等过程。
(2)通过课程设计使学生能利用EDA 软件(Quartus II)进行至少一个电子技术综合问题的设计(内容可由老师指定或自由选择),设计输入采用VerilogHDL 硬件描述语言输入法。
VHDL课程设计--数字秒表
基于VHDL语言的数字秒表实现2013-5-1基于VHDL语言的数字秒表实现1 设计方案1.1 系统功能要求设计一块数字秒表,能够精确反映计时时间,并完成复位、计时功能。
秒表计时的最大范围为1小时,精度为0.01秒,并可显示计时时间的分、秒、0.1秒等度量。
( 1) 具有秒表系统功能要求显示功能, 用6个数码管分别显示分、秒、0.01秒; 计时范围为00: 00: 00~ 59: 59:99。
( 2) 计时精度是0.01s;( 3) 具有启/ 停开关, 复位开关。
1. 2 总体框图根据系统设计要求, 系统的底层设计主要由六十进制计数器模块、二十四进制计数器模块、分频模块、LED显示模块组成。
系统顶层设计图如图所示:图中左边为三个输入信号en,clk,reset;分为启/ 停开关,时钟信号和复位开关。
主要模块有:模60计数器(count60),模100计数器(count100),分频器(clk_div),复位控制(control),译码器(yima),防抖模块(fdou),状态变换模块(change)。
右边是六个LED显示输出信号。
2 模块功能设计由模60计数器模块与模100计数器模块进行计数;实验室仪器可产生标准的1kHz的时钟信号,通过分频器模块产生所需的100Hz的时钟信号;复位模块可进行计数器复位操作;译码器是为了将四位二进制信号转换为LED所需的七位二进制编码;防抖模块用于消除用户按键时的抖动消除,为方便仿真,此处原始时钟信号3周期以上可产生信号;状态变换模块是为了用户按键后信号的变换及保持。
2. 1 模60计数器该模块部分VHDL 源程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY count60 ISPORT( en,Reset,clk: in STD_LOGIC;qa: out STD_LOGIC_VECTOR(3 DOWNTO 0);qb: out STD_LOGIC_VECTOR(3 DOWNTO 0);rco: OUT STD_LOGIC);END count60;ARCHITECTURE a OF count60 ISBEGINprocess(clk)variable tma: STD_LOGIC_VECTOR(3 DOWNTO 0);variable tmb: STD_LOGIC_VECTOR(3 DOWNTO 0);beginIf Reset ='0'then tma:="0000"; tmb:="0000";elsif clk'event and clk='1' thenif en='1' thenrco<=tmb(2)and tmb(0)and tma(3)and tma(0);if tma="1001" then tma:="0000";if tmb="0101" then tmb:="0000";else tmb:=tmb+1;end if;else tma:=tma+1;end if;end if;end if;qa<=tma;qb<=tmb;end process;END a;2. 2 模100计数器该模块部分VHDL 源程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY count100 ISPORT( en,Reset,clk: in STD_LOGIC;qa: out STD_LOGIC_VECTOR(3 DOWNTO 0);qb: out STD_LOGIC_VECTOR(3 DOWNTO 0);rco: OUT STD_LOGIC);END count100;ARCHITECTURE a OF count100 ISBEGINprocess(clk)variable tma: STD_LOGIC_VECTOR(3 DOWNTO 0);variable tmb: STD_LOGIC_VECTOR(3 DOWNTO 0);beginIf Reset ='0'then tma:="0000"; tmb:="0000";elsif clk'event and clk='1' thenif en='1' thenrco<=tmb(3)and tmb(0)and tma(3)and tma(0);if tma="1001" then tma:="0000";if tmb="1001" then tmb:="0000";else tmb:=tmb+1;end if;else tma:=tma+1;end if;end if;end if;qa<=tma;qb<=tmb;end process;END a;2. 3 分频器模块该模块部分VHDL 源程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY clk_div ISPORT(clk :IN STD_LOGIC;clk_out :OUT STD_LOGIC);END clk_div;ARCHITECTURE rtl OF clk_div ISSIGNAL clk_temp :STD_LOGIC;BEGINPROCESS(clk)VARIABLE counter: INTEGER RANGE 0 TO 15; BEGINIF (clk'EVENT AND clk='1') THENIF (counter = 9) THENCounter := 0;Clk_out <= '1';ELSECounter :=counter +1 ;Clk_out <= '0';END IF;END IF;END PROCESS;END rtl;2. 4 复位控制该模块部分VHDL 源程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY control ISPORT( CLK,RST:in std_logic;CLK_OUT:out std_logic);END control;ARCHITECTURE behav OF control ISsignal clk_data:std_logic;SIGNAL CNT : INTEGER := 0;BEGINPROCESS(CLK)BEGINIF RST = '0' THEN CNT<=0 ;ELSIF CLK'EVENT AND CLK='1' THENIF CNT=2 THEN clk_data<=NOT clk_data;CNT<=0;ELSE CNT<=CNT+1;END IF;END IF;CLK_OUT<=clk_data;END PROCESS;END behav;2. 5 译码器该模块部分VHDL 源程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY yima ISPORT( num:in STD_LOGIC_VECTOR(3 downto 0);led:out STD_LOGIC_VECTOR(6 downto 0));END yima ;ARCHITECTURE a OF yima ISBEGINprocess(num)begincase num iswhen"0000"=>led<="0111111";when"0001"=>led<="0000110";when"0010"=>led<="1011011";when"0011"=>led<="1001111";when"0100"=>led<="1100110";when"0101"=>led<="1101101";when"0110"=>led<="1111101";when"0111"=>led<="0100111";when"1000"=>led<="1111111";when"1001"=>led<="1101111";when others=>led<="0000000";end case;end process;END a;2. 6 防抖模块该模块部分VHDL 源程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY fdou ISPORT(CLK,DIN:IN STD_LOGIC;DOUT:OUT STD_LOGIC);END ENTITY fdou;ARCHITECTURE ARC OF fdou ISSIGNAL CP:STD_LOGIC;SIGNAL JSQ:INTEGER RANGE 0 TO 3;BEGINPROCESS(CLK)BEGINIF (CLK' EVENT AND CLK= '1' ) THEN IF DIN='1' THENIF JSQ=3 THENJSQ<=JSQ;ELSEJSQ<=JSQ+1;END IF;IF JSQ=1 THENCP<='1';ELSECP<='0';END IF;ELSEJSQ<=0;END IF;END IF;DOUT<=CP;END PROCESS;END ARC ;2. 7 状态变换模块该模块部分VHDL 源程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY change ISPORT( clk_in,clk:IN STD_LOGIC;clk_out:OUT STD_LOGIC);END ENTITY change;ARCHITECTURE a OF change ISSIGNAL cp:STD_LOGIC;BEGINPROCESS(CLK)BEGINIF (CLK' EVENT AND CLK= '1' ) THEN IF (clk_in ='1') THENcp<='0';ELSEcp<='1';END IF;END IF;clk_out<=CP;END PROCESS;END a ;3仿真波形及分析各部分模块完成后, 用Quartus 对程序编译、仿真、得到的仿真波形,各模块仿真波形及顶层仿真波形如下:3.1模60计数器模块仿真clk:时钟信号rst:复位信号低电平清零en:置数端低电平不让它继续计数qb、qa:分别为输出数的十位个位,qb取值范围为0-5,qa取值范围为0-9rco:进位信号,当qb=5,qa=9, rco=0时,clk上升沿来到后,qb=0, qa=0, rco=1;当qb=0,qa=0, rco=1时,clk上升沿来到后,qb=0, qa=1, rco=03.2模100计数器模块仿真clk:时钟信号cst:复位信号低电平清零en:置数端低电平不让它继续计数qb、qa:分别为输出数的十位个位,qb取值范围为0-9,qa取值范围为0-9rco:进位信号,当qb=9,qa=9, rco=0时,clk上升沿来到后,qb=0, qa=0, rco=1;当qb=0,qa=0, rco=1时,clk上升沿来到后,qb=0, qa=1, rco=03.3分频器模块仿真因时钟脉冲(为1khz)通过分频器分频后频率(为100hz)。
VHDL语言数字秒表设计
北华航天工业学院《EDA技术综合设计》课程设计报告报告题目:数字秒表设计作者所在系部:电子工程系作者所在专业:自动化专业作者所在班级:作者姓名:指导教师姓名:完成时间:2011年12月2日内容摘要应用VHDL语言设计数字系统,很多设计工作可以在计算机上完成,从而缩短了数字系统的开发时间。
我们尝试利用VHDL为开发工具设计数字秒表。
秒表的逻辑结构较简单,它主要由十进制计数器、六进制计数器、数据选择器、和显示译码器等组成。
在整个秒表中最关键的是如何获得一个精确的100HZ计时脉冲,除此之外,整个秒表还需有一个启动信号和一个清零信号,以便秒表能随意停止及启动。
秒表有共有6个输出显示,分别为百分之一秒、十分之一秒、秒、十秒、分、十分,所以共有6个计数器与之相对应,6个计数器的输出全都为BCD码输出,这样便与同显示译码器连接。
关键词: VHDL,数字钟,MAX+plusII,时序仿真图。
目录一、实验目的 (1)二、硬件要求 (1)三、方案论证 (1)四、模块说明 (1)1.六进制计数器 (1)2.十进制计数器 (2)3.蜂鸣器 (3)4.译码器 (4)5.控制器 (5)6.顶层文件 (8)五、整体连接图 (9)六、实验步骤 (10)七、实验结果 (10)八、实验总结 (10)九、参考文献 (10)课程设计任务书一、实验目的学习使用VHDL语言,以及EDA芯片的下载仿真二、硬件要求(1)主芯片EPF10K10LC84-4。
(2)蜂鸣器。
(3)8位八段扫描共阴极数码显示管。
(4)二个按键开关(清零,开始)。
三、方案论证系统组成框图四、模块说明时钟的设计共化分为6个模块:六进制计数器(count6),十进制计数器(count10),报警电路(bs),扫描电路(seltime),译码电路(ym)。
下面具体分析各个模块的原理、内容和功能。
(1)六进制计数器(count6)能够实现6进制循环计数,带有清零端stop、开始端start、时钟信号端clk、其文本语言(文件名:count6.vhd)为底层文本,图1为六进制计数器的仿真波形图。
数字秒表的设计 的vhdl语言
数字秒表的VHDL语言的程序设计本秒表计时器用于体育竞赛及各种要求有较精确时的各领域。
此计时器是用一块专用的芯片,用VHDL语言描述的。
它除开关、时钟和显示功能以外,它还包括1/100s计时器所有的控制和定时功能,其体积小,携带方便。
计时器的设计功能:(1)精度应大于1/100s(2)计时器的最长计时时间为1小时在一般的短时间计时应用中,1小时应该足够了。
为此需要一个6位显示器,显示最长时间为59分59.99秒。
(3)设置复位和启/停开关复位开关用来使计时器清0,并作好清0准备。
启/停开关的使用方法与传统的机械计时器相同,即按一下启/停开关,启动计时器开始计时,再按一下启/停开关计时终止。
复位开关可以在任何情况下使用,即使在计时过程中,只要按一下复位开关,计时进程应立即终止,并对计时器清零。
设计方案:为了便于描述,将整个计时控制芯片分成5个子模块:键输入子模块(keyin),时钟产生子模块(clkgen),控制子模块(ctrl),定时计数子模块(cntclk)和显示子模块(disp)。
芯片设计:各模块程序及生成的符号文件如下:keyin模块设计该模块的描述是为了产生单个复位脉冲res和启停脉冲stst.整个功能模块用两个进程语句描述。
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity keyin isport(reset,start_stop,clk :in std_logic;res,stst :out std_logic);end entity;architecture a of keyin issignal res0,res1,stst0,stst1 :std_logic;beginprocess(clk)beginif(clk'event and clk='0')thenres1<=res0;res0<=reset;stst1<=stst0;stst0<=start_stop;end if;end process;process(res0,res1,stst0,stst1)beginres<=clk and res0 and (not res1);stst<=clk and stst0 and (not stst1);end process;end a;clkgen模块设计该模块的功能是产生100Hz的计时允许信号cntclk和25Hz的宽度为1ms的键输入时钟信号keycek.LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY cnt10 ISPORT (reset,en,clk:IN STD_LOGIC;carry:OUT STD_LOGIC;q :OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END CNT10;ARCHITECTURE rtl OF cnt10 ISSIGNAL qs :STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL ca :STD_LOGIC;BEGINPROCESS(clk)BEGINIF(clk'EVENT AND clk='1')THENIF(reset='1')THENqs<="0000";ELSIF(en='1') THENIF(qs="1001") THENqs<= "0000";ca<='0';ELSIF(qs="1000") THENqs<= qs+1;ca<='1';ELSELIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY cnt4 ISPORT (reset,en,clk:IN STD_LOGIC;carry :OUT STD_LOGIC;q :OUT STD_LOGIC_VECTOR(1 DOWNTO 0));END CNT4;ARCHITECTURE rtl OF cnt4 ISSIGNAL qs :STD_LOGIC_VECTOR(1 DOWNTO 0);SIGNAL ca :STD_LOGIC;BEGINPROCESS(clk)BEGINIF(clk'EVENT AND clk='1')THENIF(reset='1')THENqs<="00";ELSIF (EN='1')THENIF(qs="11") THENqs<= "00";ca<='0';ELSIF(qs="10") THENqs<= qs+1;ca<='1';ELSEqs<=qs+1;ca<='0';END IF;END IF;END IF;END PROCESS;PROCESS(ca)BEGINq<=qs;carry<=ca AND en;END PROCESS;END rtl;ctrl子模块该模块的功能是产生计时计数模块的计数允许信号cntenlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;entity ctrl isport(sysres,res,stst,cntclk:in std_ulogic;centen:out std_ulogic);end ctrl;architecture rtl of ctrl issignal enb1:std_ulogic;beginprocess(stst,sysres,res)beginif(sysres='1' or res='1') thenenb1<='0';elsif(stst'event and stst='1') thenenb1<=not enb1;end if;end process;centen<=enb1 and cntclk;end rtl;cntblk模块设计该模块的功能是实现计时计数,它由四个十进制计数器和两个六进制计数器串结而成。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
设 计 报 告课程名称 _______ 设计题目_______ 指导老师_______ 学 生_______ 学 号 ___现代电子技术综合实验 数字式秒表设计与实现目录1 引言……..........................................................................................1.1课程设计的内容及要求..................................................................2 VHDL简介……..............................................................................2.1硬件描述语言——VHDL……......................................................2.1.1 VHDL语言的特点…….............................................................2.1.2 VHDL语言的设计流程…….....................................................3 秒表设计过程……............................................................................3.1原理框图……..................................................................................3.2设计思路模块化…..........................................................................3.3模块的功能简述……......................................................................3.3.1分频器….....................................................................................3.3.2计数器…….................................................................................3.3.3数据锁存器……..........................................................................3.3.4显示译码模块…..........................................................................3.3.5控制模块……..............................................................................3.3.6按键消抖模块……......................................................................3.3.7顶层文件……..............................................................................4 模块电路仿真……................................................................................4.1 分频器4.2计数器4.2.1 模6计数器4.2.2 模10计数器5 实验总结……..................................................................................... 5.1实验结论……...................................................................................5.2心得总结……...................................................................................6 参考文献……..........................................................................................7 附录(各模块源程序)…...........................................................................1.引言:在当今信息化社会中,集成电路和计算机应用得到高速发展,。
它在人们日常生活已必不可少,大多数电子产品多是由计算机电路组成。
本文目的就是基于计算机电路利用VHDL 语言设计出数字秒表。
秒表在很多领域充当了重要的角色,在不同的场合和条件下对于秒表的精度和功能是不同的,有些科学实验的要求甚至能达到纳秒级别。
1.1课题内容要求:本课题目标是掌握VHDL开发FPGA的一般流程,重点是电子秒表的设计。
该设计以VHDL作为硬件开发语言,以ISE作为软件开发平台,准确地实现了秒表计数、清零、暂停等功能,并使用ModelSim仿真软件对VHDL程序实现了电路仿真,完成了综合布局布线,最终将程序下载到芯片Spartan-3A,并通过板子上相应模块验证实验的正确性。
除此以外,利用课余时间学习数字频率计的硬件实现方法,即用MultiSim仿真等。
秒表设计的具体要求:计时范围是00’00’’00到59’59’’99。
有两个按钮开关start/stop和split/reset,控制秒表的启动、停止、分段和复位:秒表已经被复位的情况下,按下state/stop键,秒表开始计时。
在秒表正常运行的情况下,如果按下state/reset则秒表暂停计时;再次按下该键,秒表继续计时。
在秒表正常运行下,如果按下split/reset,显示停止在按键时的时间,但秒表仍然在计时;再次按下该键,秒表恢复正常显示。
在秒表暂停计时的情况下,按下split/reset,秒表复位归零。
2.VHDL简介:2.1 VHDL特点:(1)作为HDL的第一个国际标准,VHDL具有很强的可移植性。
(2)具有丰富的模拟仿真语句和库函数,随时可对设计进行仿真模拟,因而能将设计中的错误消除在电路系统装配之前,在设计早期就能检查设计系统功能的可行性,有很强的预测能力。
(3)VHDL有良好的可读性,接近高级语言,容易理解。
(4)系统设计与硬件结构无关,方便了工艺的转换,也不会因工艺变化而使描述过时。
(5)支持模块化设计,可将大规模设计项目分解成若干个小项目,还可以把已有的设计项目作为一个模块调用。
(6)对于用VHDL完成的一个确定设计,可以利用EDA工具进行逻辑综合和优化,并能自动地把VHDL描述转变成门电路级网表文件。
(7)设计灵活,修改方便,同时也便于设计结果的交流、保存和重用,产品开发速度快,成本低。
2.2 VHDL设计流程:(1文本编辑:用任何文本编辑器都可以进行,也可以用专用的HDL编辑环境。
(2)功能仿真:将文件调入HDL仿真软件进行功能仿真,检查逻辑功能是否正确。
(3)逻辑综合:将源文件调入逻辑综合软件进行综合,即把语言综合成最简的布尔表达式。
(4)时序仿真:需要利用在布局布线中获得的精确参数,用仿真软件验证电路的时序。
(5)器件编程:对使用的元件可以进行编程。
3.秒表设计:3.1 原理框图:3.2 设计模块化:由以上原理图可实现秒表设计的模块化,具体而言,可以分为6个模块:分频器:对晶体振荡器产生的时钟信号进行分频,产生时间基准信号。
计数器:对时间基准脉冲进行计数,完成计时功能。
注:其中包含了一个1kHz到100Hz的分频器,合并在一个模块里。
数据锁存器:锁存数据,使显示保持锁定。
控制器:控制计数器的运行、暂停以及复位;产生锁存器的是能信号。
扫描显示的控制电路:包括扫描计数器、和7段译码器;控制8个数码管以扫描方式显示计时结果。
按键消抖电路:消除按键输入信号抖动的影响,输出单脉冲。
每个模块调试后可通过顶层文件共同构成秒表的总电路。
3.3 模块的功能简述:3.3.1 分频器:秒表设计中共需要两种分频器。
一种是通过模为48000的计数器进位输出实现将晶体振荡器产生的48MHz的时钟信号转化为1KHz的时钟信号作为基准,方便下面各个模块的取用。
另一种是通过模为10的计数器进位输出将上述1KHz的时钟信号转化为100Hz 的时钟信号,作为计数器的时钟输入。
注:实际设计中,第二种分频器被划归到计数器模块,实现与原理图的匹配。
3.3.2 计数器:计数器功能是通过输入的时钟信号实现计数功能,在秒表设计里,共需要4个模10计数器和2个模6计数器。
具体而言,其中2个模10计数器和2个模6计数器分别级联产生2个模60计数器,实现了到秒和到分的进位。
而其他的两个模10计数器则是2位模10计数。
3.3.3 数据锁存器:它是一个控制端控制的组合逻辑电路,实现了暂时锁存数据的功能。
3.3.4 显示译码模块:显示译码管外联部分示意图:内部原理图:功能是:从锁存器接入数据,通过扫描计数的输出来控制多路复用的数据选择端口和三八译码器的输入端口,使其数据变化相同。
38译码器的输出进行位选,bcd的输出进行段选使其能在显示译码管显示完整数据。
注:本实验电路板使用共阳极,即低电平有效。
3.3.5 控制模块:功能是产生实现秒表的暂停or开始,锁存or清零功能。
具体而言产生三个输出控制信号:清零,计数,锁存。
实现方法:Mealy机或者是Moore机方式,区别是有一个状态的不同。
实现原理图:3.3.6 按键消抖模块:功能是消除按键输入信号的影响,输出单脉冲。
方便实现两个按键对秒表的瞬时控制。
3.3.7 顶层文件:实现各个模块之间的连接匹配,同时分配实际电路板的引脚。
4. 模块电路仿真:4.1 分频器:4.2 计数器:4.2.1 模6计数器:4.2.2 模10计数器:5. 实验总结:5.1 实验结果:经过测试,可以由FPGA板上的key-7,key-8控制秒表实现开始暂停锁存清零的相应功能,其它功能基本符合要求。