版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、基于 FPGA 的计算器设计摘要本文介绍了一个简单计算器的设计,该设计采用了现场可编程逻辑器件FPGA 设计,并基于硬件描述语言 VHDL在Altera公司的Quartus II软件上实现仿真。系统由计算部分、 存储部分、 显示部分和输入部分四个部分组成, 计算部分为加法器、 减法器、乘法器和除法器, 存储部分需要3 个存储器来实现: 内部累加器( acc) 、 输入寄存器( reg)以及结果暂存器(ans) 。显示部分由四个七段译码管组成,分别来显示输入数字,输入部分采用外接键盘,由0 9 十个数字按键,加减乘除四个运算符按键,一个等号按键和一个清零按键组成的。通过外部的按键可以完成四位数之
2、内的,加?、 ,减?、 ,乘?、 , 除?四种功能运算,其结构简单,易于实现。关键词: FPGA; VHDL ;计算器201 概述在国外,电子计算器在集成电路发明后,只用短短几年时间就完成了技术飞跃,经过激烈的市场竞争,现在的计算器技术己经相当成熟。计算器已慢慢地脱离原来的 “辅助计算工具” 的功能定位,正向着多功能化、可编程化方向发展,在各个领域都得到了广泛的应用。用计算器不仅可以实现各种各样复杂的数学计算还可以用来编制、运行程序,甚至解方程组,图形计算器还可以进行图形处理。计算器内置的软件允许用户进行类似于对计算机的文件和目录管理等操作,允许用户对图形界面进行定制,同时各种新技术也被应用到
3、计算器里使计算器功能越来越强大。可以说,计算器就是一个 “微微型 ” 的计算机。国内也有厂商利用计算器芯片开发新的产品,但对计算器技术的研究、计算器芯片的设计还处于起步阶段。计算器的主要功能还是在于 “计算 ” ,不妨称之为 “低档计算器 ”。即便是对这种计算器,很多厂商也只从事计算器的组装、销售业务。一些 IC 设计公司、芯片提供商也开始研究计算器技术。本次设计基于现场可编程逻辑器件FPGA 进行设计,应用硬件描述语言 VHDL 编程并在Altera公司的Quartus R软件上实现仿真。需要进行计算器的常用运算功能的 实现,通过外接键盘输入、 LED 数码显示来达成运算目的。2 硬件描述语
4、言 VHDL 简介2.1 VHDL 的发展VHDL 诞生于 1982年。在 1987年底, VHDL 被 IEEE 和美国国防部确认为标准硬件描述语言。自IEEE公布了 VHDL的标准版本,IEEE-1076 (简称87版)之后,各EDA公司相继推出了自己的 VHDL 设计环境,或宣布自己的设计工具可以和 VHDL 接口。此后 VHDL 在电子设计领域得到了广泛的接受, 并逐步取代了原有的非标准的硬件描述语言。而 Verilog HDL 是由 GDA(Gateway Design Automation)公司的 PhilMoorby 在 1983年末首创的,最初只设计了一个仿真与验证工具,之后又
5、陆续开发了相关的故障模拟与时序分析工具。1985年Moorby推出它的第三个商用仿真器 Verilog XL,获得了巨大的成功,从而使得Verilog HDL 迅速得到推广应用。1989年 CADENCE 公司收购了 GDA 公司,使得 Verilog HDL 成为了该公司的独家专利。 1990年 CADENCE 公司公开发表了Verilog HDL, 并成立 LVI 组织以促进Verilog HDL 成为 IEEE 标准,即 IEEE Standard1364-1995。2.2 VHDL 的特点VHDL 语言主要用于描述数字系统的结构、行为、功能和接口,与其他硬件描述语言相比, VHDL 语
6、言有如下优越之处2 :1) VHDL语言支持自上而下(Top Down)和基于库(Library Base )的设计方法, 还支持同步电路、异步电路、FPGA 以及其他随机电路的设计;2) VHDL 语言具有多层次描述系统硬件功能的能力,可以从系统的数学模型直到门级电路,其高层次的行为描述可以与低层次的 RTL 描述和结构描述混合使用,还可以自定义数据类型,给编程人员带来较大的自由和方便;3) VHDL 对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必关心最终设计实现的目标器件是什么;4) VHDL 具有电路仿真与验证功能,可以保证设计的正确性,用户甚至不必编写如何测试相量便可以进
7、行源代码级的调试,而且设计者可以非常方便地比较各种方案之间的可行性及其优劣,不需做任何实际的电路实验;5) VHDL语言可以与工艺无关编程;6) VHDL语言标准、规范,易于共享和复用2.3 VHDL语言结构Component 定倒号定又Behivior Pnocwi 括0la屏w描述O-Slruchire 描述图2.1VHDL程序结构框图3图2.1中是VHDL的全部结构,但实际上并不需要全部的结构,就像在许多设计项目中,大部分工程师只用到 VHDL其中的30%的语法;通常图2.2的结构才是基本和必USE定义区ENTITY定义区ARCHITECTURE义区图2.2 VHDL程序基本结构2.3.
8、1 实体( ENTITY )实体作为一个设计实体的组成部分, 其功能是对这个设计实体与外部电路进行接口描述,它是设计实体的表层设计单元;实体说明部分规定了设计单元的输入输出接口信号或引脚,它是设计实体对外一个通信界面。就一个设计实体面言,外界所看到的仅仅是它的界面上的各种接口。它可以拥有一个或多个结构体,用于描述此设计实体的逻辑结构和逻辑功能,对于外界来主,这一部分是不可见的。不同逻辑功能的实体可以拥有相同的实体描述,这是因为实体类似于原理图中的一个部件符号,而其的逻辑功能是由设计实体中结构体的描述确定的。 实体是 VHDL 的基本设计单元, 它可以对一个门电路、一个芯片、一块电路板乃至整个系
9、统进行接口描述。其结构:ENTITY 实体名 IS4GENERIC (常数名:数据类型:设定值 ; 常数名:数据类型 :设定值 ) ; PORT (端口名:端口模式 数据类型; 端口名:端口模式 数据类型 ) ; END ENTITY 实体名;2.3.2 结构体( ARCHITECTURE )结构体是实体所定义的设计实体中的一个组成部分。 结构体描述设计实体的内部结构和实体端口间的逻辑关系。结构体由两大部分组成5 :对数据类型、常数、信号、子程序和元件等元素的说明部分;描述实体逻辑行为的,以各种不同的描述风格表达的功能描述语句,它们包括各种形式的顺序描述语句和并行描述语句。其语句格式如下:AR
10、CHITECTURE 结构体名; 说明语句BEGIN 功能描述语句END ARCHITECTURE 结构体名;图 2.3 中的五种语句结构的基本组成和功能分别是:块语句是由一个系列并行执行语句构成的组成体,它的功能是将结构中的并行语句组成一个或多个模块。进程语句定义顺序语句模块,用以将从外部获得的信号值,或内部的运算数据向其 它的信号进行赋值。信号赋值语句将设计实体内的处理结果向定义的信号或界面端口进行赋值。子程序调用语句用以调用过程或者函数,并将此元件的端口与其它的元件、信号或 高层次实体的界面端口进行连接结构体(ARCHITECTURE图2.3结构体构造图2.4 VHDL软件设计简介系统电
11、路的软件设计可采用工具软件 Quartus II ,用该工具软件所支持的语言一 一硬件描述语言VHDL ,以文本的方式进行编程输入。在编程时分别对控制、计数、锁 存、译码等电路模块进行VHDL文本描述,使每个电路模块以及器件都以文本的形式出 现,然后通过编译、波形分析、仿真、调试来完善每个器件的功能。单个器件制作完成 后,然后将它们生成库文件,并产生相应的符号,最后用语言将各个已生成库文件的器件的各个端口连接在一起,从而形成了系统主电路的软件结构。在连接器件时,也可以采用图形输入方式,即在图形输入界面中调出先制作好的库文件器件符号,再将每个器件符号的各端口直接连线,从而构成系统主电路。在上述工
12、作的基础上,再进行波形分析、仿真调试便完成整个软件设计6 。3 现场可编程门阵列( FPGA )简介3.1 可编程逻辑器件可编程逻辑器件( PLD-Programmable Logic Devices) 是一种由用户编程以实现某种逻辑功能的新型逻辑器件。它诞生于 20 世纪 70 年代,在 20 世纪 80 年代以后,随着 集成电路技术和计算机技术的发展而迅速发展起来的。可编程逻辑器件自问世以来,PLD 经历了从 PROM 、 PLA、 PAL、 GAL 到 FPGA、 ispLSI 等高密度 PLD 的发展过程。在此期间, PLD 的集成度、速度不断提高,功能不断增强,结构趋于更合理,使用变
13、得更灵活方便。 PLD 的出现打破了由中小型通用型集成电路和大规模专用集成电路垄断的局面。与中小规模通用型集成电路相比,用 PLD 实现数字系统,有研制周期短、先期投资少、无风险、修改逻辑设计方便、小批量生产成本低等优势。随着可编程逻辑器件性能价格比的不断提高, EDA 开发软件的不断完善,现代电子系统的设计将越来越多地使用可编程逻辑器件,特别是大规模可编程逻辑器件。如果说一个电子系统可以像积木堆积起来的话, 那么现在构成许多电子系统仅仅需要3 种标准的积木块一一微处理器、存储器和可编程逻辑器件,甚至只需一块大规模可编程逻辑 器件。PAL ( Programmable Array Logic湍
14、件是20世纪70年代末期出现的一种低密度、 一次性可编程逻辑器件。 GAL(Generic Array Logic) 器件是继 PAL 器件之后, 在 20 世纪 80 年代中期推出的一种低密度可编程逻辑器件。它在结构上采用了输出逻辑宏单元(OLMC-Output Logic Macro Cell ) 结构形式,在工艺上吸收EEPROM 的浮栅技术,从而使 GAL 器件具有可擦除、 可重新编程、 数据可长期保存的结构特点。 CPLD(Complex Programmable Logic Device)是万门以上的复杂可编程逻辑器件,采用 CMOS EPROM、 EEPROM、快闪存储器和SRA
15、M等编程技术,从而构成高密度、高速度和低功耗的可 编程逻辑器件 7 。3.2 现场可编程门阵列( FPGA )FPGA是现场可编程门阵列(Field Programmable Gate Array)的简称。FPGA器件 及其开发系统是开发大规模数字集成电路的新技术。它利用计算机辅助设计,绘制出实现用户逻辑的原理图、编辑布尔方程或用硬件描述语言等方式作为设计输入;然后经一系列转换程序、 自动布局布线、 模拟仿真的过程; 最后生成配置FPGA 器件的数据文件,对 FPGA 器件初始化。 这样就实现了满足用户要求的专用集成电路, 真正达到了用户自 行设计、自行研制和自行生产集成电路的目的。FPGA
16、是一种半定制的集成电路,其特点是直接面向用户,具有极大的灵活性和通用性,开发效率高,硬件测试和实现快捷,工作可靠性好而且技术维护简单。FPGA 相对于 CPLD 而言, 其结构特点在于FPGA 是基于查找表look-up-table 的。查找表(look-up-table)简称为LUT , LUT本质上是一个 RAM。FPGA中多使用4输 入的 LUT ,所以每一个LUT 可以看成一个有4 位地址线的 16x1 的 RAM 。当用户通过原理图或 HDL 语言描述了一个逻辑电路后, PLD/FPGA 开发软件会自动计算逻辑电 路的所有可能的结果,并把结果事先写入 RAM ,这样,每输入一个信号进
17、行逻辑运算 就等于输入一个地址进行查表,找出地址对应的内容,然后输出即可。3.2.1 FPGA 的器件结构与工作原理FPGA(Field Programmable Gate Array即现场可编程逻辑阵列,是大规模可编程集成 电路的主流器件。FPGA 一般由三种可编程电路和一个用于存放编程数据的SRAM(静态随机存储器)组成,这三种可编程电路是:可编程逻辑阵列 LAB(Logic Array Block) ,输入输出模块IOB (I/O Block)和互连资源IR(Interconnect Resourceb FPGA可编程逻辑形 成的方法是基于查找表LUT (Look Up Table)结构
18、的,LUT是可编程的最小逻辑构成单 元4。1 .可编程逻辑阵列 LAB可编程逻辑阵列是由一系列相邻的逻辑单元 LE (Logic Element) 构成的,每个LAB包括八个逻辑单元LE 、 相连的进位链和级联链, LAB 控制信号和 LAB 局部互连。 LAB的构成、 ACEK 系列芯片的“粗粒度(coarse-grained )"结构,有利于EDA 软件进行布局布线,优化器件的利用进而提高整个数字系统的性。其中的逻辑单元 LE 是一种基于查找表的函数发生器。它能够实现4 输入 1 输出的任意逻辑函数。 每个 LE 包含一个 4 输入的查找表、 一个带有同步使能的可编程触发器、一个
19、进位链和一个级联链。 每个 LE 有两个输出分别可以驱动局部互连和快速通道互连。LE 有两个输出驱动内部互连,一个是驱动局部互连输出,另一个驱动行或列的快速通道 Fast Track 的互连输出,这两个输出可以单独控制。因此在一个逻辑单元 LE 中的触发器和查找表能够用来完成不相关的功能,从而提高LE 的资源利用率。在 ACEK 系列芯片的结构中还提供了两种专用的高速数据通道,用于连接相邻的LE , 但不占用局部互连通路, 它们是进位链和级联链。 进位链用来支持高速计数器和加法器,它提供了 LE 之间的决速向前进位功能。来自低位的进位信号经进位链向前直接送到高位, 同时馈入查找表和进位链的下一
20、段。 这种特点使得ACEK 结构能够实现高速计数器、加法器和宽位比较器。级联链可以用来实现多输入数的逻辑函数。相邻的查找表并行地完成部分逻辑功能,级联链把中间结果拼接起来。进位链和级联链的使用有利于提高器件的工作速度,但是大量使用进位链和级联链会限制布局布线的灵活性,导致资源的浪费。 因此在设计过程应该权衡考虑, 在 FPGA 芯片资源利用和工作速度之间寻求平衡。2 .输入/输出模块IOBACEK器件的I/O引脚是由一些I/O单元驱动的。IOE (I/O Element)位于快速通道的行和列末端,包含一个双向的缓冲器和一个寄存器。这个寄存器可以用作需要快速建立时间的外部数据输入寄存器,也可以作
21、为需要快速“时钟到输出”性能的数据输出寄存器。 IOE 可以配置成输入、输出或双向口。ACEK 器件中的 IOE 具有许多特性,支持 JTAG 编程、三态缓冲和漏极开路输出等等。每个 IOE 的时钟、清零、时钟使能和输出使能的控制均由 I/O 控制信号网络提供,采用高速驱动以减小通过器件的时间偏差。此外, ACEK 器件还提供了若干专用输入引脚,这些引脚用来驱动 IOE 寄存器的控制端, 使用了专用的布线通道,以便具有比快速通道更短的延迟和更小的偏差。3 .互连资源 IR可编程的互连资源包括各种长度的金属连线线段和一些可编程的连线开关, 它们将各个逻辑阵列之间、及其与IO 模块之间互相连接起来
22、,构成各种功能复杂的系统。在ACEK中互连结构是通过快速通道(Fast Track)实现的。Fast Track遍布于整个ACEK 器件,是一系列水平和垂直走向的连续式布线通道。每一行的 LAB 都有一个专用的“行互连” , “行互连”可以驱动。 I/O 引脚或馈送到器件中的其LAB ; “列互连”连接各行,也能驱动 I/O 引脚。这种布线结构能够有效提高布线效率,使得即使非常复杂的设计也能够测定其延时性。4 .嵌人式阵列块EAB嵌人式阵列块EAB 是在输入输出口上带有寄存器的灵活的 RAM 块, 是由一系列嵌人式 RAM 单元组成的。 EAB 的逻辑功能是在配置期间,用只读模式对EAB 编程
23、产生一个大型查找表来实现的。 采用查找表实现组合逻辑比一般算法快, EAB 的快速时间通道使得这一先进性能进一步得到加强。当要实现存储器功能时,每个EAB 提供 2048 比特位, 每一个 EAB 是一个独立的结构, 它具有共同的输入、 互连和控制信号。 每个 EAB含有一个行互连馈入端, EAB 的输出能够同时驱动行互连通道和列互连通道。 这一特性增加了 EAB 的可利用布线资源。因此, EAB 可以非常方便地用于实现一些规模不大的RAM, ROM, FIFO 等功能模块;同时在实现地址译码器、状态机、微控制器等复杂逻辑时也具备了一定优势5 。3.2.2 基于 EDA 平台的 FPGA 开发
24、流程一个完整、 典型的 EDA 设计流程 67 即是自顶向下设计方法的具体实施过程, 也是EDA 软件本身的组成结构。在实践中进一步了解支持这一个设计流程的诸多设计工具,有利于排解设计中的具体问题,提高设计质量。1 .设计输入基于 EDA 软件平台的 FPGA 开发流程,一般有两种设计输入方式:图形输入和硬件描述语言文本输入。 下面将重点介绍采用 VHDL 硬件描述语言进行设计输入方法, 这是笔者在设计开发过程中采用的主要方法。 VHDL 作为电子工程主流硬件描述语言, 是EDA 技术的重要组成部分。它于 1983年由美国国防部创建,由 IEEE 协会进一步发展并在 1987年成为 IEEE
25、国际标准。自 IEEE 协会公布了 VHDL 标准版本 (IEEE Std 1076)之后, 各大 EDA 公司相继推出支持VHDL 语言的开发环境。 从此 VHDL 作为硬件描述语言的业界标准之一,在电子设计领域得到广泛应用,并逐步成为事实上的通用硬件描述语言。VHDL 语言具有很强的电路建模能力,具有良好的电路行为描述和系统描述的能力,能从多个层次对数字系统进行建模和描述; VHDL 语言还具有与硬件电路无关和设计平台无关的特性, 并且在语言易读性和层次化结构化设计方面表现了强大的生命力和应用潜力。这些特性使得VHDL 语言在支持自顶向下的 EDA 设计流程方面显得游刃有余。 因此, 采用
26、 VHDL 进行电子系统设计可以让设计者专心致力于其功能的实现, 而不 需要对不影响功能的与工艺相关的问题花费过多的时间和精力, 从而大大简化了设计任务,提高了设计效率和可靠性。采用 VHDL 文本设计输入与传统的计算机软件语言编辑输入基本上一样, 就是使用VHDL 描述数字系统的功能,进行文本编辑输入。事实上,纯粹的 VHDL 设计输入方 法仍然是最基本、最有效和最普遍的设计输入方法。2 .设计综合在电子设计领域“综合”的概念可以表示为:将行为和功能层次表达的电子系统转化为低层次的便于具体实现的模块组合装配而成的过程。事实上,设计过程通常从高层次的行为描述开始,直到最底层的结构描述结束,每一
27、个步骤都是上一个层次的综合转换。在 FPGA 设计开发过程中,整个综合过程就是设计者在 EDA 软件平台上编辑输入VHDL 文本,依据给定电路结构组件和约束控制条件进行编译、优化、转换和综合,最终获得门级电路甚至更底层的电路描述网表文件。 因此设计综合的过程就是将软件设计 的 VHDL 描述文本与硬件结构挂钩, 是软件描述转化为硬件电路的关键步骤, 是文本描 述与硬件实现之间的一座桥梁。3 .结构适配适配器也称为结构综合器,它的功能是将综合器产生的网表文件配置于指定的FPGA 目标器件中,使之产生最终的下载文件。适配过程中所选定的 FPGA 目标器件必须属于综合器原来指定的目标器件系列, 这是
28、因为适配器的适配对象是直接与器件的结构细节相对应的。 逻辑综合通过后必须利用适配器将综合后的网表文件针对某一具体目标器件进行逻辑映射操作,其中包括底层器件配置、逻辑分割、逻辑优化、逻辑布局布线操作。适配完成后可以利用适配所产生的仿真文件作精确的时序仿真,同时产生可用于编程下载文件。4 .功能仿真和时序仿真在编程下载前必须利用 EDA 工具对配置生成的结果进行模拟分析,这就是所谓的仿真。 仿真的过程就是让计算机根据一定的算法和一定的仿真库对EDA 设计进行模拟,以验证设计,排除错误。仿真包括功能仿真和时序仿真。功能仿真:不经过综合和适配阶段,在设计项目编译后直接进入门级仿真器进行模拟测试。 主要
29、用于测试设计项目的逻辑功能, 用以了解其实现的功能是否满足设计要求,在功能仿真的过程不涉及任何具体器件的硬件特性。时序仿真:当设计项目通过功能仿真初步确定满足设计要求后,需要绑定具体器件进行时序仿真。时序仿真就是接近真实器件运行特性的仿真,仿真文件包含了器件硬件特性参数,因而仿真精度高。但时序仿真的仿真文件必须来自针对具体器件的综合器和适配器。综合所得的 EDIF 网表文件通常作为 FPGA 适配器的输入文件,产生的仿真网 表文件包含了器件精确的延时信息。5 .编程下载把适配后生成的下载或配置文件, 通过编程器或编程电缆向 FPGA 进行下载, 以便进行硬件调试和验证,从而实现满足设计要求的电
30、子系统8 。4 Quartus II概述及其设计流程4.1 Quartus H 概述Quartus II是Altera公司的综合性PLD开发软件,支持原理图、VHDL、VerilogHDL 以及 AHDL ( Altera Hardware Description Language )等多种设计输入形式, 内嵌自有的综合器以及仿真器, 可以完成从设计输入到硬件配置的完整PLD设计流程。Quartus H可以在 XP、Linux以及Unix上使用,除了可以使用 Tcl脚本 完成设计流程外,提供了完善的用户图形界面设计方式。具有运行速度快,界面统一,功能集中,易学易用等特点。Quartus II支
31、持 Altera的IP核,包含了 LPM/MegaFunction 宏功能模块库,使 用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。对第三 方 EDA 工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方EDA 工具。此外, Quartus II 通过和 DSP Builder 工具与 Matlab/Simulink 相结合,可以方便地实现各种 DSP 应用系统; 支持 Altera 的片上可编程系统( SOPC) 开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。 Maxplus II 作为 Altera 的上一代 PLD 设计软件
32、,由于其出色的易用性而得到了广泛的应用。目前 Altera已经停止了对 Maxplus II的更新支持,Quartus II与 之相比不仅仅是支持器件类型的丰富和图形界面的改变。Altera在Quartus II中包含了许多诸如 SignalTap II 、 Chip Editor 和 RTL Viewer 的设计辅助工具,集成了SOPC 和 HardCopy 设计流程,并且继承了 Maxplus II 友好的图形界面及简便的使 用方法。Altera Quartus II作为一种可编程逻辑的设计环境,由于其强大的设计能力和直观易用的接口,越来越受到数字系统设计者的欢迎。Altera的Quart
33、us H可编程逻辑软件属于第四代PLD 开发平台。该平台支持一个工作组环境下的设计要求,其中包括支持基于 Internet 的协作设计。 Quartus 平台与 Cadence、 ExemplarLogic 、 MentorGraphics 、 Synopsys 和 Synplicity 等 EDA 供应商的开发工具相兼容。 改进了 软件的 LogicLock 模块设计功能, 增添 了 FastFit 编译选项, 推进了网络编辑性能, 而且提升了调试能力。支持MAX7000/MAX3000 等乘积项器件。4.2 Quartus H设计流程i .建立新工程:首先将所设计工程项目划分为若干子模块,
34、将每个子模块单独 存放在一个文件夹中,并分别进行编译,验证通过后,将每个子模块的 VHDL 文 本文件添加到总工程文件夹中,并建立图元(建立图元block ,右键点击.V 文件,选择 create symbol files for current files ),将各个图元(亦即子模块)连接起来 构成总体设计项目。ii .设计各子模块:编写各子模块相应的代码,并分别进行编译,验证通过后将 各子模块 VHDL 文件添加到顶层设计中,创建图元,进行连接以完成总体项目的设计。这部分就是将管脚连好。在原理图编辑中,英文的大小写代表相同的含义,只要器件连接线的节点名称相同就会默认为是连接的,总线( Bu
35、s )在图形编辑窗口显示的是一条粗线,总线必须在名称的后面加上“a.b ,表示一条总线内所含”有的节点编号,原理图编辑的文件扩展名为 “.bdf ,在” Quartus II 中工程名称必须 与顶层实体名称相同,且VHDL 设计中实体名称亦为相同的名字,否则不能进行编译。 iii .编译工程 iv .仿真:波形矢量文件的扩展名为“.vwf :仿真分为功能仿真和时序仿真,也称为前仿真和后仿真,功能仿真是忽略延时后的仿真,是最理想的仿真,时序仿 真则是加上了一些延时的仿真,是最接近于实际的仿真,在设计中通常先做功能 仿真验证逻辑的正确性,后做时序仿真验证时序是否符合要求,需注意默认为时 序仿真,在
36、设置功能仿真后需要生成功能仿真网络表。5系统方案设计系统总体设计框图如图5.1所示。此设计由计算部分、存储部分、显示部分和输入 部分组成。图5.1计算器的系统组成框图5.1 计算器的计算部分在这一部分中,可以将每一个数均表示成 8位或者4位二进制数统一进行运算,各 个计算数之间的计算可以直接使用 VHDL语言中的运算符来实现。但在显示时,必须将 个位、十位、百位分开显示,设计时使用比较的方法来实现计算器的功能要求。另外, 由于在VHDL语言中只能进行除数是2的事的除法,不能进行任意数的除法,因此必须 单独设计一个除法器来实现计算器的功能要求,该除法器可以利用减法运算和左移位运 算实现除法运算,
37、具体算法见第四章。5.2 计算器的存储部分存储部分需要3个存储器来实现:内部累加器(ac。、输入寄存器(reg)以及结果 暂存器(ans)。在存放数字时,将数字放入 acc或者reg里面,当第一次按下数字键时, 表示该数字是个位。当第二次按下数字键时,表示这次输入的是个位,上一次输入的是 十位,所以要把第一次输入的数字乘以10,再加上第二次输入的数字,来得到最终输入的数字。当第三次按下数字键时,要将第一次输入的数字乘以100,再加上第二次输入的数字乘以10,再加上第一次输入的数字,来得到最终输入的数字。当进行第一次计算时,第一个数字存放在 acc里面。按下运算符以后,第二个数字 放在reg里面
38、。当再按下运算符号或者等号时,第一次计算的结果将存放在ans里面,同时reg清零,等待下一个数字的输入。进行第二次运算时,将ans里面的结果与reg里面新输入的数字进行运算,再将运算结果存放在 ans里面,直到最后按下等号按键的 时候,显示最终的运算结果。5.3 计算器的显示部分显示部分是系统的输出部分,用于显示按键值及计算结果,由于数字系统的数据运 算都是二进制的,而输出表达式都是 BCD码,为了满足BCD码的译码显示,最方便的 方法就是利用译码程序在 FPGA中实现。本文采用的是共阳极七段数码管, 显示数字时 需要将对应管脚置为低电平,输出时,从左到右,按从高到低位的顺序依次接g、f、e、
39、d、c、b、a。七段译码器的基本结构如图 3.2所示。afbgecd图5.2七段译码器的结构其VHDL语言描述如下所示。在这段程序中,indata是输入4位二进制数的端口 , outdata是输出7位译码的端口,用 WITH语句来实现译码。WITH indata SELECToutdata<="0111111"WHEN"0000”,-0 的显示;“0000110"WHEN"0001”,-1 的显示;-2 的显示;-3 的显示;-4 的显示;-5 的显示;- -6 的显示;- -7 的显示;- -8 的显示;- -9 的显示;-其它的输入按
40、键均不显示。"1011011"WHEN"0010","1001111"WHEN"0011","1100110"WHEN"0100","1101101"WHEN"0101","1111101"WHEN"0110","0000111"WHEN"0111","1111111"WHEN"1000","1101111&
41、quot;WHEN"1001","0000000"WHEN OTHERS;计算器显示部分的设计和实现,实际上就是七段译码器的设计和实现,三个七段译码器分别显示的是个位、十位和百位。输入第一个数字后至再一次按下数字按键输入第 二个数字前,三个七段译码器显示的都是第一个数字。当开始输入第二个数字的时候显 示第二个数字,再次按下运算按键到输入第三个数字前,显示的是前两个数字的运算结果,以此类推,当最后按下等号键的时候,显示最终的运算结果。5.4 计算器的输入部分计算器输入部分的设计最主要的是按键译码电路的设计和实现。 计算器的输入部分是由09 十个数字按键、加
42、减乘除四则运算的运算符按键、一个等号按键和一个清零按键组成的,设计所要做的是对按键信息进行译码,使其在计算器内部可以使用。数字按键译码电路的主体部分 VHDL 语言描述如下。PROCESS(inclk,reset)BEGINIF reset='1'THEN-异步复位信号为高电平的时候outnum<="0000"-把 “ 0000赋值给数字的输出端口”ELSIF inclk'EVENT AND inclk='1'THENCASE innum ISWHEN"0000000001"=>outnum<=&
43、quot;0000"outflag<='1'- -按下一个键表示输入为0WHEN"0000000010"=>outnum<="0001"outflag<='1'- -按下第二个键表示输入为1WHEN"0000000100"=>outnum<="0010"outflag<='1'- -按下第三个键表示输入为2WHEN"0000001000"=>outnum<="0011&quo
44、t;outflag<='1'- -按下第四个键表示输入为3WHEN"0000010000"=>outnum<="0100"outflag<='1'- -按下第五个键表示输入为4WHEN"0000100000"=>outnum<="0101"outflag<='1'- -按下第六个键表示输入为5WHEN"0001000000"=>outnum<="0110"outflag<
45、;='1'- -按下第七个键表示输入为6WHEN"0010000000"=>outnum<="0111"outflag<='1'- -按下第八个键表示输入为7WHEN"0100000000"=>outnum<="1000"outflag<='1'- -按下第九个键表示输入为8WHEN"1000000000"=>outnum<="1001"outflag<='1'
46、;- -按下第十个键表示输入为9WHEN OTHERS=>outnum<=outnum;outflag<='0'-不按键时保持END CASE;END IF;END PROCESS;在本次设计的程序中,设reset 是异步复位信号的输入端口, inclk 是时钟信号的输入端口, innum 端口用来表示输入的按键向量, outnum 端口用来表示输入的按键动作对应的输出数字, outflag 端口用来输出是否有按键动作, 它主要实现的是按下什么就输出什么。一共有十个位,初始值都为低电平“ 0,当按下哪个位时哪个位上的电平就跳为”高电平(有且仅有一个为高电平)
47、,这时就有相应的输出。那十个位分别对应的是0 9这十个数字,所以当第一个位(从左往右位数依次增高)为高电平时显示0, , ,第十个位上位高电平时,相应的显示为9。如果按下的键是加号、减号、乘号、除号或者是等于号时,也是不显示的,所以也可以称作数字按键译码电路。6计算器的VHDL设计6.1 加法器的设计与仿真本次设计的加法器属于多位加法器的范畴,可按其进位方式的不同分为两类:串行 进位加法器和并行进位加法器。串行进位加法器是将多个一位全加器级联,低位全加器 的进位输出送给相邻高位全加器作为进位输入,以此构成多位加法器。这种设计思路简 单明了且占用资源少,但运算速度较慢。并行进位方式则是在各位的加
48、法环节之外,另 外设有进位产生逻辑电路,各位的进位输入信号同时产生,从而各位可以同时完成全加 运算,输出最后结果。并行进位方式具有较快的运算速度,但是相对于用行进位方式来 说,却往往占用更多的资源。尤其是当运算位数增加的时候,相同位数的并行进位和申 行进位加法器的资源占用差距也越来越大。因此,常常需要设计者在运算速度和资源占 用量之间做出折中平衡。而经过实践证明,4位二进制并行进位加法器和用行级联加法器占用的资源几乎相同。因此,可以用两个 4位二进制并行加法器级联构成8位二进制 加法器,这是一种较为合理的选择,加法器的原理框图如图6.1所示。图6.1加法器的原理框图加法器要有被加数、加数和进位
49、位的输入端口。设a端口为被加数,b端口为加数, ci为输入进位。此加法器还有两个输出端口,分别是加法运算的最终结果输出和进位位 的输出,设s为结果的输出端口,co为进位的输出端口。当输入被加数与加数后,两个8位二进制数开始相加,之后,再与输入进位位相加,这样得到的最终结果就是加法器加法运算的最终结果。加法器模块图如附录中所示。程序如附录中加法程序,经 Quartus II编译后建立.vmf文件,设置被加数 a为 “001000脚十进制数16 (可设置0255内的任意数字),设置加数b为“1011000卿 十进制数176(可设置0255内的任意数字,但因为程序中未包含出错溢出判断,所以需满足a+
50、b0255,仿真后所得结果如图6.2所示。16+176= 192,仿真结果正确,可知此 加法器设计有效。咋M玷叫嚣珈联叫地伽”断际叫咕雪喈网加图6.2加法器仿真16+176=1926.2 减法器的设计与仿真首先设计一个四位二进制数的减法器,四位全减器的原理框图如图6.3所示。由图可以看出,此减法器共需要两个输入端口和一个输出端口。减法器的设计可以引用加法 器,即通过对减数的求补,再与被减数相加得到最终的结果,所以需要增设一个进位位 输入端口和进位位的输出端口。图6.3四位全减器的原理框图可以设a端口为被减数,b端口为减数,ci为输入借位位,s为结果的输出端口,co 为借位的输出端口。减法器的运
51、算过程中首先要引用加法器,在此不再赘述。而且此减 法器可以进行位数扩展,每增加一位需要多引用一个加法器,为使图形原理简洁,所以 此处只列出四位减法器。减法器模块图如附录中所示。程序如附录中减法程序,经Quartus II编译后建立.vmf文件,设置被减数a为“1111” 即十进制数15 (可设置015内的任意数字),设置减数b为“1001即十进制数9 (可 设置015内的任意数字,但因为程序中未包含出错判断,所以需满足a<h仿真后所 得结果如图6.4所示。15-9= 6,仿真结果正确,可知此减法器设计有效。第也 1>|砌I 标6.3 乘法器的设计与仿真乘法器是数字系统中的基本逻辑器
52、件,在很多应用中都会出现如各种滤波器的设计、矩阵的运算等。这里设计的是一个 4必的乘法器。依据乘法器的原理,可以绘出其 原理框图如图6.5所示。图6.5乘法器的原理框图可设a端口为被乘数(一个4位二进制数),b端口为乘数(一个4位二进制数),y 为乘法运算的结果的输出端口。乘法器模块图如附录中所示。程序如附录中乘法程序,经Quartus II编译后建立.vmf文件,设置被乘数a为“1101” 即十进制数13 (可设置016内的任意数字),设置乘数b为“101CW十进制数10 (可 设置016内的任意数字),仿真后所得结果如图6.6所示。13*10= 130,仿真结果正确, 可知此乘法器设计有效
53、。图6.6乘法器仿真 13*10= 1306.4 除法器的设计与仿真除法器是基于连减和移位操作的,连减实际上就是基于数学上除法的基本原理。例如,a七=c余数是d,就等价于a减去c个b后得到d而且d<b;之所以可以使用移位操作,是因为所有运算的数都用二进制表示,本文设计的除法器主要部分为一个控制移位的控制器,另有一个由全加器组成的 4 位减法器 ( 引用上面的减法器的设计)。又因为规定了结果为 4 位,控制器首先比较被除数的高 4 位与除数的大小,判断是否溢出,溢出则退出,否则就做4 位移位和减法得到结果。在每次做完减法以后都要判断是否够减,即判断是否有借位, 不够得话, 就恢复被减数,
54、移一位再减。 除法器的原理框图如图 6.7所示。图6.7除法器的原理框图设a端口为被除数,b端口为除数,clk为时钟信号的输入端口, str为启动信号的 输入端口,此端口的作用是当启动信号为高电平的时候有效,表示启动了除法器开始作除法运算。s为除法运算所得到的商的输出端口,y为除法运算中所得到的余数的输出端口。该除法器的设计中使用了状态机,它有 5个状态:start为开始状态,one为第一次移位状态,two为第二次移位状态,three为第三次移位状态(正常运算结果的输出状态),error为溢出出错状态。在除法器的设计中引用了减法器。ain用来寄存被除数,bin 用来寄存除数,atem为减法器的
55、被减数输入,btem为减法器的减数输入,stem用来计 算内存结果,citem为减法器的借位输入,cotem为减法器的借位输出。除法器的模块图 如附录中所示。程序如附件中除法程序,经Quartus II编译后建立.vmf文件,设置clk=100ns, str=1,使除法器工作。前面部分设置被除数为 “10010100'即十进制数148 (可设置0 255内 的任意数字),后面部分设置被除数为“00010110'即十进制数22 (可设置0255内的 任意数字,为对比,勿与第一个数设置相同),设置除数为“1101;即十进制数13 (可 设置015内的任意数字,本部分程序中有差错判断
56、部分,所以除数取 0时不做运算), 仿真所得结果如图6.8所示。当检测到clk上升沿时启动运算,所以第一个clk上升沿出 现前虽然被除数与除数已设置,商和余数仍然为 0,第一个clk上升沿出现,计算得到 148T3=115,仿真结果正确。当被除数改变为22的一段时间内,因为未检测到clk上升沿,所以未进行运算,商和余数未变,分别仍为11和5。当接下来的第一个clk上升沿出现,再次进行运算,计算得到 22勺3= 19,仿真结果正确,由此可知此除法器设计有效a'i'泯str0?图6.8除法器仿真 148 +13=115,22?13 = 1939致谢这次课程设计是学完 EDA 技术
57、之后将自己所学理论与实际相结合的机会,通过这次比较完整的基于 FPGA 的计算器芯片设计, 我自己的理论与实践相结合的能力有了大幅度的提升。在温习了所学专业知识的基础上,同时通过查阅专业书籍、相关文献资来解决实际工程问题,这锻炼了我的综合运用各项知识和资源的能力。而且通过对整体的掌控,对局部的取舍,以及对细节的斟酌处理,都使我的实际动手经验得到了极大的丰富,由于程序编写与处理是一项非常繁琐非常令人头疼的工作,完成了这些,也使我的意志、抗压能力及耐力都得到了不同程度的提升,我相信这些提升是会影响我一辈子的宝贵财富。这一次的设计让我积累很多的解决实际问题的经验,使我的头脑更加灵活,这必然会让我在未
58、来的工作学习中表现出更高的应变能力,更强的沟通力和理解力。通过这次的设计,我对FPGA技术、VHDL语言以及Quartus II的使用都有了深入的了解。虽然课程设计中内容较多,过程繁琐,但这也造就了我丰富的收获。我采用的是分模块的设计方法, 各个模块的设计我都是随着设计的不断深入而不断熟悉并学会应用的。以前从课堂上没学懂的内容经过这次课程设计大部分都弄明白了,总之, 这次课程设计我收获很大。参考文献1周润景.基于Quartusn的FPGA/CPLD数字系统设计实例M.电子工业出版社.2007,82 林明权 马维旻 VHDL 数字控制系统设计范例 .电子工业出版社 2003,13 褚振勇 . FPGA 设计及应用(第三版) M. 西安电子科技大学出版社 .2012,44 崔葛瑾,沈利芳,李伟民.基于FPGA 的数字电路系统设计M.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年危险化学品储存使用场所安全管理规范
- 老年人护理信息技术应用
- 分包中的工程进度控制
- 社区家庭护理技术培训
- 2026年行业数据资源库数据技术攻关库工业数据标准库“三库”协同建设方案
- 2026年机床行业技术迭代产能释放竞争加剧风险
- 2026年消防应急安全培训
- 2026年消防安全知识宣传
- 投资性房地产的确认和初始计量
- 2026年水库钓鱼安全须知
- 2023年浙江省普通高中学业水平考考纲物理
- 市政工程施工要点和质量控制要点
- mayfield头架使用说明课件
- 2022年12月西安电子科技大学教师教学发展中心招聘2名管理人员笔试参考题库含答案解析
- ARJ21机型理论知识考试题库(汇总版)
- JJG 875-2019数字压力计
- 《薄膜材料与薄膜技术》教学配套课件
- 1.2《认识工程》课件
- 金属非金属地下矿山安全生产标准化评分办法-模板
- 量子信息与量子计算课件
- 航空维修工程管理-第1章课件
评论
0/150
提交评论