基于FPGA的科研训练范例薛冰许德新_第1页
基于FPGA的科研训练范例薛冰许德新_第2页
基于FPGA的科研训练范例薛冰许德新_第3页
基于FPGA的科研训练范例薛冰许德新_第4页
基于FPGA的科研训练范例薛冰许德新_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于 FPGA 的科研训练范例8.1 可编程逻辑器件基本知识可编程逻辑器件(Programmable Logic Device,PLD)起源于 20 世纪 70 年代,是在专用集成电路(ASIC)的基础上发展起来的一种新型逻辑器件,是当今数字系统设计的主要平台,其主要特点是完全由用户通过软件进行配置和编程,从而完成特定的功能,且可以反复擦写。8.1.1 可编程逻辑器件的发展及分类可编程逻辑器件根据集成密度可分为低密度可编程逻辑器件(LDPLD)和高密度可编程逻辑器件(HDPLD)两类。LDPLD 主要是指早期发展起来的 PLD,它包括 PROM、PLA、PAL 和 GAL 四种,其集成密度一般小于 700 门/片,这里的门是指 PLD 等效门。HDPLD 包括 EPLD、CPLD 和 FPGA 三种,其集成密度大于 700 门/片。随着集成工艺的发展,HDPLD 的集成密度不断增加,性能不断提高。目前集成度最高的 HDPLD 可达数百万门/片。目前,常用的可编程逻辑器件都是从与或阵列和门阵列发展起来的,所以可以从结构上将其分为两大类:(1) 阵列型 PLD。 (2) 现场可编程门阵列 FPGA。阵列型 PLD 的基本结构由与阵列和或阵列组成。简单 PLD(PROM、PLA 、PAL 和 GAL) 、EPLD 和 CPLD 都属于阵列型 PLD。可擦除可编程逻辑器件 EPLD(Erasable PLD) 是 Altera 公司推出的基于 E2CMOS 编程工艺的 PLD,其基本逻辑单元是宏单元。宏单元由可编程的与或阵列、可编程寄存器和可编程 I/O 三部分组成;复杂可编程逻辑器件 CPLD(Complex PLD)是上个世纪 80 年代末 Lattice 公司提出在系统可编程(ISP,In System Programmability)技术以后于 90 年代初出现的。它是在 EPLD 的基础上发展起来的,采用 E2CMOS 工艺制作,与 EPLD 相比,增加了内部连线,对逻辑宏单元和 I/O 单元也有重大的改进。现场可编程门阵列 FPGA(Field Programmable Gate Array)是 Xilinx 公司 1985 年推出的,采用CMOS-SRAM 编程工艺制作。其内部由可构造逻辑模块(CLB ) 、可构造输入输出块(IOB)和可编程互连资源(IR)组成。具有集成密度高、编程速度快、设计灵活及可再配置等特点。FPGA 基于 SRAM 的架构,集成度高,以 LE(包括查找表、触发器及其他)为基本单元,有内嵌 Memory、DSP 等,支持 IO 标准丰富。具有易挥发性,需要有上电加载过程。在实现复杂算法、队列调度、数据处理、高性能设计、大容量缓存设计等领域中有广泛应用,如 Altera 公司的 Stratix、cyclone 系列。尽管 FPGA 和 CPLD 都是可编程 ASIC 器件,有很多共同特点,但 CPLD 和 FPGA 结构上的差异使它们具有各自的特点:1.CPLD 更适合完成各种算法和组合逻辑,FPGA 更适合于完成时序逻辑。换句话说,FPGA 更适合于触发器丰富的结构,而 CPLD 更适合于触发器有限而乘积项丰富的结构。2.FPGA 的集成度比 CPLD 高,具有更复杂的布线结构和逻辑实现。3. 在编程方式上,CPLD 主要是基于 E2PROM 或FLASH 存储器编程,编程次数可达 1 万次以上,优点是系统断电时编程信息也不丢失。 FPGA 大部分是基于 SRAM 编程,编程信息在系统断电时丢失,每次上电时,需从器件外部将编程数据重新写入 SRAM中。其优点是可以编程任意次,可在工作中快速编程,从而实现板级和系统级的动态配置。8.1.2 Verilog HDL 语言简介Verilog 硬件描述语言是描述电子电路行为和结构的一种语言是一种 IEEE 标准(IEEEStd.1364-1995 ) 。Verilog 用于模拟从随机和纯行为到门级和开关级的抽象范围等层次的数字电子电路功能也用于从许多抽象(寄存器传输级)描述合并(即自动产生)门级描述 Verilog。一般用于支持高层次的设计)或基于语言的设计) ,其中电子设计在用自动合并工具进行详细设计前要通过高层次的完全抽象仿真来检验。Verilog 也广泛应用于 IC 的门级检验,包括仿真故障仿真和定时检验。Verilog 最初是在 1984 年由 Gateway Design Automation 公司开发 Verilog-XL 仿真器的时候一起开发出来。1989 年 Cadence Design Systems 公司并购 Gateway 公司,同时拥有对 Verilog 语言和 Verilog-X 仿真器的权力。1990 年 Cadence 将 Verilog 语言不是 Verilog-XL 放到公共领域。为了使 Verilog 语言通过 IEEE标准化过程一个非赢利性组织,Open Verilog International OVI 将它不断推进结果,在 1995 年 Verilog 成为一个 IEEE 标准。用 Verilog HDL 描述的电路设计就是该电路的 Verilog HDL 模型,也称为模块,是 Verilog 的基本描述单位。模块描述某个设计的功能或结构以及与其他模块通信的外部接口,一般来说一个文件就是一个模块,但并不绝对如此。模块是并行运行的,通常需要一个高层模块通过调用其他模块的实例来定义一个封闭的系统,包括测试数据和硬件描述。一个模块的基本架构如下: module module_name (port_list) /声明各种变量、信号 reg /寄存器 wire/线网 parameter/参数 input/输入信号 output/输出信号 inout/输入输出信号 function/函数 task/任务 /程序代码 initial assignment always assignment module assignment gate assignment UDP assignment continous assignment endmodule 说明部分用于定义不同的项,例如模块描述中使用的寄存器和参数。语句用于定义设计的功能和结构。说明部分可以分散于模块的任何地方,但是变量、寄存器、线网和参数等的说明必须在使用前出现。一般的模块结构如下: module () endmodule其中,用来指定数据对象为寄存器型、存储器型、线型以及过程块。可以是 initial结构、always 结构、连续赋值或模块实例。下面给出一个简单的 Verilog 模块,实现了一个二选一选择器。例 8.1 二选一选择器(见图 8.1)的 Verilog 实现图 8.1 例 8.1 所示的二选一电路module muxtwo(out, a, b, s1); input a, b, s1; output out; reg out; always (s1 or a or b) if (!s1) out = a; else out = b; endmodule 模块的名字是 muxtwo,模块有个端口:三个输入端口 a、b 和 s1,一个输出端口 out。由于没有定义端口的位数,所有端口大小都默认为位;由于没有定义端口 a, b, s1 的数据类型,这 3 个端口都默认为线网型数据类型。输出端口 out 定义为 reg 类型。如果没有明确的说明,则端口都是线网型的,且输入端口只能是线网型的。8.1.3 Quartus II 软件开发流程Quartus II 开发软件是 Altera 公司的第四代可编程逻辑器件集成开发环境,提供从设计输入到器件编程的全部功能。Quartus II 软件的开发流程可以基本概括为以下步骤:设计输入、对工程进行设置和约束、设计编译与综合、布局布线、设计仿真、设计时序分析和器件编程。(1) 设计输入Quartus II 工程包括在可编程器件中最终实现设计需要的所有设计文件,软件源文件和其他相关文件。使用修订,可以比较工程多个版本的设置和分配,更快、更有效地满足设计要求。使用 Quartus II 模块编辑器、文本编辑器、MegaWizard 插件管理器和 EDA 设计输入工具可以建立包括 Altera 宏功能模块、参数化模块库(LPM) 功能和知识产权(IP) 功能在内的设计。(2) 对工程进行设置和约束建立工程和设计之后,可以使用 Quartus II 软件中的 Settings 对话框、Assignment Editor 、Pin Planner以及 Design Partitions 等窗口指定初始设计约束条件,例如:引脚分配、器件选项、逻辑选项和时序约束条件。(3) 设计编译与综合Quartus II 的编译器( Compiler)完成对设计文件的分析和综合,其主要功能有:检查设计错误、对逻辑进行综合、提取定时信息、在指定的 Altera 系列器件中进行适配分割,产生的输入文件将用于设计仿真、定时分析及器件编程。(4) 布局布线Quartus II 的适配器( Fitter)完成对设计进行布局布线,在 Quartus II 软件中是指“fitting( 适配)” 。Fitter 使用由前一阶段分析和综合建立的数据库,将工程的逻辑和时序要求与器件的可用资源相匹配。它将每个逻辑功能分配给最佳逻辑单元位置,进行布线和时序分析,并选定相应的互连路径和引脚分配。(5) 设计仿真可以使用 EDA 仿真工具或 Quartus II 仿真器(Simulator)对设计进行功能与时序仿真,用以验证设计系统的功能或者时序是否正确。(6) 设计定时分析Quartus II TimeQuest 时序分析器和标准时序分析器(Classic Timing Analyzer)可用于分析设计中的所有逻辑,并有助于指导 Fitter 达到设计中的时序要求。可以使用时序分析器产生的信息来分析、调试并验证设计的时序性能。还可以使用快速时序模型进行时序分析,验证最佳情况( 最快速率等级的最小延时) 条件下的时序。(7) 器件编程使用 Quartus II 软件成功编译工程之后,就可以对 Altera 公司的 CPLD/FPGA 器件进行编程或配置。Quartus II Compiler 中的 Assembler 模块将生成最终的编程文件,结合 Altera 编程硬件(ByteBlaster MV/II,MasterBlaster,USB-Blaster 以及 EthernetBlaster 等) ,可以使用 Quartus II 编程器(Programmer)对器件进行编程或配置。8.1.4 SOPC 设计开发流程SOPC(System On Programmable Chip,可编程片上系统)是 Altera 公司提出的一种灵活、高效的SOC(System On Chip,片上系统)解决方案,是一种新的软硬件协同设计的系统设计技术。它将处理器、存储器、I/O 接口、LVDS 和 CDR 等系统设计需要的功能模块集成到一个可编程器件上,构成一个可编程片上系统。SOPC 是 PLD 和 ASIC 技术融合的结果。SOPC 是一种特殊的嵌入式系统,该系统由单个芯片完成整个系统的主要逻辑功能,同时该系统灵活方便,属于可编程系统,用户可以方便地对系统进行扩展和升级。一个 SOPC 系统一般具备了以下几个主要的特征:(1)嵌入式处理器内核;(2)丰富的 IP CORE 资源;(3)片内高速 RAM 资源;(4)处理器调试接口以及 FPGA 编程接口;(5)片上可编程逻辑资源。SOPC 设计包括以 32 位 Nios II 软核处理器为核心的嵌入式系统的硬件配置、硬件设计、硬件仿真、软件设计以及软件调试等。SOPC 系统设计的基本软件工具有:(1)Quartus II:用于完成 Nios II 系统的综合、硬件优化、适配、编程下载以及硬件系统调试等;(2)SOPC Builder:Altera Nios II 嵌入式处理器开发软件包,用于实现 Nios II 系统的配置、生成;(3)Modelsim:用于对 SOPC 生成的 Nios II 系统的 HDL 描述进行系统功能仿真;(4)Nios II IDE:用于进行软件开发、调试,以及向目标开发板进行 Flash 下载。SOPC 系统设计流程如图 8.2 所示,可以分为两大部分:SOPC Builder 进行处理器及组件的生成,Quartus II 软件综合布局布线。SOPC Builder 需要完成整个开发中的大部分工作,其中最主要的是Nios II CPU 的相关配置,在 SOPC Builder 中,软件提供了专用的 Nios II IDE 来辅助开发,设计人员通过该软件进行 Nios II 系统开发模块的驱动程序,用户应用程序的开发。IDE 提供了 C/C+语言的完整开发环境,可以完全按照软件开发的模式进行代码的开发及调试。SOPC Builder 完成整个嵌入式系统的所有组件配置及各组件之间的连接,并生成相关文件。Quartus II 软件根据 SOPC Builder 生成的 HDL 文件,以及其他模块及 IP 完成整个工程的连接及综合、布局布线。完成布局布线之后,可以进行整个系统的验证调试,用户会根据需要开发相关配套软件进行验证,当验证功能正确之后,进行板级调试完成整个工程的开发。配 置 CPU处 理 器选 择 配 置 外 设 这里 x 和 y 是输入,s 是选择信号,m 是输出。X 被定义为 SW 0 到 7,Y 被定义为SW 8 到 15,S 被定义为 SW17, M 被定义为绿色的 LEDG 0 到 7。这部分的完整代码如下: module mux2to1_8(LEDR,LEDG,SW); input 17:0SW; output 17:0LEDR; output 7:0LEDG; wire s; wire 7:0X,Y,M; assign S=SW17; assign X=SW7:0; assign Y=SW15:8; assign LEDR=SW; assign LEDG=M; mux2to1 m7(S,X7,Y7,M7); mux2to1 m6(S,X6,Y6,M6); mux2to1 m5(S,X5,Y5,M5); mux2to1 m4(S,X4,Y4,M4); mux2to1 m3(S,X3,Y3,M3); mux2to1 m2(S,X2,Y2,M2); mux2to1 m1(S,X1,Y1,M1); mux2to1 m0(S,X0,Y0,M0); endmodule /1-bit 2-to1 multiplexer module mux2to1(s,x,y,m); input s,x,y; output m; assign m=(s endmodule在这段代码里,有一个小技巧。将程序 RTL 代码分成 2 部分。1 个主模块和 1 个多路选择器模块(mux2to1(s,x,y,m)) 。通过调用多选器模块,可以很容易的实现设计。2)设计一个 3 位的 5 选 1 多路选择器3 位 5 选 1 多路选择器的设计比较简单,可以使用 4 个 3 位的 2 选 1 的多路选择器组合而成,如图8.3 所示。图 8.3 5 选 1 多路选择器完整代码如下:assign m21 = (S1 input2:0S,U,V,W,X,Y; output2:0M; wire2:0m0,m1,m2; / Leftmost 2 to 1 Multiplexers /Top assign m00 = (S0 assign m01 = (S0 assign m02 = (S0 /Bottom assign m10 = (S0 assign m11 = (S0 assign m12 = (S0 /Middle Multiplexer assign m20 = (S1 assign m22 = (S1 /Last Multiplexer assign M0 = (S2 assign M1 = (S2 assign M2 = (S2 endmodule 生成的 3 位 5 选 1 多路选择器框图如图 8.4 所示。将“选择输入端”S2:0连接到拨码开关SW1715,剩下的 15 个拨码开关 SW140 平均分配给“3 位输入端” U2:0 到 Y2:0, 将拨码开关对应连接到红色 LED 灯 LEDR 上 并将输出端 M 2:0连接到绿色 LED 灯 LEDG20 上,编译完成并分配管脚后将程序下载到 FPGA 芯片中,观察拨动拨码开关时 LED 灯的亮灭变化,验证每个“3 位输入端”U2:0 到 Y2:0都可以通过“选择输入端”S2:0输出到 M 2:0。图 8.4 3 位 5 选 1 多路选择器框图8.2.3 进一步扩展与提高根据上面的实验设计一个 1 位 8 选 1 多路选择器,将控制端 S2:0的所有可能状态全部用上,观察拨动拨码开关时 LED 灯的亮灭变化情况,验证设计的正确性。8.3 数码管显示实验8.3.1 设计内容本实验要求用七段数码管来显示 H、E、L、O,七段数码管的控制如图 8.5 所示,图中 c2c1c0 为控制端,数码管上的标号代表控制此段数码管亮灭所对应的序号。DE2 开发板上的七段码数码管是共阳极(当接收到逻辑电平位“0”时数码管亮, “1”时数码管灭) ,图中的 7-segment decoder 实际上是一个 3-8线译码器。图 8.5 七段数码管控制框图8.3.2 软件设计1)1 个数码管显示实验七段数码管的译码真值表见表 8.1。表 8.1 译码真值表控制端 c2c1c0 显示字符 对应译码0.6000 H 1001000001 E 0110000010 L 1110001011 O 0000001100 空 1111111可以使用卡诺图对表达式进行化简,例如如 seg6(对应译码0.6的最右边的一列) ,化简过程如图8.6 所示:c 1 c 0c 2010 0 0 1 1 1 1 00 0 1 11 S e g 6 = c 1 + c 2图 8.6 卡诺图化简过程对于七段数码管的每一段的表达式都可以根据真值表先进行化简(当然 Quartus 软件的综合工具会自动化简,但是如果考综合工具化简,每个表达式就会很长) ,化简后的程序代码如下:module hello_7seg(SW,LEDR,HEX0); input 2:0 SW; output 2:0 LEDR; output 0:6 HEX0; assign LEDR=SW; /Seven Segment Decoder for “HELO“ assign HEX00 = SW2|SW0; assign HEX01=SW2|(SW1 assign HEX02=SW2|(SW1 assign HEX03 = SW2|(SW1 assign HEX04 = SW2; assign HEX05 = SW2; assign HEX06 = SW2|SW1; endmodule2)5 个数码管显示实验本实验要求用 5 个数码管循环显示 HELLO,涉及对前面实验中程序代码的引用。5 个数码管循环显示的控制方式如图 8.7 所示。图 8.7 5 个数码管循环显示的控制方式可以引用实验 8.2.2 中的多路选择器作为每一个七段数码管的显示控制器,不同的多路选择器连接不同的数码管,每个数码管都可以循环显示不同的字符它们都受 SW17.15的控制。将实验 8.2.2 中 2)和8.3.2 中 1)的代码稍修改就可直接引用至本程序。程序代码如下:module hello_5_7seg(SW,HEX4,HEX3,HEX2,HEX1,HEX0); input 17:0SW; output 0:6 HEX4,HEX3,HEX2,HEX1,HEX0; wire 2:0 M4,M3,M2,M1,M0; mux_3bit_5to1 N4(SW17:15,SW14:12,SW11:9, SW8:6,SW5:3,SW2:0,M4); mux_3bit_5to1 N3(SW17:15,SW11:9,SW8:6, SW5:3,SW2:0,SW14:12,M3); mux_3bit_5to1 N2(SW17:15,SW8:6,SW5:3, SW2:0,SW14:12,SW11:9,M2); mux_3bit_5to1 N1(SW17:15,SW5:3,SW2:0, SW14:12,SW11:9,SW8:6,M1); mux_3bit_5to1 N0(SW17:15,SW2:0,SW14:12, S

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论