FPGA实验_FPGA基础设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

通信工程实验FPGA实验FPGA基础设计一、实验目的⒈学习使用硬件描述语言VerilogHDL建模基本硬件模块。⒉学习QuatursII设计软件的操作。⒊学习ModelSim仿真软件的基础操作。⒋学习FPGA开发板的使用。⒌学习使用SignalTapⅡ工具观测和分析设计结果。二、实验说明FPGA(FieldProgrammableGateArray)称为现场可编程门阵列,是在早期的可编程逻辑器件基础上发展起来的新型高性能可编程逻辑器件。FPGA的集成度很高,其器件密度从数万系统门到数千万系统门不等,可以实现极其复杂的组合与时序逻辑电路功能,适用于高速、高密度的高端数字逻辑电路设计领域。使用FPGA技术设计各种大规模或超大规模的组合、时序逻辑电路,不仅可以使设计者避免直接与若干复杂烦琐的电路元器件的选择布线直接接触,而且开发设计过程中采用的类似于软件开发的模块化设计方法还更加便于多人合作设计开发,这就极大地提高了产品规划设计的效率。目前,FPGA技术已经成为国际上通行的硬件芯片产品设计开发的主流。VerilogHDL是一种硬件描述语言,它能够通过类似于高级语言程序代码的方式描述硬件电路的结构和工作过程。与传统的通过电路图直接设计硬件电路的方式相比,VerilogHDL具有方便直观的优点。VerilogHDL的语法结构也与高级程序设计语言有许多相似之处,便于学习和掌握。和高级程序设计语言一样,VerilogHDL同样支持模块化设计,这就为多人合作开发提供了可能。QuartusⅡ是Altera公司开发的一个综合性的可编程逻辑器件设计软件。它能够完成从工程建立、设计输入、编译、综合、芯片布局布线、时序分析到开发板下载的完整开发流程,并能配合许多第三方仿真软件对设计进行功能仿真和时序仿真。QuartusⅡ是FPGA开发设计中的最主要工具。ModelSim是ModelTech公司开发的工业级仿真软件,目前在电子设计业界应用非常广泛。ModelSim能对各类逻辑设计中的各种信号和存储单元之间的逻辑和时序关系进行精确仿真,它对各种设计文件的编译速度甚至超过了诸如QuartusⅡ这样的原厂开发软件,而且能识别全系列器件,通用性好,可扩展性强。ModelSim的时序仿真结果最接近电路实际工作状态,已由业界公认。ModelSim还具有彩色化的图形界面,并配有许多辅助功能,观测分析各种结果十分清晰直观。FPGA开发板是FPGA设计中的硬件平台,它与QuartusⅡ软件配合,共同组成一个逻辑设计开发的综合环境。FPGA开发板根据所用FPGA芯片的不同,分为多种系列和型号,但主要结构基本相似,都包括FPGA芯片、各类存储器和基本的外围功能电路。本实验采用的是Terasic公司生产的DE2-115型开发板,其中的FPGA芯片型号为Altera公司生产的CycloneⅣE系列的EP4CE115F29C7。SignalTapⅡ称为嵌入式逻辑分析仪,是QuartusⅡ软件自带的一个功能。在SignalTapⅡ出现以前,传统的逻辑分析仪曾经是FPGA设计中的必备工具,它是一个独立器件,通通信工程实验过大量接线连接到FPGA芯片的引脚上工作,使用非常不便。随着FPGA容量的增大,FPGA的设计日益复杂,设计调试成为一个很繁重的任务,因此设计人员需要一种简易有效的测试工具,以尽可能地缩短测试时间。SignalTapⅡ只是一个内嵌功能,只需要通过相对简单的设置,由QuartusⅡ软件下载到FPGA芯片内部后,它会自动捕获设计者需要观测的信号,并通过下载电缆将结果回传到QuartusⅡ软件,在专门的窗口中显示。它具有无干扰、使用方便、易于升级和成本低廉的特点。本实验利用上述工具,进行一些基本模块的设计练习,作为后续实验的基础。⒈基本模块的VerilogHDL代码⑴半加法器半加法器是指最高位无进位的二进制加法器。这里设计的是一个4位宽的半加法器。加法器属于组合逻辑电路。moduleadder(ina,inb,sum);//模块定义的关键字是module,括号中是外部信号列表。input[3:0]ina;//输入信号定义的关键字是input,[3:0]表示信号有4位宽。input[3:0]inb;output[3:0]sum;//输出信号定义的关键字是output。assignsum=ina+inb;//加法器结构描述,assign是组合逻辑连线赋值语句。endmodule//模块结束的关键字是endmodule。⑵逻辑位运算器基本的逻辑位运算有非、与、或、异或。逻辑运算属于组合逻辑电路。modulelogic(a,b,c,d,f,g);//按位逻辑非、与、或、异或模块。inputa;inputb;outputc;outputd;outputf;outputg;assignc=~a;//位逻辑非,符号~。assignd=a&&!b;//位逻辑与,符号&&,!b表示b信号是低电平有效。assignf=a||b;//位逻辑或,符号||。assigng=a^b;//位逻辑异或,符号^。endmodule⑶数据选择器数据选择器的作用是根据不同的输入信号,产生相应的输出信号。例如地址译码器就是一种数据选择器。这里设计的是一个2-4数据选择器,根据2位宽输入信号的变化,4位宽的输出信号会产生不同的结果。数据选择器属于组合逻辑电路。通信工程实验moduledata_sel(datain,dataout);input[1:0]datain;//输入信号为2位宽。output[3:0]dataout;//输出信号为4位宽。reg[3:0]data_selected;//定义reg型内部寄存器,用来存放输出结果。always@(datain)//组合逻辑的always建模方式,括号中为组合逻辑敏感信号。begincase(datain)//用case结构实现数据选择。2'b00:begindata_selected=4'b0001;//输入为00时,输出为0001。end2'b01:begindata_selected=4'b0010;//输入为01时,输出为0010。end2'b10:begindata_selected=4'b0100;//输入为10时,输出为0100。end2'b11:begindata_selected=4'b1000;//输入为11时,输出为1000。enddefault:begin//当输入不满足上述条件时,执行default项,不能省略。data_selected=4'bzzzz;//输出置为高阻态,z表示高阻态。endendcaseendassigndataout=data_selected;//将寄存器的输出连接到模块的输出引脚上。endmodule⑷计数器在FPGA设计中,计数器可以用来对信号的变化情况进行计数,是经常使用的功能块。这里设计的是一个2位宽计数器,可以从00计数到11,计数原则是在时钟信号的控制下,每个时钟周期计数一次。计数器属于时序逻辑电路。modulecounter(clk,reset_n,dataout);inputclk;//时钟信号,时序逻辑电路必备信号。通信工程实验inputreset_n;//复位信号,时序逻辑电路必备信号。output[1:0]dataout;//输出信号为2位宽,输出计数值。reg[1:0]counter_value;//定义内部寄存器,用来存放计数过程中计数器的值。always@(posedgeclkornegedgereset_n)//时序逻辑必须用always块建模。//括号中是时序逻辑敏感信号。//时序逻辑敏感信号只能是时钟信号,或者是时钟信号和复位信号的组合。//posedgeclk表示时钟信号上升沿触发。//negedgereset_n表示复位信号下降沿触发。//or表示逻辑或。beginif(!reset_n)//复位信号低电平有效,与negedgereset_n共同实现异步复位。begincounter_value=2'b00;//复位过程中,置计数器的初始值为0。endelse//复位完成后,计数器开始计数。begincounter_value=counter_value+2'b01;//每个时钟上升沿,计数值增1。endendassigndataout=counter_value;//计数值输出。endmodule⑸移位寄存器移位寄存器是一种特殊的寄存器,一般具有1位以上的深度,内部存储的数据就像一个队列。移位寄存器的操作采用FIFO(先进先出)方式,内部数据按照由高位到低位,或者由低位到高位的顺序依次移动,因此称为移位寄存器。移位寄存器属于典型的时序逻辑电路,在时钟信号的控制下,内部的数据每移动1位,就会延时1个时钟周期的时间。在FPGA设计中,移位寄存器常用来实现反馈功能和延时功能。这里设计的是一个2位宽4位深的移位寄存器。数据经过移位寄存器输出后,将会延时4个时钟周期的时间。moduleshift_reg(clk,reset_n,datain,dataout);inputclk;inputreset_n;input[1:0]datain;//输入数据为2位宽。通信工程实验output[1:0]dataout;//输出数据为2位宽。reg[1:0]reg_data[3:0];//定义移位寄存器结构,2位宽4位深。always@(posedgeclkornegedgereset_n)beginif(!reset_n)beginreg_data[3]=2'b00;//复位过程中,对移位寄存器的各位置初值。reg_data[2]=2'b00;reg_data[1]=2'b00;reg_data[0]=2'b00;endelse//复位完成,移位寄存器开始工作。beginreg_data[3]=datain;//在时钟触发下,数据依次移位。reg_data[2]=reg_data[3];reg_data[1]=reg_data[2];reg_data[0]=reg_data[1];endendassigndataout=reg_data[0];//数据从移位寄存器的最后一级输出endmodule⒉设计主要设计工作在QuartusⅡ软件中完成。以上述的半加法器为例,设计流程如下。⑴在全英文路径下新建一个目录,作为工程目录。通信工程实验⑵打开QuartusⅡ软件,建立工程。①在File菜单中选择NewProjectWizard。②工程目录名称、工程名称和顶层模块名称都相同。通信工程实验③FPGA芯片选择CyloneⅣE系列的EP4CE115F29C7,设置完后点Finish。⑶编写VerilogHDL代码。①建立VerilogHDL源代码文件,选择VerilogHDLFile。通信工程实验②保存,VerilogHDL文件名与工程目录名相同。③输入代码并保存。通信工程实验⑷点QuartusⅡ软件工具栏中的编译按钮,编译工程。编译成功后,QuartusⅡ中的信息栏会有提示。如果编译过程中出错,需要检查并修改VerilogHDL代码中的错误,然后重新编译。需要注意的是,即使编译成功,只能证明VerilogHDL代码中没有语法错误,不能证明设计本身一定是正确的。⒊仿真仿真工作由ModelSim软件完成。仿真是验证设计正确与否的重要环节,包括功能仿真(也称为前仿真)和时序仿真(也称为后仿真)两个步骤。设计完成后首先进行功能仿真,功能仿真可以验证设计中各信号之间的逻辑关系是否正确。如果功能仿真结果不正确,说明信号之间的逻辑关系设计有错误,需要回到QuartusⅡ软件中对设计进行检查修改,通信工程实验然后重新编译并仿真,直到功能仿真结果正确。只有在功能仿真结果正确的前提下,才能进行时序仿真。时序仿真可以验证设计中各信号之间的时序关系是否正确,仿真结果很接近芯片的实际工作状态。如果功能仿真结果正确但是时序仿真结果不正确,说明整个设计方案不合理,需要修改甚至重新规划设计方案。只有当

1 / 30
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功