基于FPGA的计算器设计Word文档下载推荐.docx
《基于FPGA的计算器设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《基于FPGA的计算器设计Word文档下载推荐.docx(42页珍藏版)》请在冰豆网上搜索。
本次设计基于现场可编程逻辑器件FPGA进行设计,应用硬件描述语言VHDL编程并在Altera公司的QuartusⅡ软件上实现仿真。
需要进行计算器的常用运算功能的实现,通过外接键盘输入、LED数码显示来达成运算目的。
2硬件描述语言VHDL简介
2.1VHDL的发展
VHDL诞生于1982年。
在1987年底,VHDL被IEEE和美国国防部确认为标准硬件描述语言。
自IEEE公布了VHDL的标准版本,IEEE-1076(简称87版)之后,各EDA公司相继推出了自己的VHDL设计环境,或宣布自己的设计工具可以和VHDL接口。
此后VHDL在电子设计领域得到了广泛的接受,并逐步取代了原有的非标准的硬件描述语言。
而VerilogHDL是由GDA(GatewayDesignAutomation)公司的PhilMoorby在1983年末首创的,最初只设计了一个仿真与验证工具,之后又陆续开发了相关的故障模拟与时序分析工具。
1985年Moorby推出它的第三个商用仿真器VerilogXL,获得了巨大的成功,从而使得VerilogHDL迅速得到推广应用。
1989年CADENCE公司收购了GDA公司,使得VerilogHDL成为了该公司的独家专利。
1990年CADENCE公司公开发表了VerilogHDL,并成立LVI组织以促进VerilogHDL成为IEEE标准,即IEEEStandard1364-1995。
2.2VHDL的特点
VHDL语言主要用于描述数字系统的结构、行为、功能和接口,与其他硬件描述语言相比,VHDL语言有如下优越之处[2]:
1)VHDL语言支持自上而下(TopDown)和基于库(LibraryBase)的设计方法,还支持同步电路、异步电路、FPGA以及其他随机电路的设计;
2)VHDL语言具有多层次描述系统硬件功能的能力,可以从系统的数学模型直到门级电路,其高层次的行为描述可以与低层次的RTL描述和结构描述混合使用,还可以自定义数据类型,给编程人员带来较大的自由和方便;
3)VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必关心最终设计实现的目标器件是什么;
4)VHDL具有电路仿真与验证功能,可以保证设计的正确性,用户甚至不必编写如何测试相量便可以进行源代码级的调试,而且设计者可以非常方便地比较各种方案之间的可行性及其优劣,不需做任何实际的电路实验;
5)VHDL语言可以与工艺无关编程;
6)VHDL语言标准、规范,易于共享和复用。
2.3VHDL语言结构
图2.1VHDL程序结构框图[3]
图2.1中是VHDL的全部结构,但实际上并不需要全部的结构,就像在许多设计项目中,大部分工程师只用到VHDL其中的30%的语法;
通常图2.2的结构才是基本和必需的。
图2.2VHDL程序基本结构
2.3.1实体(ENTITY)
实体作为一个设计实体的组成部分,其功能是对这个设计实体与外部电路进行接口描述,它是设计实体的表层设计单元;
实体说明部分规定了设计单元的输入输出接口信号或引脚,它是设计实体对外一个通信界面。
就一个设计实体面言,外界所看到的仅仅是它的界面上的各种接口。
它可以拥有一个或多个结构体,用于描述此设计实体的逻辑结构和逻辑功能,对于外界来主,这一部分是不可见的。
不同逻辑功能的实体可以拥有相同的实体描述,这是因为实体类似于原理图中的一个部件符号,而其的逻辑功能是由设计实体中结构体的描述确定的。
实体是VHDL的基本设计单元,它可以对一个门电路、一个芯片、一块电路板乃至整个系统进行接口描述。
其结构:
ENTITY实体名IS[4]
[GENERIC(常数名:
数据类型[:
设定值];
{常数名:
设定值]});
]
[PORT(端口名:
端口模式数据类型;
{端口名:
端口模式数据类型});
ENDENTITY实体名;
2.3.2结构体(ARCHITECTURE)
结构体是实体所定义的设计实体中的一个组成部分。
结构体描述设计实体的内部结构和实体端口间的逻辑关系。
结构体由两大部分组成[5]:
对数据类型、常数、信号、子程序和元件等元素的说明部分;
描述实体逻辑行为的,以各种不同的描述风格表达的功能描述语句,它们包括各种形式的顺序描述语句和并行描述语句。
其语句格式如下:
ARCHITECTURE结构体名;
[说明语句]
BEGIN
[功能描述语句]
ENDARCHITECTURE结构体名;
图2.3中的五种语句结构的基本组成和功能分别是:
块语句是由一个系列并行执行语句构成的组成体,它的功能是将结构中的并行语句组成一个或多个模块。
进程语句定义顺序语句模块,用以将从外部获得的信号值,或内部的运算数据向其它的信号进行赋值。
信号赋值语句将设计实体内的处理结果向定义的信号或界面端口进行赋值。
子程序调用语句用以调用过程或者函数,并将此元件的端口与其它的元件、信号或高层次实体的界面端口进行连接。
图2.3结构体构造图
2.4VHDL软件设计简介
系统电路的软件设计可采用工具软件QuartusⅡ,用该工具软件所支持的语言——硬件描述语言VHDL,以文本的方式进行编程输入。
在编程时分别对控制、计数、锁存、译码等电路模块进行VHDL文本描述,使每个电路模块以及器件都以文本的形式出现,然后通过编译、波形分析、仿真、调试来完善每个器件的功能。
单个器件制作完成后,然后将它们生成库文件,并产生相应的符号,最后用语言将各个已生成库文件的器件的各个端口连接在一起,从而形成了系统主电路的软件结构。
在连接器件时,也可以采用图形输入方式,即在图形输入界面中调出先制作好的库文件器件符号,再将每个器件符号的各端口直接连线,从而构成系统主电路。
在上述工作的基础上,再进行波形分析、仿真调试便完成整个软件设计[6]。
3现场可编程门阵列(FPGA)简介
3.1可编程逻辑器件
可编程逻辑器件(PLD-ProgrammableLogicDevices)是一种由用户编程以实现某种逻辑功能的新型逻辑器件。
它诞生于20世纪70年代,在20世纪80年代以后,随着集成电路技术和计算机技术的发展而迅速发展起来的。
可编程逻辑器件自问世以来,PLD经历了从PROM、PLA、PAL、GAL到FPGA、ispLSI等高密度PLD的发展过程。
在此期间,PLD的集成度、速度不断提高,功能不断增强,结构趋于更合理,使用变得更灵活方便。
PLD的出现打破了由中小型通用型集成电路和大规模专用集成电路垄断的局面。
与中小规模通用型集成电路相比,用PLD实现数字系统,有研制周期短、先期投资少、无风险、修改逻辑设计方便、小批量生产成本低等优势。
随着可编程逻辑器件性能价格比的不断提高,EDA开发软件的不断完善,现代电子系统的设计将越来越多地使用可编程逻辑器件,特别是大规模可编程逻辑器件。
如果说一个电子系统可以像积木堆积起来的话,那么现在构成许多电子系统仅仅需要3种标准的积木块――微处理器、存储器和可编程逻辑器件,甚至只需一块大规模可编程逻辑器件。
PAL(ProgrammableArrayLogic)器件是20世纪70年代末期出现的一种低密度、一次性可编程逻辑器件。
GAL(GenericArrayLogic)器件是继PAL器件之后,在20世纪80年代中期推出的一种低密度可编程逻辑器件。
它在结构上采用了输出逻辑宏单元(OLMC--OutputLogicMacroCell)结构形式,在工艺上吸收EEPROM的浮栅技术,从而使GAL器件具有可擦除、可重新编程、数据可长期保存的结构特点。
CPLD(ComplexProgrammableLogicDevice)是万门以上的复杂可编程逻辑器件,采用CMOSEPROM、EEPROM、快闪存储器和SRAM等编程技术,从而构成高密度、高速度和低功耗的可编程逻辑器件[7]。
3.2现场可编程门阵列(FPGA)
FPGA是现场可编程门阵列(FieldProgrammableGateArray)的简称。
FPGA器件及其开发系统是开发大规模数字集成电路的新技术。
它利用计算机辅助设计,绘制出实现用户逻辑的原理图、编辑布尔方程或用硬件描述语言等方式作为设计输入;
然后经一系列转换程序、自动布局布线、模拟仿真的过程;
最后生成配置FPGA器件的数据文件,对FPGA器件初始化。
这样就实现了满足用户要求的专用集成电路,真正达到了用户自行设计、自行研制和自行生产集成电路的目的。
FPGA是一种半定制的集成电路,其特点是直接面向用户,具有极大的灵活性和通用性,开发效率高,硬件测试和实现快捷,工作可靠性好而且技术维护简单。
FPGA相对于CPLD而言,其结构特点在于FPGA是基于查找表look-up-table的。
查找表(look-up-table)简称为LUT,LUT本质上是一个RAM。
FPGA中多使用4输入的LUT,所以每一个LUT可以看成一个有4位地址线的16x1的RAM。
当用户通过原理图或HDL语言描述了一个逻辑电路后,PLD/FPGA开发软件会自动计算逻辑电路的所有可能的结果,并把结果事先写入RAM,这样,每输入一个信号进行逻辑运算就等于输入一个地址进行查表,找出地址对应的内容,然后输出即可。
3.2.1FPGA的器件结构与工作原理
FPGA(FieldProgrammableGateArray)即现场可编程逻辑阵列,是大规模可编程集成电路的主流器件。
FPGA一般由三种可编程电路和一个用于存放编程数据的SRAM(静态随机存储器)组成,这三种可编程电路是:
可编程逻辑阵列LAB(LogicArrayBlock),输入输出模块IOB(I/OBlock)和互连资源IR(InterconnectResource)。
FPGA可编程逻辑形成的方法是基于查找表LUT(LookUpTable)结构的,LUT是可编程的最小逻辑构成单元[4]。
1.可编程逻辑阵列LAB
可编程逻辑阵列是由一系列相邻的逻辑单元LE(LogicElement)构成的,每个LAB包括八个逻辑单元LE、相连的进位链和级联链,LAB控制信号和LAB局部互连。
LAB的构成、ACEK系列芯片的“粗粒度(coarse-grained)"
结构,有利于EDA软件进行布局布线,优化器件的利用进而提高整个数字系统的性。
其中的逻辑单元LE是一种基于查找表的函数发生器。
它能够实现4输入1输出的任意逻辑函数。
每个LE包含一个4输入的查找表、一个带有同步使能的可编程触发器、一个进位链和一个级联链。
每个LE有两个输出分别可以驱动局部互连和快速通道互连。
LE有两个输出驱动内部互连,一个是驱动局部互连输出,另一个驱动行或列的快速通道FastTrack的互连输出,这两个输出可以单独控制。
因此在一个逻辑单元LE中的触发器和查找表能够用来完成不相关的功能,从而提高LE的资源利用率。
在ACEK系列芯片的结构中还提供了两种专用的高速数据通道,用于连接相邻的LE,但不占用局部互连通路,它们是进位链和级联链。
进位链用来支持高速计数器和加法器,它提供了LE之间的决速向前进位功能。
来自低位的进位信号经进位链向前直接送到高位,同时馈入查找表和进位链的下一段。
这种特点使得ACEK结构能够实现高速计数器、加法器和宽位比较器。
级联链可以用来实现多输入数的逻辑函数。
相邻的查找表并行地完成部分逻辑功能,级联链把中间结果拼接起来。
进位链和级联链的使用有利于提高器件的工作速度,但是大量使用进位链和级联链会限制布局布线的灵活性,导致资源的浪费。
因此在设计过程应该权衡考虑,在FPGA芯片资源利用和工作速度之间寻求平衡。
2.输入/输出模块IOB
ACEK器件的I/O引脚是由一些I/O单元驱动的。
IOE(I/OElement)位于快速通道的行和列末端,包含一个双向的缓冲器和一个寄存器。
这个寄存器可以用作需要快速建立时间的外部数据输入寄存器,也可以作为需要快速“时钟到输出”性能的数据输出寄存器。
IOE可以配置成输入、输出或双向口。
ACEK器件中的IOE具有许多特性,支持JTAG编程、三态缓冲和漏极开路输出等等。
每个IOE的时钟、清零、时钟使能和输出使能的控制均由I/O控制信号网络提供,采用高速驱动以减小通过器件的时间偏差。
此外,ACEK器件还提供了若干专用输入引脚,这些引脚用来驱动IOE寄存器的控制端,使用了专用的布线通道,以便具有比快速通道更短的延迟和更小的偏差。
3.互连资源IR
可编程的互连资源包括各种长度的金属连线线段和一些可编程的连线开关,它们将各个逻辑阵列之间、及其与IO模块之间互相连接起来,构成各种功能复杂的系统。
在ACEK中互连结构是通过快速通道(FastTrack)实现的。
FastTrack遍布于整个ACEK器件,是一系列水平和垂直走向的连续式布线通道。
每一行的LAB都有一个专用的“行互连”,“行互连”可以驱动。
I/O引脚或馈送到器件中的其LAB;
“列互连”连接各行,也能驱动I/O引脚。
这种布线结构能够有效提高布线效率,使得即使非常复杂的设计也能够测定其延时性。
4.嵌人式阵列块EAB
嵌人式阵列块EAB是在输入输出口上带有寄存器的灵活的RAM块,是由一系列嵌人式RAM单元组成的。
EAB的逻辑功能是在配置期间,用只读模式对EAB编程产生一个大型查找表来实现的。
采用查找表实现组合逻辑比一般算法快,EAB的快速时间通道使得这一先进性能进一步得到加强。
当要实现存储器功能时,每个EAB提供2048比特位,每一个EAB是一个独立的结构,它具有共同的输入、互连和控制信号。
每个EAB含有一个行互连馈入端,EAB的输出能够同时驱动行互连通道和列互连通道。
这一特性增加了EAB的可利用布线资源。
因此,EAB可以非常方便地用于实现一些规模不大的RAM,ROM,FIFO等功能模块;
同时在实现地址译码器、状态机、微控制器等复杂逻辑时也具备了一定优势[5]。
3.2.2基于EDA平台的FPGA开发流程
一个完整、典型的EDA设计流程[6][7]即是自顶向下设计方法的具体实施过程,也是EDA软件本身的组成结构。
在实践中进一步了解支持这一个设计流程的诸多设计工具,有利于排解设计中的具体问题,提高设计质量。
1.设计输入
基于EDA软件平台的FPGA开发流程,一般有两种设计输入方式:
图形输入和硬件描述语言文本输入。
下面将重点介绍采用VHDL硬件描述语言进行设计输入方法,这是笔者在设计开发过程中采用的主要方法。
VHDL作为电子工程主流硬件描述语言,是EDA技术的重要组成部分。
它于1983年由美国国防部创建,由IEEE协会进一步发展并在1987年成为IEEE国际标准。
自IEEE协会公布了VHDL标准版本(IEEEStd1076)之后,各大EDA公司相继推出支持VHDL语言的开发环境。
从此VHDL作为硬件描述语言的业界标准之一,在电子设计领域得到广泛应用,并逐步成为事实上的通用硬件描述语言。
VHDL语言具有很强的电路建模能力,具有良好的电路行为描述和系统描述的能力,能从多个层次对数字系统进行建模和描述;
VHDL语言还具有与硬件电路无关和设计平台无关的特性,并且在语言易读性和层次化结构化设计方面表现了强大的生命力和应用潜力。
这些特性使得VHDL语言在支持自顶向下的EDA设计流程方面显得游刃有余。
因此,采用VHDL进行电子系统设计可以让设计者专心致力于其功能的实现,而不需要对不影响功能的与工艺相关的问题花费过多的时间和精力,从而大大简化了设计任务,提高了设计效率和可靠性。
采用VHDL文本设计输入与传统的计算机软件语言编辑输入基本上一样,就是使用VHDL描述数字系统的功能,进行文本编辑输入。
事实上,纯粹的VHDL设计输入方法仍然是最基本、最有效和最普遍的设计输入方法。
2.设计综合
在电子设计领域“综合”的概念可以表示为:
将行为和功能层次表达的电子系统转化为低层次的便于具体实现的模块组合装配而成的过程。
事实上,设计过程通常从高层次的行为描述开始,直到最底层的结构描述结束,每一个步骤都是上一个层次的综合转换。
在FPGA设计开发过程中,整个综合过程就是设计者在EDA软件平台上编辑输入VHDL文本,依据给定电路结构组件和约束控制条件进行编译、优化、转换和综合,最终获得门级电路甚至更底层的电路描述网表文件。
因此设计综合的过程就是将软件设计的VHDL描述文本与硬件结构挂钩,是软件描述转化为硬件电路的关键步骤,是文本描述与硬件实现之间的一座桥梁。
3.结构适配
适配器也称为结构综合器,它的功能是将综合器产生的网表文件配置于指定的FPGA目标器件中,使之产生最终的下载文件。
适配过程中所选定的FPGA目标器件必须属于综合器原来指定的目标器件系列,这是因为适配器的适配对象是直接与器件的结构细节相对应的。
逻辑综合通过后必须利用适配器将综合后的网表文件针对某一具体目标器件进行逻辑映射操作,其中包括底层器件配置、逻辑分割、逻辑优化、逻辑布局布线操作。
适配完成后可以利用适配所产生的仿真文件作精确的时序仿真,同时产生可用于编程下载文件。
4.功能仿真和时序仿真
在编程下载前必须利用EDA工具对配置生成的结果进行模拟分析,这就是所谓的仿真。
仿真的过程就是让计算机根据一定的算法和一定的仿真库对EDA设计进行模拟,以验证设计,排除错误。
仿真包括功能仿真和时序仿真。
功能仿真:
不经过综合和适配阶段,在设计项目编译后直接进入门级仿真器进行模拟测试。
主要用于测试设计项目的逻辑功能,用以了解其实现的功能是否满足设计要求,在功能仿真的过程不涉及任何具体器件的硬件特性。
时序仿真:
当设计项目通过功能仿真初步确定满足设计要求后,需要绑定具体器件进行时序仿真。
时序仿真就是接近真实器件运行特性的仿真,仿真文件包含了器件硬件特性参数,因而仿真精度高。
但时序仿真的仿真文件必须来自针对具体器件的综合器和适配器。
综合所得的EDIF网表文件通常作为FPGA适配器的输入文件,产生的仿真网表文件包含了器件精确的延时信息。
5.编程下载
把适配后生成的下载或配置文件,通过编程器或编程电缆向FPGA进行下载,以便进行硬件调试和验证,从而实现满足设计要求的电子系统[8]。
4QuartusⅡ概述及其设计流程
4.1QuartusⅡ概述
QuartusⅡ是Altera公司的综合性PLD开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(AlteraHardwareDescriptionLanguage)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。
QuartusⅡ可以在XP、Linux以及Unix上使用,除了可以使用Tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。
具有运行速度快,界面统一,功能集中,易学易用等特点。
QuartusⅡ支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。
对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方EDA工具。
此外,QuartusⅡ通过和DSPBuilder工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;
支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。
MaxplusII作为Altera的上一代PLD设计软件,由于其出色的易用性而得到了广泛的应用。
目前Altera已经停止了对MaxplusII的更新支持,QuartusⅡ与之相比不仅仅是支持器件类型的丰富和图形界面的改变。
Altera在QuartusⅡ中包含了许多诸如SignalTapII、ChipEditor和RTLViewer的设计辅助工具,集成了SOPC和HardCopy设计流程,并且继承了MaxplusII友好的图形界面及简便的使用方法。
AlteraQuartusⅡ作为一种可编程逻辑的设计环境,由于其强大的设计能力和直观易用的接口,越来越受到数字系统设计者的欢迎。
Altera的QuartusⅡ可编程逻辑软件属于第四代PLD开发平台。
该平台支持一个工作组环境下的设计要求,其中包括支持基于Internet的协作设计。
Quartus平台与Cadence、ExemplarLogic、MentorGraphics、Synopsys和Synplicity等EDA供应商的开发工具相兼容。
改进了软件的LogicLock模块设计功能,增添了FastFit编译选项,推进了网络编辑性能,而且提升了调试能力。
支持MAX7000/MAX3000等乘积项器件。
4.2QuartusⅡ设计流程
ⅰ.建立新工程:
首先将所设计工程项目划分为若干子模块,将每个子模块单独存放在一个文件夹中,并分别进行编译,验证通过后,将每个子模块的VHDL文本文件添加到总工程文件夹中,并建立图元(建立图元block,右键点击.V文件,选择createsymbolfilesforcurrentfiles),将各个图元(亦即子模块)连接起来构成总体设计项目。
ⅱ.设计各子模块:
编写各子模块相应的代码,并分别进行编译,验证通过后将各子模块VHDL文件添加到顶层设计中,创建图元,进行连接以完成总体项目的设计。
这部分就是将管脚连好。
在原理图编辑中,英文的大小写代表相同的含义,只要器件连接线的节点名称相同就会默认为是连接的,总线(Bus)在图形编辑窗口显示的是一条粗线,总线必须在名称的后面加上“[a..b]”,表示一条总线内所含有的节点编号,原理图编辑的文件扩展名为“.bdf”,在QuartusII中工程名称必须与顶层实体名称相同,且VHDL设计中实体名称亦为相同的名字,否则不能进行编译。
ⅲ.编