摘要本设课程设计是基于FPGA的数字跑表的设计,利用Verilog HDL 语言和Quartus II软件以及FPGA实验操作平台来实现的。
本论文的重点是用硬件语言Verilog HDL 来描述数字跑表,偏重于软件设计。
大致内容是首先简单介绍了EDA的现状和前景, Verilog HDL 语言特点,应用平台FPGA,之后阐述了数字跑表的设计思想和大体的设计流程,最后进入本设计的核心设计部分,用Verilog HDL 语言设计数字跑表电路,着重对各个模块进行了详细的分析和说明。
【关键词】Verilog HDL 语言;Quartus II 软件;数字秒表目录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)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动态可重构技术的开拓,将推动数字系统设计观念的巨大转变。
1.2Verilog 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实现数字跑表运行的方案设计如下图所示: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)按键。
复位信号高电平有效,可对跑表异步清零;当启动/暂停键为低电平时,跑表开始计时,高电平时暂停,变低后在原来的数值基础上继续计数。
然后计数器的每个位的值赋给六选一数据选择器,数据选择器选择的位值再赋给七段数码管译码器,这样就可以实现显示当前数字。
按照自顶而下的设计方法数字跑表的功能分割,如下图:计时电路的作用是计时,计时的一般方法是对时钟脉冲进行计数。
本设计在外部提供了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译码器和数据选择器两个子模块。
下面确定模块之间的接口关系,各模块的接口信号说明如下:计时控制器:计时控制器的输入信号时启动、暂停、和清零信号。
为了方便,将启动和暂停功能设置在同一个案件上;按一次是启动,按第二次是暂停,按第三次则是继续,以此类推。
所以计时控制器共有两个开关输入信号,记启动/暂停和清零。
计时器的输出信号为计数允许/保持信号和清零信号。
计时电路:计时电路的输入信号为1kHz时钟、计时允许/保持信号和清零信号;输出为10ms,100ms,s,min的计时数据。
它的下一级模块的接口信号如下:1、时基电路大的输入信号频率为1kHz,输出时钟周期为10ms。
2、计数器的输入信号为计数允许信号、清零信号和1kHz时钟,输出为10ms,100ms,s,min的计时数据。
显示电路:显示电路的输入信号为计时器的10ms,100ms,s,min计时数据。
输出为七段译码驱动信号和位选择信号。
2.3各功能模块的设计和实现自顶而下完成各层次的设计描述,数字跑表可以划分为5个功能模块:顶层模块、计时模块、时基分频器模块、数据选择模块、数码管显示模块。
本设计中部分模块都用原理图和VerilogHDL语言两种方法设计。
以VerilogHDL语言设计为主。
顶层模块顶层模块只说明功能的分配、内部功能块和对外接口关系,功能模块实际的逻辑功能和具体的实现由下一层模块描述。