ImageVerifierCode 换一换
格式:DOCX , 页数:28 ,大小:1.65MB ,
资源ID:7942420      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-7942420.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(fpga实验报告李聪组Word下载.docx)为本站会员(b****4)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

fpga实验报告李聪组Word下载.docx

1、六、实验感想与收获 176.1、感想 176.2、一些Verilog语句归纳: 18七附录: 201.Kintex-7 FPGA 主要包括特性:2.FPGA主要原理 213.FPGA的基本特点: 224.FPGA一些应用 22实验(一)认识FPGA开发板一、实验目的1、了解FPGA开发流程2、了解Xilinx KC705 开发平台二、实验原理1.FPGA组成FPGA是Field Programmable Gate Array 的缩写,即现场可编程门阵列,它是在CPLD的基础上发展起来的新型高性能可编程逻辑器件,它一般采用SRAM工艺,也有一些专用器件采用Flash工艺或反熔丝(Anti-Fus

2、e)工艺等。FPGA 的集成度很高,其器件密度从数万系统门到数千万系统门不等,可以完成极其复杂的时序与组合逻辑电路功能,适用于高速、高密度的高端数字逻辑电路设计领域。FPGA的基本组成部分有可编程输入/输出单元、基本可编程逻辑单元、嵌入式RAM、丰富的布线资源、底层嵌入功能单元、内嵌专用硬核等。2.FPGA设计流程一般来说,完整的FPGA设计流程包括电路设计与输入、功能仿真、综合优化、综合后仿真、布局布线、布局布线后仿真、板级验证与加载配置调试等主要步骤,如图1所示。(1) 电路设计与输入。电路设计与输入是指通过某些规范的描述方式,将工程师电路构思输入给EDA 工具。常用的设计输入方法有硬件描

3、述语言(HDL)和原理图设计输入方法等。HDL语言中,应用最为广泛的是VHDL和Verilog HDL。(2)功能仿真。电路设计完成后,要用专用的仿真工具对设计进行功能仿真,验证电路功能是否符合设计要求。(3)综合优化。综合优化(Synthesize)是指将HDL 语言、原理图等设计输入翻译成由与、或、非门,RAM,触发器等基本逻辑单元组成的逻辑连接(网表),并根据目标与要求(约束条件)优化所生成的网表,输出edf和edn等标准格式的网表文件,供FPGA厂家的布局布线器进行实现。(4)综合后仿真。综合完成后需要检查综合结果是否与原设计一致,做综合后仿真。在仿真时,把综合生成的标准延时文件反标到

4、综合仿真模型中去,可估计门延时带来的影响。(5)实现与布局布线。综合结果的本质是一些与、或、非门,触发器,RAM 等基本逻辑单元组成的逻辑网表,它与芯片实际的配置情况有较大差距。此时,应该使用FPGA厂商提供的软件工具,根据所选芯片型号,将综合输出的逻辑网表适配到具体FPGA器件上,这个过程叫做实现过程。在实现过程中,最主要的过程就是布局布线。所谓布局(Place)是指将逻辑网表中的硬件原语或者底层单元合理地适配到FPGA内部的固有硬件结构上;所谓布线(Route)是指根据布局的拓扑结构,利用FPGA内部的各种连线资源,合理正确连接各个元件的过程。(6)时序仿真与验证。将布局布线的时延信息反标

5、到设计网表中,所进行的仿真就叫时序仿真或布局布线后仿真,简称后仿真。布局布线后仿真的主要目的在于发现时序违规(Timing Violation),即不满足时序约束条件或者器件固有时序规则(建立时间、保持时间)的情况。(7)板级仿真与验证。在有些高速设计情况下还需要使用第三方的板极验证工具进行仿真与验证。这些工具通过对设计的IBIS、HSPICE等模型的仿真,能较好地分析高速设计的信号完整性、电磁干扰(EMI)等电路特性等。(8)对器件下载调试。设计开发的最后步骤是在线调试或者将生成的配置文件写入芯片中进行测试。示波器和逻辑分析仪是逻辑设计的主要测试工具。以上任何仿真或者验证步骤出现问题,就需要

6、根据错误的定位返回到相应的步骤更改或者重新设计。本实验采用的是Xilinx公司的带有Kintex-7 FPGA的KC705开发平台。Xilinx 的7 系列FPGA 包括Artix-7,Kintex-7 和Virtex-7 三个系列。具有超高端连接带宽,逻辑容量和信号完整性,提供低成本,小型尺寸和大容量的要求严格的高性能应用。其中,Kintex-7 FPGA具有较高的性价比,其组成的收发器从600Mbps到最高的6.6 Gbps,达到28.05Gbps。主要用在航空电子、LED背光的平板电视和3D TV、LTE基带、手持超声设备、多模式无线电、Prosumer数码单反照相机和视频IP网关。图1

7、FPGA开发流程为了了解并掌握 FPGA 开发流程,本实验在 KC705平台设计设计一个分频计数的实验,用 FPGA 内部逻辑控制 LED 灯的亮灭。KC705 平台自带的8个LED 灯原理图如图3所示,当 GPIO 输入端为高电平时,二极管导通,灯变亮。当输入端为低电平时,二极管截止,灯变暗。本实验通过Verilog 代码进行计数分频,控制GPIO_LED_0的周期性变化。在Verilog 代码设计中,把分频输出信号与GPIO_LED_0管脚相连,大家就可以感受到分频产生的效果了。在代码里,使用的200M的差分时钟,一个周期是5ns,在代码里24位计数器cnt进行循环计数,一个周期有224个

8、时钟周期,大约是80ms,所以LED0 以80ms为周期变化。三、实验步骤3.1新建ISE工程(a) 打开 ISE 软件,新建工程,如图 4 所示图 4 新建 ISE 工程图5 输入工程名称和路径然后输入工程名称和路径,其余选择默认选项,点击 finish,如图 5 所示。新建工程结束之后,右击新建的工程名称,选择 add new source,可以向工程中添加源文件,在这里选择verilog module,在左侧对话框输入文件名称和路径,如图 6 所示。3.2添加源文件图6 添加verilog源文件回到设计页面,可以发现在工程下面多了一个.v 文件,点开文件,输入下面代码:module cl

9、k_div(clk_p,clk_n,rst,clk_div); input clk_p,rst;input clk_n;/定义输出输入端口,差分输入的脉冲,复位输入output clk_div;/定义输出端口reg clk_div;/为了操作方便定义了一个与输出端口同名的寄存器reg23:0 count;/定义24位变量用于分频是计数wire clk;always (posedge clk)/always例化语句,每到下降沿是执行if(rst)/检查是否有按键按下begincount = 1b0;/对输出和计数值进行初始化clk_div endelseif ( count!=24hffffff

10、)/计数最大值为ffffff,如果没有加到ffffff折继续加= count + 1b1;else /计数到ffffff个时钟周期后开始对计数值初始化,然后输出电平求反= clk_div;/差分时钟例化原语IBUFDS UUT_IBUFG(.I(clk_p),.IB(clk_n),.O(clk);Endmodule代码功能分析:这段程序的主要功能就是对输入时钟进行分频,每到ffffff个时钟周期,输出则求一次反,这样输出的脉冲则会是对时钟脉冲ffffff分频。3.3代码综合代码输入完成之后对代码进行综合,双击Synthesize-XST,综合成功后会显示对号或感叹号,如图7所示。如果是感叹号,

11、代表有警告,可右击Synthesize-XST查看综合报告,对这里出现的警告可以忽略。图10 布局布线3.4添加约束文件(c)为了使我们的代码与硬件映射,还需要进行管脚约束,管脚约束文件格式为ucf,与添加 verilog module 文件相同的方法,添加一ucf文件,不同的是在图8的左侧界面中选择 Implementation Consraints File。图 8 添加 ucf 文件回到设计界面,开始编辑ucf文件,打开KC705的datasheet,我们可以找到要使用的 LED0与FPGA 管脚AB8相连,如图9所示图 9 LED0 与 FPGA 管脚对应关系 同样的方法,再对时钟和复

12、位信号进行配置。时钟选用 200M 的 system clock source,复位信号选用 SW3,确定了管脚对应关系之后,开始编辑 ucf 文件,输入下列内容,其中 IOSTANDARD 为电压约束,在 KC705 的 datasheet 中可以找到。NET clk_p LOC=AD12 |IOSTANDARD=LVDS; /200Mclk_n LOC=AD11 |IOSTANDARD=LVDS;rst LOC=AG5 |IOSTANDARD=LVCMOS15;/sw3clk_div LOC=AB8 |IOSTANDARD=LVCMOS15;/LED03.5布线d) 以上工作做完之后,就要

13、对代码进行布局布线,生成可下载的比特流,如图 10 所示,双击 Generate Programming File。3.6生成比特流并下载到FPGA上上面步骤完成之后,开始将生成的比特流下载到FPGA板,如11 所示,连接开发板与电脑 图 11 连接 FPGA 与电脑点击 configure target device,打开 Impact,如图 12 所示12 打开iMPACT 软件点击箭头所示按钮,出现图 13 界面,点击 OK图13扫描设备如图 14 所示,软件识别出所连接设备,点击 OK图 14 设别设备双击设备,找到生成的比特流,出现图 15 对话框选择 no图 15 生成 PROM然

14、后选择 program,将比特流下载到 FPGA 板,下载成功后出现 program successed 标志,如图 16 所示图16 下载比特流成功(f)观察实验结果。按下 SW3,发现 LED0 是灭的,然后它会由 暗到明周期性的变化,如图 17,18 所示 图 17 LED0 变亮图 18 LED0 变暗四、实验拓展在看了实验指导书之后,我发现实现输出的波形都是方波,这时候,我打算改一下程序,让它输出PWM波,通过占空比来改变灯的亮度,通过PWM波的频率来改变闪烁的频率,经过仿真和下载到FPGA上面,得到了比较好的效果。如图19,计数值count一直线性增长,输入脉冲每来一个上升沿,计数

15、值就会加1,当计数值达到duty cycle(占空比)时,则输出低电平,当达到frequence时候,则计数值会变为0,同时输出高电平,通过改变frequence计数值和duty cycle值来分别改变频率和占空比图19源文件module vanpersie(clk_p,clk_n,clk_div,rst1,rst2,rst3);inputrst1,rst2,rst3;/rst1复位,rst2用于改变灯闪烁的频率,rst3用于改变灯闪烁的亮度,rst4用于改变闪烁的模式input clk_p, clk_n;/差分时钟输入口/计数值0 freqence;/设置输出脉冲的频率0 duty;/用于设

16、置输出脉冲的占空比reg0:0 i=0;/标志i初始化为0用来判断按键是否释放always(posedge clk)/输入脉冲下降沿时执行if(rst1)&(!i)/判断是否按下按键rst1,rst1用于初始化i=1/按键按下则将标志位置位freqence = 24hffffff;/初始化频率,这是后输出脉冲的频率等于上一个实验输出方波频率duty /占空比先设置为1,这是输出脉冲一直未高电平/初始化计数值为0/输出为高电平else if(rst2)&i)/判断按键rst2是否有按下(rst2用于改变频率,变为原来两倍)/有按键按下则置位标志位= freqence/2d2;/每按一下,freq

17、uence计数值变为原来一半,频率变为原来两倍else if(rst3)&i)/判断rst3是否按下,rst3用于改变占空比/置位标志位i,用于显示按键已经按下= duty/2/duty减半,占空比变为原来一半else if(!rst1)&rst2)&(rst3)/如果此时没有按键按下 begin i/复位标志位i,用于告诉系统没有按键按下 if(count!=freqence)/如果计数值没有达到frequence则计数值加1 begin count =duty)/如果计数值达到duty则输出低电平 clk_div else; end else/否则(计数值达到frequence),置位输出

18、,复位计数值 begin count end end .IB(clk_n), .O(clk);约束文件rst1 LOC=AG5 | IOSTANDARD=LVCMOS15;rst2 LOC=AB12 | IOSTANDARD=LVCMOS15;/sw4rst3 LOC=AC6 | IOSTANDARD=LVCMOS15;/sw5仿真文件module vanpersie_test;/定义模块 / Inputs/定义输入 reg clk_p; reg clk_n; reg rst1; reg rst2; reg rst3; / Outputs/定义输出 wire clk_div; / Instan

19、tiate the Unit Under Test (UUT) vanpersie uut ( .clk_p(clk_p), .clk_n(clk_n), .clk_div(clk_div), .rst1(rst1), .rst2(rst2), .rst3(rst3) ); / Add stimulus here initial begin / Initialize Inputs/初始化 clk_p = 0; clk_n = 1; rst1 = 1;/先按下按键rst1,这样先对输出初始化 rst2=0; rst3 =1;/按下rst3,这样输出的方波占空比减半 #100; forever b

20、egin rst3=1; #100; rst3=0; clk_p=#1 clk_p; clk_n=clk_n; end #80; rst1 = 0;/释放按键 rst2=0; #200; rst3 = 0; end endmodule五、思考题(1)本实验中代码实现的是偶数分频,试编写奇数分频,如3分频代码。1 首先,完全可以通过计数器来实现,如进行三分频,通过待分频时钟上升沿触发计数器进行模三计数,当计数器计数到邻近值进行两次翻转,比如可以在计数器计数1时,输出时钟进行翻转,计数到2时再次进行翻转。即是在计数值在邻近的1和2进行了两次翻转。这样实现的三分频占空比为1/3或者2/3。2. 如果

21、要实现占空比为50%的三分频时钟,可以通过待分频时钟下降沿触发计数,和上升沿同样的方法计数进行三分频,然后下降沿产生的三分频时钟和上升沿产生的时钟进行相或运算,即可得到占空比为50%的三分频时钟。这种方法可以实现任意的奇数分频。方法一:/上升沿触发的分频设计modulethree(clkin,clkout);inputclkin;/定义输入端口outputclkout;reg1:0step1,step;always(posedgeclkin)/数组step在上升沿是加1,对上升沿独立技术begincase(step)2b00:step=2b01;b01:b10;b10:b00;default:

22、endcase(negedge/数组step1在下降沿是加1,对下降沿独立计数(step1)step1assignclkout=(step1|step11);/采用差分脉冲输出,输出的式step,step1第二位求或的反,得到三分频冲(占空比为1/3或者2/3)方法二:/如 果dutycycle=50%,可以第一个周期第二个周期输出原先clock,第三个周期输出低,这样可以实现三分频,输出是占空比1:1的三分频.three(clk,throut)clkthrout;q1,q2,d,throut;clk)/q1用于记录上升沿,有1和0两种状态if(!d)q1=1elseq1=q1/q2用于记录下

23、降沿,有1和0两种状态q2=1q2=q2(q1orq2)/用or语句,每当q1,q2中其中一个有变化时d=q1&q2/d记录差分时钟 /当d发生变化时候则输出求反,得到占空比50%的三分频脉冲throut=throut; 仿真波形(2)本实验中把比特流下载到FPGA开发板是通过USB接口,除USB之外还有哪些下载方式?奇数倍分频有两种实现方法:下载FPGA里面 有三种方式JTAG:下载sof文件,掉电丢失可以将sof转换为jic文件,用EPCSx配置,掉电不丢失AS:下载pof文件,配置EPCSx,掉电不丢失PS:比较老的下载方式,很少使用六、实验感想与收获6.1、感想通过这次FPGA实验,我

24、有很深的感触。之前在做实验之前,就对FPGA早有耳闻,最早是在学习verilog时候老师提到过fpga是可编程电路,能够并行地处理数据,运算快,后来在实验室参观的时候,老师提到FPGA说现在数据处理能力要求越来越高,很多时候,会用到FPGA,它速度很快,普通电脑做一些数据处理可能要花费将近一年时间,而FPGA则只要花费一天,因为是程序执行可以是并行的,因此速度快,在很多领域内都有很广的用途。后来在实验课上,助教老师给我们介绍了FPGA和xilinux的软件ISE,我越来越喜欢这款开发工具,因为功能强大,运算能力强,普通的DSP芯片做数据处理时候时序控制能力较弱,而且受到时钟约束,在越来越追求速

25、度的今天,它时序控制能力强(时序能力强,没有指令周期,速度快),控制能力较强的特点得到了很好的发挥,而且ISE软件还带有仿真器,能够在没有硬件的时候能够比较好地仿真出时序逻辑。回去后,自己开始仿真,发现很多时候都出问题,最开始是编译不通过,对verilog语言数据表示,块语句,always,assign,case,if等例化语句很不熟悉,时常就写错编译不通过,仿真文件编写时候理解有问题,得不到想要的结果,因为这些原因,我花费了很长的一段时间去适应,理解,最后,我做了一些总结如下。过程语句有:initial、always(可综合) initial语句常用于仿真中的初始化,initial过程块中的语句仅执行一次;always块内的语句则是不断重复执行的;一般来说always语句使用方法是always ()/过程赋值/if-else,case,casex,casez选择语句/while,repeat,for循环/task,function调用注意:1.always过程语句通常是带有触发条件的,触发条件写在敏感信号表达式中,只有当触发条件满足时,其后的“begin-end”块语句才能被执行2.其中敏感信号表达式为事件表达式或敏感信号列表当表达式中变量

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2