1、电子科技大学综合课程设计FPGA秒表67资料内容仅供参考,如有不当或者侵权,请联系本人改正或者删除。现代电子技术综合实验( 数字秒表) 实验报告姓名 学号 时间 4月25日 中文摘要摘 要:随着电子信息产业的不断发展, 基于FPGA的应用技术发展迅速, 在某些领域FPGA正逐步代替dsp、 arm、 单片机等微处理器。本文设计一个基于FPGA技术的数字秒表。首先, 我们把晶振产生的50MHZ时钟信号送入FPGA芯片内, 经FPGA内分频模块处理产生1KHZ时钟信号。秒表的功能模块由VHDL语言编写, 在Xilinx的ISE环境下调试, 并在Modelsim上完成仿真, 在最后把产生的信号送入L
2、ED显示电路里进行显示。本文从电子秒表的具体设计触发, 详细阐述了基于FPGA的数字秒表的设计方案, 设计了各模块的代码, 并对硬件电路进行了仿真。关键词: FPGA, VHDL, 电子秒表目 录第一章 引言4第二章 基于FPGA的VHDL设计流程42.1 概述42.2 VHDL语言介绍22.2.1 VHDL的特点32.2.2 基于VHDL的自顶向下设计方法42.3 FPGA开发介绍72.3.1 FPGA简介72.3.2 FPGA设计流程82.3.3 Spartan-II芯片简介9第三章 数字秒表的设计与实现153.1 项目任务与设计思路153.2基于VHDL方法的设计方案153.3系统电路设
3、计163.4系统单元模块设计3.4.1 分频器173.4.2 计数器183.4.3 扫描控制显示电路243.4.4 按键消陡模块303.4.5 控制电路模块313.4.6 锁存器模块333.4.7 电子秒表顶层连接模块.343.5 系统硬件实现与调试.373.6结束语 .38致 谢38第一章 引言随着电子信息产业的发展, 数字系统的规模越来越大, 更多采用自顶而下的模块化设计方法, 这就要求技术人员对于基本的模块有着深入的理解。随着FPGA技术的发展和成熟, 用FPGA来做为一个电路系统的控制电路逐渐显示出其无与伦比的优越性。因此本文采用FPGA来做为电路的控制系统, 采用模块化的设计方法设计
4、一个能显示从00-00-00到59-59-99, 而且具备秒表所有功能的小型数字系统。第二章 基于FPGA的VHDL设计流程2.1 概述数字频率计是数字电路中的一个典型应用, 实际的硬件设计用到的器件较多, 连线比较复杂, 而且会产生比较大的延时, 造成测量误差、 可靠性差。频率计的设计有传统方法和现代方法, 传统的设计方法耗时耗功, 设计强度大, 且容易出错, 设计的质量不一定是最好的。自然我们考虑到现代方法, 即二十世纪八十年代兴起的电子设计自动化技术, 英文为Electronic Design Auto, 缩写为EDA。在EDA设计工具中, 用的最广泛的是VHDL和VERILOG, 当然
5、还有其它的。比较VHDL和VERILOG, 在顶层设计方面VHDL优于VERILOG, 在门级电路设计方面VERILOG优于VHDL。随着复杂可编程逻辑器件( CPLD) 的广泛应用, 以EDA工具作为开发手段, 运用VHDL语言, 将使整个系统大大简化, 提高整体的性能和可靠性。本次的频率计设计主要是顶层设计, 目的是设计6位十进制频率计, 学习常见的数字系统设计方法。采用VDHL编程设计实现的数字频率计, 除被测信号的整形部分、 键输入部分以外, 其余全部在一片FPGA芯片上实现, 整个系统非常精简, 而且具有灵活的现场可更改性。在不更改硬件电路的基础上, 对系统进行各种改进还能够进一步提
6、高系统的性能。该数字频率计具有高速、 精确、 可靠、 抗干扰性强和现场可编程等优点。2.2 VHDL语言介绍VHDL(Very-high-speed Integrated Circuit Hardware Description Language)诞生于1982年。1987年底, VHDL被IEEE( The Institute of Electrical and Electronics Engineers) 和美国国防部确认为标准硬件描述语言。自IEEE公布了VHDL的标准版本( IEEE-1076) 之后, 各EDA公司相继推出了自己的VHDL设计环境, 并宣布自己的设计工具能够和VHDL
7、接口。此后VHDL在电子设计领域得到了广泛的接受, 并逐步取代了原有的非标准硬件描述语言。1993年, IEEE对VHDL进行了修订, 从更高的抽象层次和系统描述能力上扩展VHDL的内容, 公布了新版本的VHDL, 即IEEE标准的1076-1993版本。现在, VHDL和VERILOG作为IEEE的工业标准硬件描述语言, 又得到众多EDA公司的支持, 在电子工程领域, 已成为事实上的通用硬件描述语言。有专家认为, 在新的世纪中, VHDL和VERILOG语言将承担起几乎全部的数字系统设计任务。2.2.1 VHDL的特点VHDL主要用于描述数字系统的结构、 行为、 功能和接口。除了含有许多具有
8、硬件特征的语句外, VHDL的语言形式, 描述风格以及句法十分类似于一般的计算机高级语言。VHDL的程序结构特点是将一项工程设计, 或称为设计实体( 能够是一个元件、 一个电路模块或一个系统) 分成外部( 又称为可视部分, 即端口) 和内部( 又称为不可视部分) , 即设计实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后, 一旦其内部开发完成后, 其它的设计就能够直接调用这个实体。这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。应用VHDL进行工程设计的优点是多方面的, 具体如下: 1、 与其它的硬件描述语言相比, VHDL具有更强的行为描述能力, 从而决定了它成为系
9、统设计领域最佳的硬件描述语言。强大的行为描述能力是避开具体的器件结构, 从逻辑行为上描述和设计大规模电子系统的重要保证。就当前流行的EDA工具和VHDL综合器而言, 将基于抽象的行为描述风格的VHDL程序综合成为具体的FPGA和CPLD等目标器件的网表文件已不成问题, 只是在综合与优化效率上略有差异。2、 VHDL最初是作为一种仿真标准格式出现的, 因此VHDL既是一种硬件电路描述和设计语言, 也是一种标准的网表格式, 还是一种仿真语言。其丰富的仿真语句和库函数, 使得在任何大系统的设计早期( 即尚未完成) , 就能用于查验设计系统的功能可行性, 随时可对设计进行仿真模拟。即在远离门级的高层次
10、上进行模拟, 使设计者对整个工程设计的结构和功能的可行性做出决策。3、 VHDL语句的行为描述能力和程序结构决定了它具有支持大规模设计的分解和已有设计的再利用功能, 符合市场所需求的, 大规模系统高效、 高速的完成必须由多人甚至多个开发组共同并行工作才能实现的特点。VHDL中设计实体的概念、 程序包的概念、 设计库的概念为设计的分解和并行工作提供了有力的支持。4、 对于用VHDL完成的一个确定的设计, 能够利用EDA工具进行逻辑综合和优化, 并自动地把VHDL描述设计转变成为门级网表。这种方式突破了门级电路设计的瓶颈, 极大地减少了电路设计的时间和可能发生的错误, 降低了开发成本。应用EDA工
11、具的逻辑优化功能, 能够自动地把一个综合后的设计变成一个更高效、 更高速的电路系统。反过来, 设计者还能够容易地从综合和优化后的电路获得设计信息, 返回去更新修改VHDL设计描述, 使之更为完善。5、 VHDL对设计的描述具有相对独立性, 设计者能够不懂硬件的结构, 也不必管最终设计实现的目标器件是什么, 而进行独立的设计。正因为VHDL硬件描述与具体的工艺技术和硬件结构无关, VHDL设计程序的硬件实现目标器件有广阔的选择范围, 其中包括各系列的CPLD、 FPGA及各种门阵列实现目标。6、 由于VHDL具有类属描述语句和子程序调用等功能, 对于已完成的设计, 在不改变源程序的条件下, 只需
12、要改变端口类属参量或函数, 就能轻易地改变设计的规模和结构。2.2.2 基于VHDL的自顶向下设计方法2.2.2.1 自顶向下设计的步骤1、 设计说明: 用自然语言表示系统项目的功能特点和技术参数等。2、 建立VHDL行为模型, 即将设计说明已转化为VHDL行为模型。建立模型是为了经过VHDL仿真器对整个系统进行系统行为仿真和性能评估。3、 VHDL行为仿真。这一阶段能够利用VHDL仿真器对顶层系统的行为模型进行仿真测试, 检查模拟结果, 继而进行修改和完善。4、 VHDL-RTL级建模。即将VHDL的行为模型表示为VHDL行为代码。5、 前端功能仿真。即对VHDL-RTL级模型进行仿真, 简
13、称功能仿真。6、 逻辑综合。使用逻辑综合工具将VHDL行为代码描述转化为结构化的门级电路。7、 测试向量生成。8、 功能仿真。9、 结构综合。10、 门级时序仿真。11、 硬件测试。2.2.2.2 Top-down设计方法的优点1、 完全符合设计人员的设计思路; 从功能描述开始, 到最后的物理实现。2、 功能设计可完全独立于物理实现; 采用Top-Down设计方法, 功能输入采用国际标准的HDL输入方法, HDL可不含有任何器件的物理信息, 因此工程师能够有更多的空间去集中精力进行功能描述。设计师能够在设计过程的最后阶段任意选择或更改物理器件, 不会在设计一开始就受到最终所采用器件的约束。3、
14、 设计可再利用; 设计结果完全能够以一种知识产权( IP-Intellectual Property) 的方式作为设计师或设计单位的设计成果, 应用于不同的产品设计中, 做到成果的再利用。4、 易于设计的更改; 设计工程师可在极短的时间内修改设计, 对各种FPGA/CPLD结构进行设计结果规模( 门消耗) 和速度( 时序) 的比较, 选择最优方案。5、 设计和处理大规模复杂电路; 当前的FPGA/CPLD器件正向高集成度、 深亚微米工艺发展。为设计系统的小型化, 低功耗、 高可靠性等提供了集成的手段。6、 设计周期缩短, 生产率大大提高, 产品上市时间提前, 性能明显提高, 产品竞争力加强。据
15、统计, 采用Top-Down设计方法的生产率可达到传统设计方法2到4倍。2.3 FPGA开发介绍2.3.1 FPGA简介现场可编程门阵列( FPGA) 器件是八十年代中期出现的新产品, 它的应用大大地方便了IC的设计, 因而随着数字技术日益广泛的应用, 以FPGA为代表的ASIC器件得到了迅速的普及和发展, 器件集成度和速度都在高速增长。传统的电路设计过程是: 先画原理图、 把原理图绘制成印制电路板图、 再制版、 安装、 调试。有了FPGA, 我们只需要在计算机上绘出原理图, 再运行相应的软件, 就可把所设计的逻辑电路在FPGA中实现。所有步骤均可自动完成。电子设计工程师自己设计专用集成电路成
16、为了一件很容易的事情。FPGA作为专用集成电路( ASIC) 概念上的一个新型范畴和门类, 以其高度灵活的用户现场编程方式, 现场定义高容量数字单片系统的能力, 能够重复定义、 重复改写的新颖功能, 为复杂数字系统设计、 研制以及产品开发提供了有效的技术手段。电子应用设计工程师应用FPGA技术不但可避免一般ASIC单片系统设计周期长, 前期投资风险大的弱点, 而且克服了过去板级通用数字电路应用设计的落后, 繁琐和不可靠性。当前FPGA的两个重要发展与突破是, 大多数厂商在其高端器件上都提供了片上的处理器( 如CPU、 DSP) 等硬核( Hard Core) 或固化核( Fixed Core)
17、 。比如Xilinx的Virtex II Pro芯片能够提供Power PC, 而Altera的Stratix、 Excalibur等系列芯片能够提供Nios、 DSP和Arm等模块。在FPGA上集成微处理器, 使SOPC设计更加便利与强大。另一个发展是在不同器件商推出的高端芯片上大都集成了高速串行收发器, 一般能够达到3Gb/s以上的数据处理能力, 在Xilinx、 Altera、 Lattice都有相应的器件型号提供该功能。这些新功能使FPGA的数据吞吐能力大幅度增强。2.3.2 FPGA设计流程对于目标器件为FPGA和CPLD的HDL设计, 其工程设计的基本流程如图 2-1所示。现具体说
18、明如下。图 2-1 EDA设计流程1、 文本编辑用任何文本编辑器都能够进行, 一般VHDL文件保存为vhd文件, Verilog文件保存为v文件。2、 使用编译工具编译源文件HDL的编译器有很多, ACTIVE公司, MODELSIM公司, SYNPLICITY公司, SYNOPSYS公司, VERIBEST公司等都有自己的编译器。3、 逻辑综合将源文件调入逻辑综合软件进行综合。综合的目的是在于将设计的源文件由语言转换为实际的电路。可是此时还没有在芯片中形成真正的电路。这一步的最终目的是生成门电路级的网表(Netlist)。4、 布局、 布线将第3步生成的网表文件调入PLD厂家提供的软件中进行
19、布线, 即把设计好的逻辑安放到CPLDFPGA内。这一步的目的是生成用于下载(编程Programming)的编程文件。在这一步, 将用到第3步生成的网表, 并根据CPLDFPGA厂商的器件容量, 结构等进行布局、 布线。这就仿佛在设计PCB时的布局布线一样。先将各个设计中的门根据网表的内容和器件的结构放在器件的特定部位。然后, 在根据网表中提供的各门的连接, 把各个门的输入输出连接起来。最后, 生成一个供编程的文件。这一步同时还会加一些时序信息(Timing)到你的设计项目中去, 以便于你做后仿真。5、 后仿真利用在布局布线中获得的精确参数, 用仿真软件验证电路的时序。(也叫布局布线仿真或时序
20、仿真)。这一步主要是为了确定你的设计在经过布局布线之后, 是不是还满足你的设计要求。6、 编程, 下载如果前几步都没有发生错误, 而且符合设计要求, 这一步就能够将由适配器等产生的配置或下载文件经过编程器或下载电缆下载到目标芯片中。7、 硬件测试硬件测试的目的是为了在更真实的环境中检验HDL设计的运行情况, 特别是对于HDL程序设计上不是十分规范, 语义上含有一定歧义的程序。2.3.3 SPARTAN-II芯片简介本设计用到的FPGA芯片是XILINX公司生产的SPARNTAN-II系列中的xc2s100-6。下面将对该系列做简单的介绍。2.3.3.1 Spartan-II系列的特点进入ASS
21、P的领域FPGA正在极力将ASSP从电路板上挤出去,并使其失去设计人员的宠爱。可是任何旧式的FPGA器件都无法恰当地替代专用器件。只有Spartan-II FPGA能够做到这一点。Spartan-II系列为设计人员提供了完整的封装。在密度、 功能和性能以及运行速度方面都差不多。可是, Spartan-II为解决方案所提供的可编程能力有着巨大的价值, 从而使其与ASSP/ASIC器件相比具有了很大的优势。1、 现场升级的灵活性Spartan-II FPGA的可编程能力为设计人员带来很大优势。采用的FPGA是标准器件后, 您可更快地将产品标准化。因为Spartan器件可进行现场升级, 升级就像下载
22、软件一样简单。2、 拥有丰富的逻辑门资源Spartan-II系列有六款器件, 密度高达20万门。丰富的逻辑门资源能让设计者更大限度的发挥。3、 告别ASIC和FPGA间的性能和功能差距在性能和功能方面, 大多数设计人员都会想到ASIC和FPGA间的巨大差距。可是SPARTAN-II消除了这一差距。4、 拥有最多的存储器片上带存储器是必须的, 如果还具有很好的灵活性的话, 那么就更为有用了。分布式存储器和块RAM可高效地实现最适合您要求的配置, 现时还可采用与片上存储器一样快的外部存储器。5、 方便的时钟管理如果您面临时钟管理问题, Spartan-II系列的四个高度灵活的DLL可解决您的问题。
23、设计人员可在片上对输入时钟进行倍频或分频, 还可驱动板上的多个时钟。6、 提供高性能今天的数字世界里有许多新的I/O标准要求很苛刻。经过Select I/O技术, Spartan-II器件支持所有这些新I/O标准。I/O速度超过200 MHz。Spartan-II系列丰富的功能、 以及高性能和低成本, 使其成为多种数据网络应用HDLC控制器解决方案中的首选。Spartan-II也非常适于实现控制和接口逻辑, 比如用于将CPU同QDR SRAM连接在一起。7、 器件密度扩展至20万门随着大量产品的设计变得越来越复杂, 对更高密度、 更大存储器资源以及更多I/O数量的需求也在增长。对于此类设计,
24、Spartan-II系列的XC2S200非常适合, 该器件能提供20多万个门、 14个RAM块以及284个I/O, 并有三种不同的低成本适合大批量生产的封装PQ208、 FG256和FG456可供选择。利用XC2S200, 可获得比XC2S150多36%的逻辑单元, 而且其密度是Spartan或Spartan-XL最大器件密度的五倍。XC2S200包括了支持Spartan-II解决方案获得成功的所有特性。2.3.3.2 Spartan-II的结构特点1、 结构框图Spartan-II系列FPGA采用了常规的灵活可编程构架, 包括可配置逻辑块( CLB) 和环绕在CLB四周的可编程输入/输出模块
25、( IOB) , 并经过多用途布线资源形成强大的互连体系。图2-2 Spartan-ii 的结构框图2、 输入/输出模块 Spartan-II的IOB的输入和输出支持16种I/O信号标准, 包括LVCMOS、 HSTL、 SSTL和GTL。这些高速输入和输出可支持各种先进的存储器和总线接口。三个IOB寄存器可作为边沿触发D型触发器或作为电平敏感的锁存器。图2-3 Spartan-ii 的输入输出模块3、 逻辑单元Spartan-II CLB的基本构造单元是逻辑单元( LC) 。一个LC包括一个四输入的函数发生器、 一个进位逻辑和一个存储单元。每个LC中函数发生器的输出同时驱动CLB输出端和触发
26、器的D输入端。每个Spartan-II CLB包含四个LC, 两两组合成两个同样的Slice。除了四个基本LC外, Spartan-II CLB还包含一些逻辑电路, 结合函数发生器可提供五个或六个输入的函数功能。因此当预计给定器件所能提供的系统门数量时, 每个CLB可当作4.5个逻辑单元来计算。Spartan-II函数发生器采用4输入查找表( LUT) 的方式来实现。除了作为函数发生器以外, 每个LUT还可作为一个16*1位的同步RAM来使用。Spartan-II LUT还可作为一个16位移位寄存器使用, 而且对于捕捉高速或猝发数据非常理想。这一模式还可在诸如数字信号处理等应用中用于数据的存储
27、。Spartan-II逻辑片中的存储单元可经过配置成为边沿触发型D型触发器或电平敏感锁存器。图2-4 Spartan-ii的逻辑单元4.块RAMSpartan-II FPGA集成了几块大型的4K位容量Select RAM+ 存储器块。这与在CLB中能够实现浅RAM结构的分布式Select RAM+资源互为补充。每个存储器块可配置为4K x 1 和256 x 16之间的多种不同配置。图2-5 Spartan-ii的块RAM5.延迟锁相环与每个全局时钟输入缓冲器相连的是一个完全数字的延迟锁相环( DLL) , 它可消除时钟输入焊盘和器件内部时钟输入引脚间的畸变。每个DLL可驱动两个全局时钟网络。首
28、先监视输入的时钟信号, 然后是分布式时钟信号, 并自动地调整时钟延迟单元。经过引入额外的延迟来保证时钟边沿严格地在到达时钟输入端一个时钟周期后到达内部触发器。经过保证到达内部触发器的时钟边沿与到达时钟输入端的时钟边沿严格同步, 这一闭环系统有效地消除了时钟传输延迟。第三章 数字秒表的设计与实现3.1项目任务与设计思路1、 实验项目数字秒表的设计2、 实验指标晶振输入信号: 50MHZ时钟信号计时范围范围为: 000000到595999 按钮开关: start/stop,split/reset 在秒表已经被复位的情况下, 按下start/stop键, 秒表开始计时。在秒表正常运行的情况下, 如果
29、按下start/stop键, 则秒表暂停计时; 再次按下该键, 秒表继续计时。在秒表正常运行情况下, 如果按下split/reset键, 显示停止在按键时间, 但秒表依然计时, 再次按下该键, 秒表恢复正常显示。在秒表暂停计时情况下, 按下split/reset键, 秒表复位归零。显示工作方式: 用六位BCD七段数码管显示读数。3、 实验思路根据实验指标, 将电路设计分成6个模块: 分频器, 计数器, 锁存器, 扫描显示控制, 按键消陡, 控制电路3.2基于VHDL方法的设计方案4、 设计方框图5、 具体说明晶振: 50MHz的晶振信号。分频器: 将50MHz的信号分频成1KHz的基准频率。计
30、数器: 采用六进制与十进制计数器级联的形式。锁存器: 锁存使能信号控制锁存。扫描显示控制:一个八进制的计数器产生的扫描信号同时完成从锁存器送来的信号的选择以及LED数码管的选择。按键消陡 : 采用软件延时的消抖方法。控制电路 : 为一个moore机, 能够让状态编码为相应的输出以方便程序编写。3.3系统电路设计3.4系统单元模块设计3.4.1分频器library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity fenpinqi is Port ( clk_in : in STD_LOGIC; clk
31、 : out STD_LOGIC);end fenpinqi;architecture Behavioral of fenpinqi issignalcurrent_state : STD_LOGIC_VECTOR(15 downto 0):=(others=0);signalnew_state : STD_LOGIC_VECTOR(15 downto 0):=(others=0);beginprocess(current_state)beginif current_state=49999 thennew_state0);elsenew_state= current_state+1;end i
32、f;end process;process(clk_in)beginif falling_edge(clk_in)thencurrent_state=new_state;end if;end process;clk=current_state(15);end Behavioral;3.4.2计数器模十计数器: library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity m_10 isport(clk,rst : in std_logic;carry_in : in std_logic;carry
33、_out :out std_logic;count : out std_logic_vector(3 downto 0);end m_10;architecture Behavioral of m_10 issignal c_state,n_state:std_logic_vector(3 downto 0);beginP1:process(carry_in,c_state)beginif carry_in=1 thenif c_state=9 thenn_state=0000;elsen_state=c_state+1;end if;elsen_state=c_state;end if;en
34、d process;P2:process(clk,rst)beginif rst=1 thenc_state=0000;elsif falling_edge (clk) thenc_state=n_state;end if;end process;count=c_state;carry_out=1 when carry_in=1 and c_state=9 else 0;end Behavioral;模六计数器: library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity m_6 isport(
35、clk,rst : in std_logic;carry_in : in std_logic;carry_out :out std_logic;count : out std_logic_vector(3 downto 0);end m_6;architecture Behavioral of m_6 issignal c_state,n_state:std_logic_vector(3 downto 0);beginP1:process(carry_in,c_state)beginif carry_in=1 thenif c_state=5 thenn_state=0000;elsen_st
36、ate=c_state+1;end if;elsen_state=c_state;end if;end process;P2:process(clk,rst)beginif rst=1 thenc_state=0000;elsif falling_edge (clk) thenc_state=n_state;end if;end process;count=c_state;carry_out clk,rst = rst,carry_in = ena,carry_out = cry0,count = open);u1: m_10 PORT MAP(clk = clk,rst = rst,carr
37、y_in = cry0,carry_out = cry1,count = count1);u2: m_10 PORT MAP(clk = clk,rst = rst,carry_in = cry1,carry_out = cry2,count = count2);u3: m_10 PORT MAP(clk = clk,rst = rst,carry_in = cry2,carry_out = cry3,count = count3);u4: m_6 PORT MAP(clk = clk,rst = rst,carry_in = cry3,carry_out = cry4,count = cou
38、nt4);u5: m_10 PORT MAP(clk = clk,rst = rst,carry_in = cry4,carry_out = cry5,count = count5);u6: m_6 PORT MAP(clk = clk,rst = rst,carry_in = cry5,carry_out = open,count = count6);end Behavioral;测试程序关键部分: stim_proc: process begin rst = 1;ena = 1; wait for 3.33 ms;rst = 0; wait for clk_period*1234;ena = 0; wait for clk_period*87;ena BCD BCD BCD BCD BCD =scan_in3;WHEN 101