电子科技大学FPGA实验秒表报告_第1页
电子科技大学FPGA实验秒表报告_第2页
电子科技大学FPGA实验秒表报告_第3页
电子科技大学FPGA实验秒表报告_第4页
电子科技大学FPGA实验秒表报告_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

2、L语言简介72.4 VHDL语言的优势8第三章程序设计93.1 各模块设计思路9第四章仿真254.1 仿真软件使用说明 144.2状态仿真图16致谢20附录(各程序代码) 21控制模块代码21显示模块代码22所存模块代码24计数器模块代码24消抖模块代码26分频模块代码27Top总代码28引脚连接34第一章引言本文主要任务是针对设计的要求,基于FPGA利用硬件描述语言VHDL完成数 字秒表的设计,通过仿真,分析,综合并最终下载到FPGAS实现。本次实验是我们第一次接触 VHDL语言。设计秒表的过程并不难,通过本次 实验让我们对FPGA有了一定的概念,掌握了部分VHD语言的编写和仿真的步骤。 整

3、个过程我们不仅学会了程序的编写,同时还清楚了怎样设计一个高效的电路, 这在数字电路的学习上让我们提升了一个高度。这次实验对今后电路的设计和 VHDL的学习是一个良好的开端。第二章设计背景2.1 FPGA的概念FPGA,即现场可编程门阵列,它是在 PAL GAL CPLD等可编程器件的基础 上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路 而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的 缺点。以硬件描述语言(Verilog或VHDL所完成的电路设计,可以经过简单的综 合与布局,快速的烧录至FPGA上进行测试,是现代IC设计验证的技术主流。 这些可

4、编辑元件可以被用来实现一些基本的逻辑门电路或者更复杂一些的组合 功能比如解码器或数学方程式。在大多数的 FPGA里面,这些可编辑的元件里也 包含记忆元件例如触发器或者其他更加完整的记忆块。FPGA采用了逻辑单元阵列LCA这样一个概念,内部包括可配置逻辑模块CLB 输出输入模块IOB和内部连线三个部分。FPGA是可编程器件,与传统逻辑电路 和门阵列(如PAL,GAL及 CPLD器件)相比,FPGA具有不同的结构。FPGA利用 小型查找表(16X 1RAM来实现组合逻辑,每个查找表连接到一个D触发器的输 入端,触发器再来驱动其他逻辑电路或驱动 I/O,由此构成了既可实现组合逻辑 功能又可实现时序逻

5、辑功能的基本逻辑单元模块,这些模块间利用金属连线互相 连接或连接到I/O模块。FPGA勺逻辑是通过向内部静态存储单元加载编程数据 来实现的,存储在存储器单元中的值决定了逻辑单元的逻辑功能以及各模块之间 或模块与I/O间的联接方式,并最终决定了 FPGA所能实现的功能,FPGA允许无 限次的编程。2.2 FPGA设计流程对于目标器件为FPGA和CPLD勺HDL设计,其工程设计的基本流程如图2-1所示。现具体说明如下图2-1 EDA设计流程1、文本编辑用任何文本编辑器都可以进行,通常 VHDL文件保存为vhd文件,Verilog 文件保存为v文件。2、使用编译工具编译源文件HDL的编译器有很多,A

6、CTIVE公司,MODELSIM司,SYNPLICITY公司, SYNOPSY&司,VERIBEST公司等都有自己的编译器。3、逻辑综合将源文件调入逻辑综合软件进行综合。综合的目的是在于将设计的源文件由 语言转换为实际的电路。但是此时还没有在芯片中形成真正的电路。 这一步的最 终目的是生成门电路级的网表(Netlist)。4、布局、布线将第3步生成的网表文件调入PLD厂家提供的软件中进行布线,即把设计好 的逻辑安放到CPLAFPGA内。这一步的目的是生成用于下载(编程Programming) 的编程文件。在这一步,将用到第 3步生成的网表,并根据 CPLDTFPGAT商的 器件容量,结构等进行

7、布局、布线。这就好像在设计 PCB寸的布局布线一样。先 将各个设计中的门根据网表的内容和器件的结构放在器件的特定部位。然后,在根据网表中提供的各门的连接,把各个门的输入输出连接起来。最后,生成一个供编程的文件。这一步同时还会加一些时序信息 (Timing)到你的设计项目中去, 以便于你做后仿真。5、后仿真利用在布局布线中获得的精确参数,用仿真软件验证电路的时序。(也叫布局布线仿真或时序仿真)。这一步主要是为了确定你的设计在经过布局布线之后, 是不是还满足你的设计要求。6编程,下载如果前几步都没有发生错误,并且符合设计要求,这一步就可以将由适配器 等产生的配置或下载文件通过编程器或下载电缆下载到

8、目标芯片中。7、硬件测试硬件测试的目的是为了在更真实的环境中检验HDL设计的运行情况,特别是对于HDL程序设计上不是十分规范,语义上含有一定歧义的程序。2.3 VHDL语言简介VHDL全名 Very-High-Speed Integrated Circuit HardwareDescriptionLanguage,诞生于1982年。VHDL翻译成中文就是超高速集成电路硬件描述语言。 VHDL主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬 件特征的语句外,VHDL的语言形式、描述风格以及语法是十分类似于一般的计 算机高级语言。VHDL的程序结构特点是将一项工程设计,或称设计实体

9、(可以 是一个元件,一个电路模块或一个系统)分成外部和内部,即设计实体的内部功 能和算法完成部分。在对一个设计实体定义了外部界面后, 一旦其内部开发完成 后,其他的设计就可以直接调用这个实体。 这种将设计实体分成内外部分的概念 是VHDL系统设计的基本点。现在,VHDL和VERILOG乍为IEEE的工业标准硬件 描述语言,又得到众多EDA公司的支持,在电子工程领域,已成为事实上的通用 硬件描述语言。2.4 VHDL语言的优势严格地讲,VHDL是一种用来描述数字逻辑系统的“编程语言”。它通过对硬 件行为的直接描述来实现对硬件的物理实现,代表了当今硬件设计的发展方向。 VHDL是为了满足逻辑设计过

10、程中的各种需求而设计的。第一,它是可以用来描述逻辑设计的结构,比如逻辑设计中有多少个子逻辑, 而这些子逻辑又是如何连接的。除此之外, VHDL并不十分关心一个具体逻辑依 靠何种方式实现,而是把开发者的精力集中到逻辑所实现的功能上。第二,VHDL采用类似高级语言的语句格式完成对硬件行为的描述,具备更 强的模块化能力,并拥有良好的可读性以及程序的移植性。另外,VHDL淡化状态机,与或表达式等早一代硬件描述语言中的元素, 用更类似于高级语言的表达 式取代。这些也是为什么把 VHDL称为“编程语言”的原因。第三,VHDL合出逻辑的模拟与调试为设计工作提供了最大的空间。VHDL调试的过程是相当灵活的:一

11、方面可以使用传统的调试方法,比如适用传统的波形 激励或编写测试向量;另一方面,可以使用一些 VHDL原码调试器,这类调试器 可以大大加快VHDLg序调试的速度,因为它可以像调试软件一样单步跟踪调试 每一条语句,并且可以设置断点,观察内部变量等。这些功能是传统的调试仿真 方法所不具备的。这种调试器比较着名的有 Aldec的Active-HDL。拥有高效率 的生成代码,能够节省大量的资源。甚至不必编写任何测试向量便可以进行源代 码级的调试。而且,设计者可以非常方便地比较各种方案之间的可行性及其优劣 而不需做任何实际的电路实验。VHDL语言在编程时要更加规范,程序结构要适合整个系统的硬件结构, 要

12、符合各模块的信号时序关系,以及数据流的走向。VHDL语言的设计格式更是面 向具体的硬件对象的语言。VHDL的语言特点主要有:(1 )更加类似软件上的高级语言,具备更强的模块化能力并拥有良好的可 读性以及程序的移植性;(2 )淡化状态机,与或表达式等早一代硬件描述语言中的元素,用更类似 于高级语言的表达式取代;(3 )拥有高效率的生成代码,能够节省大量的资源。第三章程序设计3.1各模块设计思路3.1.1秒表设计原理图电路设计:总框图 U k1p *拧茁ii 1;弈#:!=4*电埒24亦= f:1衣娱气片 科 产 Ti 仙; 曰抿.!*1制了分抛器锁存誥咖3.1.23.1.2.1按键消抖按键消抖电

13、路应用计数器的分频功能以及与门电路,将按下瞬间激起的高电平延迟一个周期以致抵消,从而达到消抖的作用。当按键产生抖动时,keyin产生高电平,为了使keyout为低电平,将keyin与一个与门相连,使与门的另一 端在抖动产生的一个周期内输入为0,所以在这个周期内,与门的输出恒为0,并 将输出端接入keyout,从而实现消抖的功能。if risin g_edge(clk_1k) the nif cnt_2 = 3 the nk3 = 1;elsek3 = O;cnt_2 = cn t_2+1;end if;该局是利用计数器的分频功能;key_out2 feg feeg_d 粧 g,jsegj数码管

14、各段当有时钟作用于扫描模块时,不断对 8个数码管进行扫描,例如,q2q1q0为001时,把cl的数据赋给bcd2led进行显示。3.123 时钟分频器时钟分频器应用计数器的模数的不同对晶振源进行分频,例如将48mhz分为1000hz,选用一个48000模的计数器对其进行分频,并应用480000模的计数 器将48mhz分为100hz。FPGA自带的时钟为48MHZ晶振源,但是秒表的基准时钟应该是100HZ的 时钟,并且为了使得8位的数码管能够连续显示,我们也需要另一个 1KHZ的时 钟,对位选信号进行扫频以实现连续显示,因此分频器使非常关键的。对输入的48MHZS行一下操作:要实现 N分频,则输

15、入源时钟信号clk每经 过N/2个上升沿,则对输出信号去反。(分频器源文件见附录1)。3.1.2.4 计数器秒表一共需要六个计数器,2个模6的计数器,4个模10的计数器,通过if 语句先判断是否有进位输入,当时钟上升沿到来时计数一次,再通过if语句判断计数是否到1001 (模六计数器为0101),计数记到1001时则自动归零,另 外还有对清零位的判断,若清零位有效则计数器始终保持为0。各个计数器之间,通过将低位的进位输出赋值给高位的进位输入,从而达到计数器之间的级联,10毫秒位的计数器每当100HZ时钟上升沿到来时计一次数,从而实现了秒表的整体计数功能。(源程序见附录1)3.125锁存器锁存器

16、分为透明锁存器和不透明锁存器,本设计中,我们应用的是透明选择器, 如下图,即当使能端en有效时,锁存器为“通”,即直接将计数器输入的数据传 输出去,当时能端en无效时,锁存器进入锁存功能,此时停止计数,并将当前 状态输出。(源程序见附录1)data ?DQqenE3.1.3.6 显示模块a.位选扫描当1KHZ的时钟上升沿到来时,位选计数器加一,从而实现循环显示,由 于扫描速度很快,人眼无法分辨,从视觉上秒表实际是连续显示。程序如下: process(clk_1khz)beg inif risin g_edge (clk_1khz) the ns=s+1;end if;end process;c

17、hooselt FrfljectFr ec t J)f cr 1 ti m* | iraa vbdzizCE朋丄IATF21Zcrij d沏。vhdle*4 迅mi 即 f*rIkaririAir*II 虚刪fc_wi dlltvver j261XaPP灯汀砸:a Aif flowSMpJL tDU F1b fnjct1fiL3LItfF 1315118 FIFOI ATT (31 号 ilH FIFOS-tleci an Exanpla hrompre; tctQK li41 rcti4*bi tSidit 丁圈航監舀肮 匚frun I!Tl 1|Drfi5rpr a , start_sto

18、p = one , split_reset = two , rst = r , carry_ in = c , latch = la);u1: count PORT MAP( elk = 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=

19、c34, count = n);u4: count6 PORT MAP( clk = b , rst = r , carry_ in = c34 , carry_out=c45, count = four);u5: cou nt 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 , carry_out= ope n, count = six);In st_display: display

20、 PORT MAP( clklOOOhz = a , d1 = result1 , d2 = result2 , d3 = result3 , d4 = result4, d5 = result5 , d6 = result6 , choose = chooseo, ncs = ncso, display7 = displayo);In st_f_div: f_div PORT MAP(clk = clk_top , clk100hz = b , clk1000hz = a);In st_suocu n: suocun PORT MAP( latch = la , d1 = result1 ,

21、 d2 = result2 , d3 = result3, d4 = result4, d5 = result5, d6 = result6, count1 = w , count2 = e , count3 = n , count4 = four, count5 = i , count6 = six);In st_xiaodou: xiaodou PORT MAP( clk_1k = a ,key_i n1 = keyl ,key_i n2 = key2 ,key_out1 = one ,key_out2 = two);end Behavioral;2、控制电路library IEEE;us

22、e IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;en tity con trol isPort ( 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 con trol;architecture Behavioral of

23、con trol istype states is(reset, no rmal,halt,lock);sig nal c_state,n_state:states;sig nal con trol_sig:std_logic_vector(1 dow nto 0);begincon trol_sig case con trol_sig iswhe n 10 =n _staten _statecase con trol_sig iswhe n10=n_staten _staten _state case con trol_sig iswhe n 10 =n _staten _staten _s

24、tatecase con trol_sig iswhe n 01=n _staten _staten _state=reset; end case;end process;process(clklOOOHz)beginif ris in g_edge(clk1000Hz) the n c_staterst=1;carry_ in=1;latchrst=0;carry_ in=1;latchrst=0;carry_i n= O;latchrst=0;carry_ in=1;latchrst=1;carry_i n=1;latch=1; end case;end process;end Behav

25、ioral;3、消抖电路library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;use IEEE.STD_LOGIC_ARITH.ALL;en tity xiaodou isPort ( clk_1k : in STD_LOGIC;key_i n1 : in STD_LOGIC;key_i n2 : in STD_LOGIC;key_out1 : out STD_LOGIC; key_out2 : out STD_LOGIC);end xiaodou;architecture Behavioral of

26、xiaodou issig nal k1,k2: STD_LOGIC;sig nal c nt_1: STD_LOGIC_VECTOR(1 dow nto 0);sig nal k3,k4: STD_LOGIC;sig nal c nt_2: STD_LOGIC_VECTOR(1 dow nto 0); beginprocess(clk_1k,key_ in1)beginif risin g_edge(clk_1k) the nif cnt_1 = 3 the nk1 = 1;elsek1 = O;cnt_1 = cn t_1+1;end if;k2 = k1;end if;if key_i

27、n1 = 0 the ncnt_1 = 00;end if;end process; key_out1 = n ot k1 and k2;process(clk_1k,key_ in2)beginif risin g_edge(clk_1k) the nif cnt_2 = 3 the nk3 = 1;elsek3 = 0;cnt_2 = cn t_2+1; end if;k4 = k2;end if;if key_i n2 = 0 the n cnt_2 = 00;end if;end process;key_out2 = n ot k3 and k4;end Behavioral;4、显示

28、电路library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;en tity display isPort ( clk1000hz : in STD_LOGIC;d1 : in STD_LOGIC_VECTOR (3 dow nto 0);d2 : in STD_LOGIC_VECTOR (3 dow nto 0);d3 : in STD_LOGIC_VECTOR (3 dow nto 0);d4 : in STD_LOGIC_VECTOR (3 dow nto 0);d5 : in STD_LOGIC_VECTOR (3 dow nto 0);d6 : in STD_LOGIC_VECTOR (3 dow nto 0); choose : out STD_LOGIC_VECTOR (2 dow nto 0); ncs : out STD_LOGIC;display7 : out STD_LOGI

温馨提示

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

评论

0/150

提交评论