电子科技大学FPGA实验秒表报告

上传人:回**** 文档编号:202763841 上传时间:2023-04-23 格式:DOC 页数:43 大小:836.50KB
收藏 版权申诉 举报 下载
电子科技大学FPGA实验秒表报告_第1页
第1页 / 共43页
电子科技大学FPGA实验秒表报告_第2页
第2页 / 共43页
电子科技大学FPGA实验秒表报告_第3页
第3页 / 共43页
资源描述:

《电子科技大学FPGA实验秒表报告》由会员分享,可在线阅读,更多相关《电子科技大学FPGA实验秒表报告(43页珍藏版)》请在装配图网上搜索。

1、 电 子 科 技 大 学 《现代电子技术综合实验报告》 姓名:  #* 学号:********** 学院:电子工程学院 指引教师:皇晓辉 摘要: 本次实验,是基于FPGA的秒表设计。秒表是00:00:00计数到59:59:99,使用VHDL语言编写秒表的程序,并设计有开始/暂停以及保持/恢复的功能。本实验运用ISE进行设计输入和综合,在modelsim软件上实现了波形的仿真,将程序下载到芯片Spartan-3A and 3AN上,并在七段数码管上实现了秒表的显示,在FPGA的按键上实现对秒表的控制功能。 核心字:FPGA,VHDL,秒

2、表  目录 第一章 引言-------------------------------------------------4 第二章 设计背景--------------------------------------------5 2.1  FPGA概念-------------------------------------------------------------------------5   2.2   FPGA设计流程----------------------------------------

3、---------------------------6 2.3 VHDL语言简介-------------------------------------------------------------------7     2.4   VHDL语言的优势----------------------------------------------------------------8 第三章 程序设计--------------------------------------------9 3.1 各模块设计思路-----------------------------

4、---------------9 第四章 仿真------------------------------------------------25 4.1 仿真软件使用阐明--------------------------------------------14 4.2 状态仿真图--------------------------------------------------16 道谢-------------------------------------------------------20 附录(各程序代码)-------------------------------

5、--------21 控制模块代码----------------------------------------------------21 显示模块代码----------------------------------------------------22 所存模块代码----------------------------------------------------24   计数器模块代码--------------------------------------------------24  消抖模块代码--------------------

6、--------------------------------26   分频模块代码----------------------------------------------------27  Top总代码------------------------------------------------------28    引脚连接--------------------------------------------------------34   第一章 引言 本文重要任务是针对设计的规定,基于FPGA运用硬件描述语言VHDL完毕数字秒表的设

7、计,通过仿真,分析,综合并最后下载到FPGA里实现。 本次实验是我们第一次接触VHDL语言。设计秒表的过程并不难,通过本次实验让我们对FPGA有了一定的概念,掌握了部分VHDL语言的编写和仿真的环节。整个过程我们不仅学会了程序的编写,同步还清晰了如何设计一种高效的电路,这在数字电路的学习上让我们提高了一种高度。 这次实验对此后电路的设计和VHDL的学习是一种良好的开端。 第二章 设计背景 2.1 FPGA的概念   FPGA,即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基本上进一步发展的产物。

8、它是作为专用集成电路(ASIC)领域中的一种半定制电路而浮现的,既解决了定制电路的局限性,又克服了原有可编程器件门电路数有限的缺陷。 以硬件描述语言(Verilog或VHDL)所完毕的电路设计,可以通过简朴的综合与布局,迅速的烧录至 FPGA 上进行测试,是现代 IC设计验证的技术主流。这些可编辑元件可以被用来实现某些基本的逻辑门电路或者更复杂某些的组合功能例如解码器或数学方程式。在大多数的FPGA里面,这些可编辑的元件里也涉及记忆元件例如触发器或者其她更加完整的记忆块。 FPGA采用了逻辑单元阵列LCA这样一种概念,内部涉及可配备逻辑模块CLB、输出输入模块IOB和内部连线三个部分。 F

9、PGA是可编程器件,与老式逻辑电路和门阵列(如PAL,GAL及CPLD器件)相比,FPGA具有不同的构造。FPGA运用小型查找表(16×1RAM)来实现组合逻辑,每个查找表连接到一种D触发器的输入端,触发器再来驱动其她逻辑电路或驱动I/O,由此构成了既可实现组合逻辑功能又可实现时序逻辑功能的基本逻辑单元模块,这些模块间运用金属连线互相连接或连接到I/O模块。FPGA的逻辑是通过向内部静态存储单元加载编程数据来实现的,存储在存储器单元中的值决定了逻辑单元的逻辑功能以及各模块之间或模块与I/O间的联接方式,并最后决定了FPGA所能实现的功能,FPGA容许无限次的编程。 2.2 FPGA设

10、计流程 对于目的器件为FPGA和CPLD的HDL设计,其工程设计的基本流程如图 2-1所示。现具体阐明如下 图 2-1 EDA设计流程 1、文本编辑 用任何文本编辑器都可以进行,一般VHDL文献保存为vhd文献,Verilog文献保存为v文献。 2、使用编译工具编译源文献 HDL的编译器有诸多,ACTIVE公司,MODELSIM公司,SYNPLICITY公司,SYNOPSYS公司,VERIBEST公司等均有自己的编译器。 3、逻辑综合 将源文献调入逻辑综合软件进行综合。综合的目的是在于将设计的源文献由语言转换为实际的电路。但是此时还没有在芯片中形成真正的电路。这一步的最后目

11、的是生成门电路级的网表(Netlist)。 4、布局、布线 将第3步生成的网表文献调入PLD厂家提供的软件中进行布线,即把设计好的逻辑安放到CPLD/FPGA内。这一步的目的是生成用于下载(编程Programming)的编程文献。在这一步,将用到第3步生成的网表,并根据CPLD/FPGA厂商的器件容量,构造等进行布局、布线。这就仿佛在设计PCB时的布局布线同样。先将各个设计中的门根据网表的内容和器件的构造放在器件的特定部位。然后,在根据网表中提供的各门的连接,把各个门的输入输出连接起来。最后,生成一种供编程的文献。这一步同步还会加某些时序信息(Timing)到你的设计项目中去,以便于你做后

12、仿真。 5、后仿真 运用在布局布线中获得的精确参数,用仿真软件验证电路的时序。(也叫布局布线仿真或时序仿真)。这一步重要是为了拟定你的设计在通过布局布线之后,是不是还满足你的设计规定。 6、编程,下载 如果前几步都没有发生错误,并且符合设计规定,这一步就可以将由适配器等产生的配备或下载文献通过编程器或下载电缆下载到目的芯片中。 7、硬件测试 硬件测试的目的是为了在更真实的环境中检查HDL设计的运营状况,特别是对于HDL程序设计上不是十分规范,语义上具有一定歧义的程序。 2.3 VHDL语言简介 VHDL全名Very-High-Speed Integrated Circuit

13、 HardwareDescription Language,诞生于1982年。VHDL翻译成中文就是超高速集成电路硬件描述语言。VHDL重要用于描述数字系统的构造,行为,功能和接口。除了具有许多具有硬件特性的语句外,VHDL的语言形式、描述风格以及语法是十分类似于一般的计算机高档语言。VHDL的程序构造特点是将一项工程设计,或称设计实体(可以是一种元件,一种电路模块或一种系统)提成外部和内部,即设计实体的内部功能和算法完毕部分。在对一种设计实体定义了外部界面后,一旦其内部开发完毕后,其她的设计就可以直接调用这个实体。这种将设计实体提成内外部分的概念是VHDL系统设计的基本点。目前,VHDL和V

14、ERILOG作为IEEE的工业原则硬件描述语言,又得到众多EDA公司的支持,在电子工程领域,已成为事实上的通用硬件描述语言。 2.4 VHDL语言的优势    严格地讲,VHDL是一种用来描述数字逻辑系统的“编程语言”。它通过对硬件行为的直接描述来实现对硬件的物理实现,代表了当今硬件设计的发展方向。VHDL是为了满足逻辑设计过程中的多种需求而设计的。  第一,它是可以用来描述逻辑设计的构造,例如逻辑设计中有多少个子逻辑,而这些子逻辑又是如何连接的。除此之外,VHDL并不十分关怀一种具体逻辑依托何种方式实现,而是把开发者的精力集中到逻辑所实现的功能上。   第二,VHDL采用类似

15、高档语言的语句格式完毕对硬件行为的描述,具有更强的模块化能力,并拥有良好的可读性以及程序的移植性。此外,VHDL淡化状态机,与或体现式等早一代硬件描述语言中的元素,用更类似于高档语言的体现式取代。这些也是为什么把VHDL称为“编程语言”的因素。 第三,VHDL给出逻辑的模拟与调试为设计工作提供了最大的空间。VHDL调试的过程是相称灵活的:一方面可以使用老式的调试措施,例如合用老式的波形鼓励或编写测试向量;另一方面,可以使用某些VHDL原码调试器,此类调试器可以大大加快VHDL程序调试的速度,由于它可以像调试软件同样单步跟踪调试每一条语句,并且可以设立断点,观测内部变量等。这些功能是老式的调试

16、仿真措施所不具有的。这种调试器比较着名的有Aldec的Active-HDL。拥有高效率的生成代码,可以节省大量的资源。甚至不必编写任何测试向量便可以进行源代码级的调试。并且,设计者可以非常以便地比较多种方案之间的可行性及其优劣而不需做任何实际的电路实验。  VHDL语言在编程时要更加规范,程序构造要适合整个系统的硬件构造,要符合各模块的信号时序关系,以及数据流的走向。VHDL语言的设计格式更是面向具体的硬件对象的语言。VHDL的语言特点重要有:   (1)更加类似软件上的高档语言,具有更强的模块化能力并拥有良好的可读性以及程序的移植性;   (2)淡化状态机,与或体现式等早一代硬件

17、描述语言中的元素,用更类似于高档语言的体现式取代; (3)拥有高效率的生成代码,可以节省大量的资源。 第三章 程序设计                3.1各模块设计思路 3.1.1 秒表设计原理图 3.1.2 3.1.2.1 按键消抖 按键消抖电路应用计数器的分频功能以及与门电路,将按下瞬间激起的高电平延迟一种周期以致抵消,从而达到消抖的作用。当按键产生抖动时,keyin产生高电平,为了使keyout为低电平,将keyin与一种与门相连,使与门的另一端在抖动产生的一种周期内输入为0,因此在这个周期内,与门的输出恒为0,并将输出端接入keyout

18、,从而实现消抖的功能。 if rising_edge(clk_1k) then ﻩif cnt_2 = 3 then ﻩﻩ k3 <= '1'; ﻩelse ﻩ k3 <= '0'; ﻩ cnt_2 <= cnt_2+1; ﻩﻩﻩend if; 该局是运用计数器的分频功能; key_out2 <= not k3 and k4; 该局是运用与门的功能;从而实现消抖的。 通过计数器与状态寄存,使得按下 key1(start_stop)、key2(split_reset),这两个按键时,产生一种脉冲信号,实现了两个功能键的控制功能(源程序见附录1)。 3

19、.1.2.2 状态控制器  状态控制器 一方面通过一种2位的向量定义了4个状态:正常、暂停、清零、锁存即(normal、halt、reset、lock),以及按下两个按键后来,每个状态的转换,状态机有三个输出,根据状态器的变化与变化,三个输出分别是计数使能carry_in,清零使能rst,锁存使能latch。其分别接到计数器的第一位的进位输入,计数器的清零端,以及锁存器的使能端,以达到控制计数器与锁存器,功能的目的。(源程序见附录1) 2.扫描控制及显示译码的电路框图   由于实验板上的显示电路为下图 由于其只应用了一根总线,大大节省了I/O口的数量,从而大大减少

20、了制作成本,因此其显示译码的电路图应当如下 当有时钟作用于扫描模块时,不断对8个数码管进行扫描,例如,q2q1q0为001时,把c1的数据赋给bcd2led进行显示。 3.1.2.3 时钟分频器      时钟分频器应用计数器的模数的不同对晶振源进行分频,例如将48mhz分为1000hz,选用一种48000模的计数器对其进行分频,并应用480000模的计数器将48mhz分为100hz。 FPGA自带的时钟为48MHZ晶振源,但是秒表的基准时钟应当是100HZ的时钟,并且为了使得8位的数码管可以持续显示,我们也需要另一种1KHZ的时钟,对位选信号进行扫频以实现持续显示,因此分频

21、器使非常核心的。 对输入的48MHZ进行一下操作:要实现N分频,则输入源时钟信号clk每通过N/2个上升沿,则对输出信号去反。 (分频器源文献见附录1)。 3.1.2.4  计数器   秒表一共需要六个计数器,2个模6的计数器,4个模10的计数器,通过if语句先判断与否有进位输入,当时钟上升沿到来时计数一次,再通过if语句判断计数与否到1001(模六计数器为0101),计数记到1001时则自动归零,此外尚有对清零位的判断,若清零位有效则计数器始终保持为0。各个计数器之间,通过将低位的进位输出赋值给高位的进位输入,从而达到计数器之间的级联,10毫秒位的计数器每当100HZ时

22、钟上升沿到来时计一次数,从而实现了秒表的整体计数功能。(源程序见附录1) 3.1.2.5 锁存器 锁存器分为透明锁存器和不透明锁存器,本设计中,我们应用的是透明选择器,如下图,即当使能端en有效时,锁存器为“通”,即直接将计数器输入的数据传播出去,当时能端en无效时,锁存器进入锁存功能,此时停止计数,并将目前状态输出。(源程序见附录1) 3.1.3.6 显示模块 a.位选扫描     当1KHZ的时钟上升沿到来时,位选计数器加一,从而实现循环显示,由于扫描速度不久,人眼无法辨别,从视觉上秒表实际是持续显示。程序如下:    process(clk_1khz)  

23、begin   if rising_edge (clk_1khz) then   s<=s+1;      end if;   end process; choose<=s; b.数码管译码 将每一位的BCD码输出接到译码器上,使其能让七段数码管能显示相应的十进制下的数字,从而实现的译码器的显示。(源程序见附录1)         第四章 仿真 4.1 仿真软件使用阐明 4.1.1 ModelSim简介 ModelSim支持PC和UNIX平台,是单一内核支持VHDL和Verilog混合仿

24、真的HDL语言仿真器。ModelSim不仅可以完毕设计的功能验证,也可实现逻辑综合后的门级仿真以及布局布线后的功能与时序验证。 ModelSim完全支持VHDL和Verilog原则;采用直接编辑技术,大大提高HDL编译和仿真速度。还可以运用ModelSim调用设计文献进行仿真分析。在调试环境中,设计者可以通过ModelSim的迅速调试环节以及对多种信号的监控功能(无论信号处在VHDL层,还是处在混合语言层)使仿真的执行过程形象直观化,协助设计者及时发现漏洞,缩短设计周期。 ModelSim最大的特点是其强大的调试功能:先进的数据流窗口,可以迅速追踪到生产不定或者错误状态的因素;性能分析工具

25、协助分析性能瓶颈,加速仿真;代码覆盖率检查保证测试的完备;多种模式的波形比较功能;先进的 SignalSpy功能,可以以便地访问VHDL或者VHDL和Verilog混合设计中的底层信号;支持加密IP;可以实现与Matlab的Simulink的联合仿真。 4.1.2 ISE环境中ModelSim的使用 ModelSim是一种独立的仿真工具,它在工作的时候并不需要其她软件的协助,在Xilinx公司的ISE集成开发环境中给ModelSim仿真软件预留了接口,通过这个接口可以从ISE集成环境中直接启动ModelSim工具进行仿真。这个过程一般会给初学者一种错觉,觉得ISE集成环境和ModelSi

26、m工具是联合工作的,其实ISE并没有集成ModelSim工具,只是预留了软件接口。为了阐明ModelSim的顾客接口,将使用从ISE集成开发环境中直接启动ModelSim仿真工具的措施。使用此种措施启动ModelSim工具需要具有3个条件:第一,启动ISE集成开发环境并建立了一种FPGA/CPLD的工程项目;第二,添加设计源代码并且编译通过;第三,使用ISE中的TestFixture或者TestBenchWaveform工具为目前的设计提供一种测试模板(Testbench),并且在测试模板中添加设计鼓励。只有上述条件具有之后才可以从ISE的目前资源操作窗中直接启动ModelSim工具并运营仿真

27、,如下使用ISE自带的一种例子加以阐明。 在ISE中直接启动ModelSim 1、在Windows操作系统中选择[开始]/[程序]/[Xilinx ISE 10.1]/[Project Navigator]命令,启动ISE集成开发环境。 2、在ISE主窗口中选择[File]/[Open Example]命令,弹出[Open Example]对话框,如图所示,然后在[Select an Example Project]栏目中选择“goldcode-ver-217”,在[Destination Directory]中选择项目寄存的目录,单击OK按钮打开例子程序。 3、在资源

28、管理窗口(Source in Project)中的模块视图(Model View)中选中的测试文献“testbench.tf”,在相应的目前资源操作窗口(Process for Current Source)中将会浮现与Modelsim仿真器有关的行为仿真(Simulate Behavioral Verilog Model),翻译后仿真(Simulate Post-Map Verilog Model)和布局布线后仿真(Simulate Post-Place & Route Verilog Model)等4个不同的操作选项,如图所示: 4、双击[Simulate Behavioral Mo

29、del]操作选项,将启动Modelsim仿真器。 5、在Modelsim主窗口中选择[View]/[All]命令,将显示所有的窗口。 在目前资源操作窗口中选择任意一种操作选项都可以启动相应阶段的仿真操作,如果相应阶段的仿真文献不存在,那么集成环境将自动生成仿真文献。 4.2 状态仿真图 A.计数器 模6计数器: 模10计数器: B.分频器. C锁存器 D消抖 E控制 F显示 道谢

30、本次实验,从一开始什么都不懂到最后自己完毕设计,要多多感谢刘教师的细心解说。刘教师从最基本的数电知识的复习到VHDL语言的渗入,对我完毕本次设计的完毕功不可没。这对我后来学习电路设计和语言编程增添了诸多信心, 附录1: 1、顶层源文献 library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity top is   Port ( clk_top : in  STD_LOGIC;     key1 :

31、 in  STD_LOGIC;    key2 : in  STD_LOGIC; ncso : out  STD_LOGIC; displayo : out  STD_LOGIC_VECTOR (6 downto 0);        chooseo : out STD_LOGIC_VECTOR (2 downto 0)); end top; architecture Behavioral of top is signal a: std_logic; signal b: std_logic; signa

32、l r: std_logic; signal c: std_logic; signal c12:std_logic; signal c23:std_logic; signal c34:std_logic; signal c45:std_logic; signal c56:std_logic; signal la: std_logic; signal one: std_logic; signal two: std_logic; signal four: std_logic_vector(3 downto 0); signal six: std_logic_vector(3

33、downto 0); signal w: std_logic_vector(3 downto 0); signal e: std_logic_vector(3 downto 0); signal n: std_logic_vector(3 downto 0); signal i: std_logic_vector(3 downto 0); signal result1: std_logic_vector(3 downto 0); signal result2: std_logic_vector(3 downto 0); signal result3: std_logic_vect

34、or(3 downto 0); signal result4: std_logic_vector(3 downto 0); signal result5: std_logic_vector(3 downto 0); signal result6: std_logic_vector(3 downto 0); ﻩCOMPONENT control PORT( ﻩﻩclk1000Hz : IN std_logic; start_stop : IN std_logic; ﻩﻩsplit_reset : IN std_logic;      ﻩ rst : OUT

35、 std_logic; ﻩcarry_in : OUT std_logic; ﻩlatch : OUT std_logic ﻩﻩ); END COMPONENT; ﻩ COMPONENT count6 PORT( ﻩ clk : IN std_logic; ﻩ rst : IN std_logic; ﻩﻩcarry_in : IN std_logic; ﻩcarry_out:out std_logic; count : OUT std_logic_vector(3 downto 0) ﻩ ); END COMPONENT; ﻩCOMPONE

36、NT count PORT( clk : IN std_logic; ﻩ rst : IN std_logic; ﻩ carry_in : IN std_logic; carry_out:out std_logic;ﻩﻩ count : OUT std_logic_vector(3 downto 0) ﻩﻩ); ﻩEND COMPONENT; ﻩ ﻩCOMPONENT display ﻩPORT( ﻩ clk1000hz : IN std_logic; ﻩﻩd1 : IN std_logic_vector(3 downto 0); d2 : IN

37、 std_logic_vector(3 downto 0); ﻩd3 : IN std_logic_vector(3 downto 0); ﻩd4 : IN std_logic_vector(3 downto 0); ﻩd5 : IN std_logic_vector(3 downto 0); ﻩd6 : IN std_logic_vector(3 downto 0);     ﻩ choose : OUT std_logic_vector(2 downto 0); ncs : OUT std_logic; ﻩ display7 : OUT std_log

38、ic_vector(6 downto 0) ﻩ); ﻩEND COMPONENT; ﻩ ﻩCOMPONENT f_div PORT( ﻩ clk : IN std_logic;   ﻩ clk100hz : OUT std_logic; ﻩ clk1000hz : OUT std_logic ﻩ ); END COMPONENT; COMPONENT suocun PORT( ﻩﻩlatch : IN std_logic; ﻩ count1 : IN std_logic_vector(3 downto 0); count2 : 

39、IN std_logic_vector(3 downto 0); count3 : IN std_logic_vector(3 downto 0); count4 : IN std_logic_vector(3 downto 0); count5 : IN std_logic_vector(3 downto 0); ﻩﻩcount6 : IN std_logic_vector(3 downto 0);       d1 : OUT std_logic_vector(3 downto 0); d2 : OUT std_logic_vector(3 down

40、to 0); ﻩd3 : OUT std_logic_vector(3 downto 0); ﻩﻩd4 : OUT std_logic_vector(3 downto 0); d5 : OUT std_logic_vector(3 downto 0); ﻩﻩd6 : OUT std_logic_vector(3 downto 0) ﻩ ); ﻩEND COMPONENT; ﻩ ﻩCOMPONENT xiaodou PORT( ﻩﻩclk_1k : IN std_logic; ﻩﻩkey_in1 : IN std_logic; ﻩ key_in2 : IN std

41、_logic;   ﻩ key_out1 : OUT std_logic; ﻩ key_out2 : OUT std_logic ﻩ); ﻩEND COMPONENT; begin Inst_control: control PORT MAP( ﻩﻩclk1000Hz => a , ﻩstart_stop => one , ﻩ split_reset => two , ﻩﻩrst => r , ﻩﻩcarry_in => c , ﻩ latch => la ﻩ); u1: count PORT MAP( ﻩﻩclk =>

42、b , rst => r , carry_in => c , carry_out=>c12, ﻩﻩcount => w ); ﻩu2: count PORT MAP( ﻩﻩclk => b , ﻩrst => r , carry_in =>c12 , ﻩcarry_out=>c23, ﻩ count => e ); ﻩ u3: count PORT MAP( ﻩ clk => b , ﻩﻩrst => r , ﻩ carry_in =>c23 , ﻩﻩcarry_out=>c34, ﻩ count => n );

43、u4: count6 PORT MAP( ﻩﻩclk => b , ﻩﻩrst => r , ﻩ carry_in => c34 , ﻩcarry_out=>c45, ﻩﻩcount => four ﻩ); u5: count PORT MAP( ﻩ clk => b , rst => r , ﻩﻩcarry_in =>c45 , ﻩﻩcarry_out=>c56, ﻩcount => i ); u6: count6 PORT MAP( ﻩclk => b , ﻩrst => r , ﻩﻩcarry_in => c56 , ﻩ c

44、arry_out=> open, count => six ﻩ);   Inst_display: display PORT MAP( ﻩﻩclk1000hz => a , ﻩd1 => result1 , ﻩd2 => result2 , ﻩﻩd3 => result3 , ﻩﻩd4 => result4, ﻩ d5 => result5 , ﻩd6 => result6 , choose => chooseo, ﻩﻩncs => ncso, ﻩdisplay7 => displayo ); ﻩ ﻩInst_f_div: f_div

45、PORT MAP( clk => clk_top , clk100hz => b , ﻩclk1000hz => a ﻩ); ﻩInst_suocun: suocun PORT MAP( ﻩﻩlatch => la , ﻩd1 => result1 , ﻩ d2 => result2 , d3 => result3, d4 => result4, ﻩd5 => result5, ﻩﻩd6 => result6, ﻩﻩcount1 => w , ﻩﻩcount2 => e , ﻩﻩcount3 => n , ﻩcount4 => four,

46、 count5 => i , ﻩ count6 => six ﻩ); Inst_xiaodou: xiaodou PORT MAP( ﻩﻩclk_1k => a , ﻩkey_in1 => key1 , ﻩ key_in2 => key2 , ﻩkey_out1 => one , ﻩkey_out2 => two ﻩ); end Behavioral; 2、控制电路 library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LO

47、GIC_UNSIGNED.ALL; entity control is Port ( clk1000hz : in STD_LOGIC;    start_stop : in STD_LOGIC;     split_reset : in STD_LOGIC;     rst : out  STD_LOGIC;       carry_in : out STD_LOGIC;      latch : out  STD_LOGIC); end control; architecture B

48、ehavioral of control is    type states is(reset,normal,halt,lock); signal c_state,n_state:states; signal control_sig:std_logic_vector(1 downto 0); begin ﻩ control_sig<=start_stop & split_reset; ﻩprocess(control_sig,c_state) begin ﻩcase c_state is ﻩﻩwhen reset=> case control_sig is  ﻩ

49、 ﻩﻩﻩﻩ when "10" =>n_state<=normal; ﻩﻩﻩﻩﻩ when others =>n_state<=reset; ﻩﻩ end case; ﻩﻩﻩwhen normal=>case control_sig is ﻩ ﻩ ﻩ when"10"=>n_state<=halt; ﻩﻩ ﻩwhen"01"=>n_state<=lock; ﻩﻩ ﻩ when others=>n_state<=normal; ﻩ ﻩﻩﻩﻩﻩend case; ﻩﻩwhen halt=> case control_sig is  ﻩ ﻩ

50、 when "10" =>n_state<=normal; ﻩ ﻩﻩﻩﻩwhen"01"=>n_state<=reset; ﻩ ﻩ ﻩ when others =>n_state<=halt; ﻩﻩﻩﻩﻩﻩ end case; ﻩﻩwhen lock=>case control_sig is ﻩ ﻩ ﻩ when"01"=>n_state<=normal; ﻩﻩﻩﻩﻩ ﻩwhen others=>n_state<=lock; ﻩﻩ ﻩﻩﻩ end case; ﻩﻩwhen others =>n_state<=reset; ﻩﻩend case; ﻩend

51、process; ﻩ ﻩprocess(clk1000Hz) begin ﻩif rising_edge(clk1000Hz) then ﻩﻩ c_state<=n_state; ﻩ end if; end process; ﻩ ﻩprocess(c_state) ﻩbegin ﻩcase c_state is ﻩ when reset=>rst<='1';carry_in<='1';latch<='1'; ﻩﻩ when normal=>rst<='0';carry_in<='1';latch<='1'; ﻩﻩﻩwhen halt=>rst<='0';

52、carry_in<='0';latch<='1'; ﻩﻩﻩwhen lock=>rst<='0';carry_in<='1';latch<='0'; ﻩ when others=>rst<='1';carry_in<='1';latch<='1'; ﻩend case; ﻩend process; end Behavioral; 3、消抖电路 library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; use IEEE.STD_LOGIC_ARITH.ALL; entity

53、 xiaodou is Port ( clk_1k : in STD_LOGIC;       key_in1 : in  STD_LOGIC;      key_in2 : in STD_LOGIC;       key_out1 : out STD_LOGIC;       key_out2 : out STD_LOGIC); end xiaodou; architecture Behavioral of xiaodou is   signal k1,k2: STD_LOGIC; ﻩsignal cnt_1: 

54、STD_LOGIC_VECTOR(1 downto 0); ﻩsignal k3,k4: STD_LOGIC; ﻩsignal cnt_2: STD_LOGIC_VECTOR(1  downto 0); begin process(clk_1k,key_in1) ﻩbegin if rising_edge(clk_1k) then ﻩifﻩcnt_1 = 3 then ﻩk1 <= '1'; ﻩelse ﻩﻩ ﻩk1 <= '0'; ﻩ cnt_1 <= cnt_1+1; ﻩﻩend if; ﻩﻩ k2 <= k1; ﻩ end if;

55、 ﻩif key_in1 = '0' then ﻩcnt_1 <= "00"; end if; end process; ﻩkey_out1 <= not k1 and k2; process(clk_1k,key_in2) ﻩbegin ﻩﻩif rising_edge(clk_1k) then ﻩif cnt_2 = 3 then ﻩﻩ k3 <= '1'; ﻩﻩelse ﻩ ﻩﻩk3 <= '0'; ﻩ ﻩ cnt_2 <= cnt_2+1; ﻩ end if; ﻩ k4 <= k2; end if; if key_i

56、n2 = '0' then ﻩ ﻩcnt_2 <= "00"; end if; end process; key_out2 <= not k3 and k4; end Behavioral; 4、显示电路 library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity display is   Port ( clk1000hz : in STD_LOGIC; d

57、1 : in  STD_LOGIC_VECTOR (3 downto 0);   d2 : in STD_LOGIC_VECTOR (3 downto 0);       d3 : in STD_LOGIC_VECTOR (3 downto 0);      d4 : in STD_LOGIC_VECTOR (3 downto 0);    d5 : in STD_LOGIC_VECTOR (3 downto 0);    d6 : in STD_LOGIC_VECTOR (3 downto 0);

58、    choose : out  STD_LOGIC_VECTOR (2 downto 0);   ncs : out  STD_LOGIC;        display7 : out  STD_LOGIC_VECTOR (6 downto 0)); end display; architecture Behavioral of display is signal s:std_logic_vector (2 downto 0); signal data:std_logic_vector (3 downto 0); begin

59、 process(clk1000hz) ﻩbegin ﻩ  if rising_edge(clk1000hz) then ﻩif s<7 then s<=s+1; ﻩﻩ  else ﻩ  s<="000"; ﻩﻩend if;  end if;  end process; choose<=s; process(d1,d2,d3,d4,d5,d6,s)   begin   case s is ﻩ when"000"=>data<=d1; ﻩ when"001"=>data<=d2; ﻩ when"011"=>data<=d

60、3; when"100"=>data<=d4; when"110"=>data<=d5; when"111"=>data<=d6; when others=>data<="1111"; end case; end process; process(data) begin case data is  ﻩ when "0000" =>display7<="0000001"; when "0001"   =>display7<="1001111";      when "0010"   =>displ

61、ay7<="0010010";     when "0011" =>display7<="0000110";    when "0100"   =>display7<="1001100";   when "0101"   =>display7<="0100100";   when "0110" =>display7<="0100000";   when "0111"  =>display7<="0001111";      when "1000"  =>display7<="0000000";

62、     when "1001"   =>display7<="0000100";      when others =>display7<="1111110";   end case;  end process;   ncs<='0'; end Behavioral; 5、模6计数器 library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity cou

63、nt is   Port ( clk  : in STD_LOGIC;      rst  : in STD_LOGIC;       carry_in : in STD_LOGIC;      carry_out : out  STD_LOGIC;    count : out  STD_LOGIC_VECTOR (3 downto 0)); end count; architecture Behavioral of count is signal c_state,n_state:std_logic_vector

64、(3 downto 0); begin process(carry_in,c_state) begin   if carry_in='1' then if c_state=5 then      n_state<="0000";   else ﻩ   n_state<=c_state+1; ﻩ end if; else n_state<=c_state; end if;  end process; process(clk,rst) begin if rst='1' then c_s

65、tate<="0000"; elsif rising_edge(clk) then     c_state<=n_state;   end if; end process; count<=c_state; carry_out<='1' when c_state=5 and carry_in ='1' else '0'; end Behavioral; 6、模10计数器 library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_

66、UNSIGNED.ALL; entity count is Port ( clk  : in  STD_LOGIC;       rst : in STD_LOGIC;   carry_in : in STD_LOGIC;      carry_out : out STD_LOGIC;   count : out  STD_LOGIC_VECTOR (3 downto 0)); end count; architecture Behavioral of count is signal c_state,n_state:std_logic_vector(3 downto 0); begin process(carry_in,c_state) begin if carry_in='1' then if c_state=9 then ﻩ   n_state<="0000";  ﻩ   else      n_state<=c_state+1

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

相关资源

更多
正为您匹配相似的精品文档

相关搜索

关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!