FPGA数字跑表课程设计

更新时间:2024-05-16 19:57:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

基于FPGA的数字跑表的设计

摘 要

本设课程设计是基于FPGA的数字跑表的设计,利用Verilog HDL语言和Quartus II软件以及FPGA实验操作平台来实现的。本论文的重点是用硬件语言Verilog HDL 来描述数字跑表,偏重于软件设计。大致内容是首先简单介绍了EDA的现状和前景, Verilog HDL 语言特点,应用平台FPGA,之后阐述了数字跑表的设计思想和大体的设计流程,最后进入本设计的核心设计部分,用Verilog HDL 语言设计数字跑表电路,着重对各个模块进行了详细的分析和说明。

【关键词】Verilog HDL 语言;Quartus II 软件;数字秒表

- 1 -

基于FPGA的数字跑表的设计

目 录

1 绪论 ·································································································· 2

1.1 EDA的现状和发展及FPGA简介 ············································· 2 1.2 Verilog HDL语言及QuartusⅡ软件简介 ··································· 2 1.3 基于FPGA实现数字跑表运行的方案设计基本原则 ·············· 3 1.4 论文主要完成的工作 ································································· 3

2 系统的硬件设计 ············································································· 4

2.1数字跑表概述·············································································· 4 2.2整体方案设计和功能分割 ·························································· 4 2.3各功能模块的设计和实现 ·························································· 6 2.4 控制系统的实现 ········································································· 8

3 系统的软件设计 ············································································· 8

3.1 软件整体设计 ············································································· 8 3.2主要模块软件设计(主要模块流程图和仿真波形图) ··········· 9

4 总结 ································································································ 12

参考文献 ······························································································ 13

- 2 -

基于FPGA的数字跑表的设计

1.绪 论

1.1 EDA简介及FPGA简介

EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪60年代中期从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。伴随着集成电路(IC)技术的发展,电子设计自动化(EDA)逐渐成为重要的设计手段,已经广泛应用于模拟与数字电路系统等许多领域。而电子设计自动化(EDA)的实现是与CPLD/FPGA技术的迅速发展息息相关的,利用PLD/FPGA,电子系统设计工程师可以在实验室中设计出专用IC,实现了系统的集成。此外,CPLD/FPGA还具有静态可重复编程或在线动态重构特性,使硬件的功能可像软件一样通过编程来修改,不仅使设计修改和产品升级变得十分方便,而且极大地提高了电子系统的灵活性和通用能力。随着计数的进步,自动化设计工具(从CAD到EDA及ESDA:Electronic System Design Automation)已成为电子信息设计人员所必需熟悉和掌握的一门技术。

FPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。自1985年Xilinx公司推出第一片现场可编程逻辑器件至今,FPGA已经历了十几年的历史。在这十几年的发展过程中,以FPGA为代表的数字系统现场集成取得了惊人的发展:现场可编程逻辑器件从最初的1200个可利用门,发展到数百万门的单片FPGA芯片,将现场可编程器件的集成度提高到一个新的水平。它之所以具有巨大的市场吸引力,根本在于:FPGA不仅可以解决电子系统小型化、低功耗、高可靠性等问题,而且其开发周期短、开发软件投入少、芯片价格不断降低,促使FPGA越来越多地取代了ASIC的市场,特别是对小批量、多品种的产品需求,使FPGA成为首选。 目前,FPGA的主要发展动向是:随着大规模现场可编程逻辑器件的发展,系统设计进入\片上可编程系统\(SOPC)的新纪元;芯片朝着高密度、低压、低功耗方向挺进;国际各大公司都在积极扩充其IP库,以优化的资源更好的满足用户的需求,扩大市场;特别是引人注目的所谓FPGA动态可重构技术的开拓,将推动数字系统设计观念的巨大转变。

- 3 -

基于FPGA的数字跑表的设计

1.2 Verilog HDL语言及QuartusⅡ软件简介

Verilog HDL语言是1983年GDA公司的Phil Moorby首创的,之后Moorby有设计了Verilog-XL仿真器获得很大成功,也使得Verilog HDL语言得到发展和推广。Verilog HDL语言是在C语言的基础上发展而来的。从语法结构上看,Verilog HDL继承和借鉴了C语言的很多语法,两者有许多的相似之处,但Verilog HDL作为一种硬件描述语言,还是有本质的区别。即可适于可综合的电路设计,也可胜任电路和系统的仿真;能在多层次上对所设计的系统加以描述,从开关级、门级,寄存器传输级到行为级等都可以担任,而且没规模限制;灵活多变的电路描述风格,可进行行为描述,也可进行结构描述等;应用十分的广泛。

QuartusⅡ软件是Atlera的CPLD/FPGA集成开发软件,具有完善的可视化设计环境,并具有标准的EDA工具接口,基于QuartusⅡ进行EDA设计开发需要以下步骤:设计输入、编译、仿真、编程与验证等。

1.3 基于FPGA实现数字跑表运行的方案设计基本原则

首先,要注意FPGA的逻辑设计所采用的硬件描述语言Veri-log HDL与软件语言C和C++有本质区别,在使用硬件描述语言进行设计时,不应片面追求代码的简洁。

其次,要采用正确的编码方法对所需实现的硬件电路的结构和相互连接有清晰的理解和构想,然后再用适当的Veri-log HDL语言表达出来。实际上综合软件对所写的代码在进行推论的时候,得到的硬件结果会因编码方式的不同而不同,直接影响硬件的现实。

FPGA作为硬件系统设计,应该对设计全局进行宏观上的合理安排,包括控制系统逻辑功能模块划分,时钟域信号的产生和驱动,模块复用,时序或引脚约束等。模块化设计时系统原则的一个很好体现,它是自顶向下模块划分,分工协作设计思路的集中体现,是大型复杂系统的推荐设计方法。

在设计电路时,可以有异步电路和同步电路两种方法。异步电路使用逻辑电路实现,没有统一的时钟信号,容易产生毛刺和竞争冒险:同步时序电路使用组合逻辑和触发器实现电路功能,主要信号和输出信号由时钟驱动触发器产生,能够避免毛刺,信号稳定。

基于FPGA实现数字跑表运行的方案设计如下图所示:

电源系统 FPGA 数码管显示 开关按钮 - 4 -

基于FPGA的数字跑表的设计

1.4论文主要完成的工作

(1) 阐述了数字跑表的设计思想和大体的设计流程;

(2) 用Verilog HDL 语言设计数字跑表电路,着重对各个模块进行了详

细的分析和说明;

(3) 功能仿真图及程序流程图; (4) 结论及心得体会。

2.系统的硬件设计

2.1数字跑表概述

设计题目:数字跑表电路设计

设计要求:数字跑表是生活中常见的一种电子产品,特别应用与体育比赛中。 本数字跑表是通过按键来控制计时的起点和终点,一个是复位控制按键,用于设计跑表为初始零状态;另一个则是开始/停止控制按键,在复位控制无效的情况下,按一下开始/停止键则计时器开始计时,再按一下则暂停计时,再按一下则继续计时。

具体性能如下:

(1) 跑表的计时范围为0.01s~59min59.99s,计时精度为10ms; (2) 具有异步复位清零、启动、计时和暂停功能; (3) 输入时钟频率为100Hz;

(4) 要求数字跑表的输出能够直接驱动共阴极7段数码管显示.

设计工作:

(1) 分析功能要求,划分功能模块;

(2) 编写各模块的VerilogHDL语言的设计程序; (3) 在QuartusⅡ软件上完成设计和仿真;

(4) 根据实验室FPGA芯片,将设计生成配置文件,然后将配置文件

下载到实验装置上运行,操作设定的功能按键,验证设计效果。

2.2整体方案设计和功能分割

根据设计要求,对数字跑表进行结构和功能的划分。计数器部分设三个输入端,分别为时钟输入(CLK),复位(CLR)和启动/暂停(PAUSE)按键。复位信号高电平有效,可对跑表异步清零;当启动/暂停键为低电平时,跑表开始计时,

- 5 -

基于FPGA的数字跑表的设计

高电平时暂停,变低后在原来的数值基础上继续计数。然后计数器的每个位的值赋给六选一数据选择器,数据选择器选择的位值再赋给七段数码管译码器,这样就可以实现显示当前数字。

按照自顶而下的设计方法数字跑表的功能分割,如下图:

数字跑表 按键电路 计时模块 启动/ 暂停键 清零键 时基电路 计时器 显示模块 扫描电路 七段 译码器 功能分割图

计时电路的作用是计时,计时的一般方法是对时钟脉冲进行计数。本设计在外部提供了1kHzs时钟,计时精度是1ms。根据精度要求,需要设计分频器,对时钟信号进行10分频,产生周期为10ms的时基信号。

时基信号由时基分频器模块产生。

显示电路的作用是将计时值显示在数码管上。计时电路产生的计时值通过BCD/七段译码后,驱动LED七段数码管。计时显示电路存在一个方案选择的问题,即采用并行显示还是扫描显示,这关系到器件的资源利用。

并行显示同时驱动6个数码管,它需要同时对6组BCD数据进行译码并输出6组LED七段驱动信号,需要较多的内部逻辑和I/O资源。以ispLSI器件为例,驱动6个数码管的7个显示段,共需要42(7*6)个I/O引脚;另外还需要6个BCD/七段译码器,共需要12(6*2)个GLB。

采用扫描显示则每次只驱动一位数据,各位数据轮流进行显示;如果是扫描的速度足够快,由于人眼存在视觉残留现象,看不到闪烁。扫描显示的资源少。 设计中采用扫描显示的方式,由于是扫描显示每次只有一位视觉进行译码和输出,所以可以共享BCD/七段译码器和七段驱动信号输出引脚。同样用ispLSI器件实现,数码管七段驱动信号需要7个输出引脚,另外还要6个位驱动信号,共需要13个I/O引脚。扫描显示电路可以继续分割为BCD译码器和数据选择器两个子模块。

- 6 -

基于FPGA的数字跑表的设计

下面确定模块之间的接口关系,各模块的接口信号说明如下:

计时控制器:计时控制器的输入信号时启动、暂停、和清零信号。为了方便,将启动和暂停功能设置在同一个案件上;按一次是启动,按第二次是暂停,按第三次则是继续,以此类推。所以计时控制器共有两个开关输入信号,记启动/暂停和清零。计时器的输出信号为计数允许/保持信号和清零信号。

计时电路:计时电路的输入信号为1kHz时钟、计时允许/保持信号和清零信号;输出为10ms,100ms,s,min的计时数据。它的下一级模块的接口信号如下: 1、时基电路大的输入信号频率为1kHz,输出时钟周期为10ms。

2、计数器的输入信号为计数允许信号、清零信号和1kHz时钟,输出为10ms,100ms,s,min的计时数据。

显示电路:显示电路的输入信号为计时器的10ms,100ms,s,min计时数据。输出为七段译码驱动信号和位选择信号。

2.3各功能模块的设计和实现

自顶而下完成各层次的设计描述,数字跑表可以划分为5个功能模块:顶层模块、计时模块、时基分频器模块、数据选择模块、数码管显示模块。本设计中部分模块都用原理图和VerilogHDL语言两种方法设计。以VerilogHDL语言设计为主。 顶层模块

顶层模块只说明功能的分配、内部功能块和对外接口关系,功能模块实际的逻辑功能和具体的实现由下一层模块描述。

计时器模块

PAUSE为低电平时开始计数,百分秒低位自加一,加到九时归零,百分秒高位自加一,加到九时归零,且向秒位发出一个高电平,秒低位自加一,加到九时归零,秒高位自加一,且向分位发出一个高电平,分低位自加一,加到九时清零,且向分高位发出一个高电平,分高位自加一,加到六时清零。PAUSE为低电平时暂停。电路图如下:

1.计数器表示

- 7 -

基于FPGA的数字跑表的设计

2.基于QuartusⅡ的Verilog HDL语言电路图表示

分高位 MH 时基分频器模块

时基分频器要求对1kHz的时钟(此设计的输入时钟信号)分频,产生100Hz(10ms)时基信号输出,此时基信号即为计时器的输入信号。基分频器可由十进制计时器设计。电路图如下所示:

分低位 ML 秒高位 SH 秒低位 SL 百分秒高位 百分秒低位 MSH MSL

数据选择模块

数据扫描器的作用是对10ms,100ms,s,min的59min59.99s和6个BCD数码管进行扫描。6位扫描数码显示,将时间划分为6个扫描周期:周期1—周期2—周期3—周期4—周期5—周期6。

在周期1显示第一个数字,周期2显示第二个数字,以此类推;在扫描6个周期后重新从第1个开始循环。如果扫描的速度足够快,人的感觉就好像6个数字在同时显示。

BCD/七段译码模块

数据选择模块:定义三位二进制数ss作为选择数码管的变量,ss自加一,当ss大于7时归零,当ss为5、4、3、2、1时分别将MSL,MSH,SL,SH,ML,MH的值赋给dec_in,当ss为6、7时赋值为零。

七段数码管译码器模块:根据数字的显示形状编制真值表,当上一模块dec_in为0~9时,分别给decodeout赋以一组八位二进制数,使数码管显示相

- 8 -

基于FPGA的数字跑表的设计

应的数字。

2.4 控制系统的实现

本设计是基于FPGA的数字跑表的设计,利用Verilog HDL语言和Quartus II平台以及FPGA实验操作箱来实现的。基于QuartusⅡ软件平台,在对各个功能部分设计和各模块的VerilogHDL语言的设计程序,编译、仿真。

根据实验室FPGA芯片,将设计生成配置文件,然后将配置文件下载到FPGA上运行,操作设定的功能按键,验证设计效果。

3.系统的软件设计

3.1 软件整体设计

以上分析了数字跑表的功能和性能参数要求,确定了数字跑表的主要功能块、内部连接关系及I/O关系,各模块的连接如下图所示。

计时控制模块 扫描显示模块 启动/暂停 计数允许 计数模块 计数值 显示位输出 显示段输出 10ms 时基分频器模块 1ms时钟 清零 数字跑表模块框图设计

采用verilog HDL设计,各部分进行编辑,编译,仿真。编译,仿真正确后,将各部分进行封装;然后,新建原理图文件,将各部分的调出并进行连接;在进行编译,管脚锁定及硬件连线: 变量 CLK CLK1 管脚号 86 89 硬件连线 CLOCK15 CLOCKH0 - 9 -

基于FPGA的数字跑表的设计

CLR PAUSE decodeout0 decodeout1 decodeout2 decodeout3 decodeout4 decodeout5 decodeout6 decodeout7 ss0 ss1 ss2 87 88 94 95 96 97 99 100 37 160 90 92 93 SW15 SW16 A B C D E F G H SS0 SS1 SS2 3.2主要模块软件设计(主要模块流程图和仿真波形图)

计数器模块波形仿真图

数字跑表的RTL综合视图

- 10 -

基于FPGA的数字跑表的设计

开始 Y CLR=1? N Y ML=9? 分钟计数进程程序流程图 清零显示 N Y MH=5? ML=0 N MH=MH+1 MH=0 结束

- 11 -

基于FPGA的数字跑表的设计

开始 Y CLR=1N Y SL=9? 秒计数进程程序流程图 清零显示 N Y SH=5? N SL=0 SH=SH+1 MH=0,cn2=1 结束

开始 分钟计数进程程序流程图 Y CLR=1? N Y ML=9? 清零显示 N MH=5? Y N MH=MH+1 MH=0 ML=0 结束 - 12 -

基于FPGA的数字跑表的设计

4.总 结

写到这里为期一周的EDA课程设计就要结束了,通过近段时间的学习实践,我初步掌握了Verilog HDL这种目前应用最广泛的硬件描述语言的编写方法以及联机验证的整个流程,圆满完成了期末设计。具体来讲,我的思路时这样的:

1:复习、自学。复习课本《数字系统设计与Verilog HDL》以及老师的课件,重点掌握了VerilogHDL语言的程序设计;QuartusⅡ软件的一些应用,比如原理图的设计、波形仿真等;FPGA芯片的下载和运行等。

2:设计。利用自己已有的知识认真分析数字跑表的功能,对整个流程有了初步了解;依照自己的思路在图书馆借阅书籍和网上的资料进行了深入分析;完成了此设计中最关键的编程工作,这是一个比较艰难的过程,写了又改,改了再改,循环好几次后终于QuartusⅡ软件编译通过,仿真的波形达到了理想的结果。最后是下载到FPGA,连接硬件电路,验证设计效果。

3:撰写论文。本以为这是最简单的一个环节,其实不然,要把自己想的东西和那些都是字母和数字的程序用语言表达出来,也是任重而道远。基本格式是什么?要求又是什么?如何做到即简洁又含金量高呢?根据老师的建议,带着一个个问题看了很多优秀的作品,从中找到一些技巧,反复修改和完善,完成了论文的撰写工作。

以上三个步骤时是密不可分的,它们相互协调,相互影响。在我心里,始终以大局为重,三项工作齐头并进,在实践的过程中不断地摸索和积累,寻找更好的设计方法,及时完善不足、改正错误和,才有了课程设计的顺利完成。

最后对这门课设提出如下一些意见:

1、课程设计过程中感到我校的实验指导书的指导价值并不大,对于一些模块的编写指导不够详细。可以适当的很详细地编写一些常见重要的模块,如顶层模块、显示模块、计数模块等,因为这些在绝大部分书本上以貌似简单而很少涉及,造成了同学们对设计的整体意识不高。

2 、提高实验的次数和要求,在本学期的实验中,很大部分同学都没有真正掌握,仅仅是知道一些理论,真正能够做出来的少之又少。但是通过此次课程设计,同学们有了很大的提高,可是只有些后悔之心,为什么之就前不懂呢?

在此次课程设计过程中,我提升了自己的自学能力和动手能力,得到了老师和同学们的悉心指导,使我受益匪浅,很多思路和方法都是在讨论过程中逐渐形成和完善的,在此表示衷心的感谢。在完成自己的设计后,我还帮助其他同学解决了一些问题,拓展了自己的思路,享受了合作的快乐,增进了友谊,这也是一笔很大的收获。

- 13 -

基于FPGA的数字跑表的设计

参考文献

[1] 朱如琪. FPGA设计实践教程[M].北京: 科学出版社,2009.

[2] 王金明. 数字系统设计与Verilog HDL[M]. 北京:电子工业出版社,2010. [3] 黄智伟. FPGA系统设计与实践[M]. 北京: 电子工业出版社,2008. [4] 李宥谋. 基于Verilog的FPGA设计基础[M]. 西安: 西安电子科技大学出版社,2009 .

- 14 -

本文来源:https://www.bwwdw.com/article/2un7.html

Top