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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

FPGA实验.docx

1、FPGA实验电子科技大学成都学院实验报告册 课程名称: FPGA实验 姓 名: 学 号: 院 系: 专 业: 教 师: 2012年 12 月 21日 实验一: 计数器 一、 实验目的:本实验的目的要求我们掌握怎样在Quartus II上面编写Verilog代码,并且要求我们掌握如何在时钟Clk下进行计数为以后的时钟分频做铺垫。二、实验原理和内容: 实验原理:在外部的时钟的上升沿到来时,输出Out从零进行自加一。当加到自己的学号30时则利用状态机切换到自减的状态直到减到0为止时,又利用状态机进行切换到自加的状态直到加到30为止。就这样反复的执行下去。 实验内容:在Quartus II软件上面编写

2、出对计数器的Verilog代码,并且最终在Quartus II上面进行波形仿真进行验真。三、实验步骤:在这里先给出详细的Quartus II如何编写Verilog代码的步骤,在后续的实验里不再介绍。步骤一:先打开Quartus II软件,进行工程的建立,进入到界面中点击菜单栏的File下面的New Project Wizard.的选项则马上跳出New Project Wizard窗口如图1-1所示,再点击Next,在跳出来的窗口的最上面一栏中填写你的工程的保存路径(注意路径中不要出现中文),在后面的栏里填写工程的名字(这里的名字必须要与你编写的Verilog代码的模块名一样),接着点击Next

3、,一般这个窗口不设置,再次点击Next,在跳出来的窗口里里面你要设置你的开发板的芯片属于哪个类型、封装类、引脚个数、芯片名字等,设置完后再次点击Next,这后面的几个窗口一般都不用设置所以都不用管,最后点击finish。到这里一个工程就建立完了。图1-1步骤二:建立完工程之后就要在工程里面添加Verilog HDL File文件进行Verilog代码的编写。在菜单栏里面点击File里的New。在跳出来的New窗口如图1-2所示选择Verilog HDL File。这样Verilog HDL File就建立完成了。 图1-2步骤三:编写计数器的Verilog代码,编写完之后进行保存接着综合编译。

4、即点击菜单栏里面的一个三角形。如果综合编译的过程中出现错误必须改正直到一个错误都没有为止。步骤四:综合编译成功和进行波形仿真,来检验代码是否实现的预期的目的,点击菜单栏的File里面的New,在跳出来的窗口里面选择Vector Waveform File即建立波形仿真文件。四、实验数据和结果:代码: /实现计数到自己的学号30之后又从30计数到0如此反复循环下去module Counter(Clk,Count);input Clk;output4:0 Count;reg 4:0 Count;reg1:0 state=2b00; always(posedge Clk) begin case(st

5、ate) 2b00: begin if(Count=30) state=2b01; else Count=Count+1; end 2b01: begin if(Count=0) state=2b00; else Count=Count-1; end default: state=2b00; endcase endendmodule仿真波形图如图1-3所示 图1-3 五、实验总结: 通过本次实验我学会了如何使用Quartus II软件,这为以后进行Verilog编写代码提供一个平台。同时学会了状态机如何在实际的例子中的应用,同时掌握了计数器的编写,后续的实验分频打下的基础。 实验二: 奇数分频

6、 一、 实验目的:本次实验的目的是要求我们掌握在计数器的基础上对开发板上面自带的时钟频率进行分频从而得到实际工程中需要的时钟频率。二、 实验原理和内容:实验原理:分频分为偶数分频和计数分频,因为计数分频中都包含了如何偶数分频,所以这里就只说明奇数分频的原理。用两个计数器,一个由输入时钟上升沿触发,另一个有输入时钟下降沿触发,最后将两个计数器的输出相或,即可得到占空比为50%的方波波形。实验内容:在Quartus II软件上面编写出对奇数21进行分频,其中占空比为1:1的Verilog代码,并且最终在Quartus II上面进行波形仿真进行验真。三、 实验步骤:步骤一:打开Quartus II软

7、件建立名字为“fen_21”的工程,并且在其工程里面建立Verilog HDL File文件进行分频的Verilog代码的编写。步骤二:在对Verilog代码编写完之后,进行保存,并且进行综合编译。如果有错误必须依次错误直到里面没有任何错误为止。步骤三:在综合编译成功之后,在次建立波形的仿真文件Vector Waveform File,进行波形仿真验真,如果波形不是我们预期的波形,再次返回Verilog HDL File文件中对Verilog代码进行修改直到仿真波形真确为止。四、 实验数据和结果:代码:module fen_21(CLK,RSTn,Out); input CLK; input

8、RSTn; output Out; reg4:0Count1,Count2; reg Out1,Out2; /./ assign Out=Out1|Out2; /./ always(posedge CLK ) begin if(!RSTn) begin Out1=1b0; Count1=5b0; end else if(Count1=5b10100) Count1=5b0; else Count1=Count1+1b1; if(Count1=5b1001) Out1=Out1; else if(Count1=5b10011) Out1=Out1; end always(negedge CLK)

9、 begin if(!RSTn) begin Out2=1b0; Count2=5b0; end else if(Count2=5b10100) Count2=5b0; else Count2=Count2+1b1; if(Count2=5b1001) Out2=Out2; else if(Count2=5b10011) Out2=Out2; end endmodule仿真波形如图1-4所示图1-4五、实验总结: 通过本次实验可以体会到这个实验的重要性,它不仅仅是计数器的扩展和应用。它可以把开发板的固定的时钟频率分频成我们在实际工程中需要的时钟频率。这就摆脱了单片机的固定时钟频率的限制,使得开

10、发板更加灵活从而更加应以我们以后项目开发。 实验三: 花样流水灯 一、 实验目的:本次试验的目的要求我们掌握如何在实际例子中利用分频来达到我们预期的要求。同时要求我们掌握状态机的编写来实现不同状态的切换。并且要求我们掌握如何为芯片配置引脚来实现在开发板上面的功能。二、 实验原理和内容:实验原理:开发板上面的LED灯是共阳极,给LED灯的阴极提供低电平就会让LED灯点亮。所以对时钟进行一秒钟的分频,来逐一点亮LED灯来实现花样流水灯。同时用状态机来切换不同形式的花样流水灯。实验内容:在Quartus II软件中编写实现不同样式相互切换的花样流水灯的Verilog代码。并且下载到开发板上进行调试,

11、同时生成综合后的电路图作为实验的结果。三、 实验步骤:步骤一:打开Quartus II软件建立名字为“LED_water”的工程,并且在其工程里面建立Verilog HDL File文件进行流水灯的Verilog代码的编写。步骤二:在对Verilog代码编写完之后,进行保存,并且进行综合编译。如果有错误必须依次错误直到里面没有任何错误为止。步骤三:在综合编译成功之后,对芯片的引脚进行配置并且把不用的引脚设置成三态,再把Verilog代码下载到开发板进行调试,如果调试不成功则返回到代码上面进行修改直到调试成功为止,最后生成综合后的电路图。四、 实验数据和结果:代码:module LED_wate

12、r(clk,LED_Out); input clk; output7:0 LED_Out; reg7:0LED_Out=8hff; reg clk_out; reg31:0 count; always(posedge clk) begin count=count+1; if(count=12000000) begin clk_out=clk_out; count=0; end end reg 2:0state; always (posedge clk_out) begin case(state) 2b00:begin /流水灯由中间向两边流动 if(LED_Out=8b0000_0000) b

13、egin LED_Out=8b1111_1111;state=2b01;end else begin LED_Out7:41; LED_Out3:0=LED_Out3:01; end end 2b01:begin /流水灯由两边向中间流动 if(LED_Out=8b0000_0000) begin LED_Out=8b1111_1111;state=2b10;end else begin LED_Out7:4=LED_Out7:41; LED_Out3:01; end end 2b10:begin /流水灯由右向左流动 if(LED_Out=8b0000_0000) begin LED_Out

14、=8b1111_1111;state=2b11;end else begin LED_Out=LED_Out1; end end 2b11:begin /流水灯由左向右流动 if(LED_Out=8b0000_0000) begin LED_Out=8b1111_1111;state=2b11;end else begin LED_Out1; end end endcase end endmodule 综合电路图如图1-5所示 图1-5五、实验总结: 本次实验给我们提供了分频时钟的一个实例,让我们深刻体会到掌握和熟练应用分频的重要性。并且在本次实验中通过开发板上面的现象深刻体会到Verilog

15、语言的并行执行,这与单片机的串行执行有非常大的差别。同时还学会了怎样让编写出的Verilog程序在开发板调试的一系列操作和注意的事项。 实验四: 显示学号 一、 实验目的:本次实验的目的要求我们掌握熟练应用时钟分频,并且要求我们区分数码管的静态显示和动态显示的区别同时要求我们如何在实例中来应用数码管的动态显示。二、实验原理和内容: 实验原理:开发板上面的数码管为共阳极所以给数码管的段提供相应的低电平就可以让它现实所要表达的数字,同时利用分频后的时钟快速扫描数码管从而完成学号的显示。实验内容:在Quartus II软件中编写实现数码管动态显示的Verilog代码。并且下载到开发板上进行调试,同时

16、把开发板上面的数码管显示的学号作为实验的结果。三、实验步骤:步骤一:打开Quartus II软件建立名字为“LCD_view”的工程,并且在其工程里面建立Verilog HDL File文件进行数码管显示学号的Verilog代码的编写。步骤二:在对Verilog代码编写完之后,进行保存,并且进行综合编译。如果有错误必须依次错误直到里面没有任何错误为止。步骤三:在综合编译成功之后,对芯片的引脚进行配置并且把不用的引脚设置成三态,再把Verilog代码下载到开发板进行调试,如果调试不成功则返回到代码上面进行修改直到调试成功为止,最后拍下开发板上数码管显示的学号。四、实验数据和结果:代码: modu

17、le LCD_view(Clk,dig,seg); input Clk; output5:0dig; output7:0seg; reg5:0dig; reg7:0seg; reg31:0Count1, Count2; reg Clk_Out1,Clk_Out2; /1US always(posedge Clk) begin if(Count1=25000) begin Clk_Out1=Clk_Out1; Count1=0; end else Count1=Count1+1; end reg 2:0a; always(posedge Clk_Out1) begin a=a+1; end /s

18、can_led reg3:0disp_dat; always(posedge Clk_Out1) begin case(a) 3d0:disp_dat=4h0; 3d1:disp_dat=4h3; 3d2:disp_dat=4h1; 3d3:disp_dat=4h0; 3d4:disp_dat=4h1; 3d5:disp_dat=4h7; /3d6:disp_dat=4hf; /3d7:disp_dat=8hf; endcase case(a) 3d0:dig=6b11_1110; 3d1:dig=6b11_1101; 3d2:dig=6b11_1011; 3d3:dig=6b11_0111;

19、 3d4:dig=6b10_1111; 3d5:dig=6b01_1111; /3d6:dig=8b1111_1011; /3d7:dig=8b1101_1111; endcase end always(disp_dat) begin case(disp_dat) 4h0:seg=8hc0; 4h1:seg=8hf9; 4h2:seg=8ha4; 4h3:seg=8hb0; 4h4:seg=8h99; 4h5:seg=8h92; 4h6:seg=8h82; 4h7:seg=8hf8; 4h8:seg=8h80; 4h9:seg=8h90; 4ha:seg=8h88; 4hb:seg=8h83;

20、 4hc:seg=8hc6; 4hd:seg=8ha1; 4he:seg=8h86; 4hf:seg=8hbf; endcase end endmodule实验结果如图1-6所示图1-6注:由于数码管有限,所以只显示了自己学号的后六位。五、实验总结:通过本次实验明白了数码管的动态显示和静态显示的区别,同时更加熟练的掌握和应用分频时钟。同时也更加熟练的在开发板上面调试Verilog代码。 实验五: 秒表 一、实验目的: 本次实验的目的要求我们掌握多个时钟分频的应用,同时要求我们掌握和体会Verilog代码的并行执行的特点。二、实验原理和内容: 实验原理:利用一个把系统时钟分成1S的时钟来作为秒表

21、计数的间隔时间,同时利用把系统时钟分成1us的时钟来作为数码管扫描的时间间隔从而让数码管动态显示。从而构成一个秒表。 实验内容:在Quartus II软件中编写实现数码管动态显示秒表的Verilog代码。并且下载到开发板上进行调试,同时把开发板上面的数码管显示的秒表作为实验的结果。三、实验步骤:步骤一:打开Quartus II软件建立名字为“LCD_maio”的工程,并且在其工程里面建立Verilog HDL File文件进行数码管显示秒表的Verilog代码的编写。步骤二:在对Verilog代码编写完之后,进行保存,并且进行综合编译。如果有错误必须依次错误直到里面没有任何错误为止。步骤三:在

22、综合编译成功之后,对芯片的引脚进行配置并且把不用的引脚设置成三态,再把Verilog代码下载到开发板进行调试,如果调试不成功则返回到代码上面进行修改直到调试成功为止,最后拍下开发板上数码管显示的秒表。四、实验数据和结果:代码:module LCD_miao (Clk,dig,seg); input Clk; output1:0dig; output7:0seg; reg1:0dig; reg7:0seg; reg31:0Count1, Count2; reg Clk_Out1,Clk_Out2; /1US always(posedge Clk) begin if(Count1=24000) b

23、egin Clk_Out1=Clk_Out1; Count1=0; end else Count1=Count1+1; end /1s always(posedge Clk) begin if(Count2=24000000) begin Clk_Out2=Clk_Out2; Count2=0; end else Count2=Count2+1; end /counter reg7:0Out; always(posedge Clk_Out2) begin if(Out3:0=9) begin Out3:0=0; Out7:4=Out7:4+1; end else Out3:0=Out3:0+1

24、; if(Out7:4=6) Out=0; end reg a=0; always(posedge Clk_Out1) begin a=a+1; end /scan_led reg3:0disp_dat; always(a) begin case(a) 1d0:disp_dat=Out3:0; 1d1:disp_dat=Out7:4; endcase case(a) 1d0:dig=8b1111_1110; 1d1:dig=8b1111_1101; endcase end always(disp_dat) begin case(disp_dat) 4h0:seg=8hc0; 4h1:seg=8

25、hf9; 4h2:seg=8ha4; 4h3:seg=8hb0; 4h4:seg=8h99; 4h5:seg=8h92; 4h6:seg=8h82; 4h7:seg=8hf8; 4h8:seg=8h80; 4h9:seg=8h90; 4ha:seg=8h88; 4hb:seg=8h83; 4hc:seg=8hc6; 4hd:seg=8ha1; 4he:seg=8h86; 4hf:seg=8h8e; endcase endendmodule 实验结果如图1-7所示 图1-7 五、 实验总结:通过本次实验掌握了如何利用把系统时钟分频成所需的不同时钟。同时通过本次实验更加能体会到Verilog代码的

26、并行执行的特点。 实验六: 多功能数字时钟 一、 实验目的:本次实验的目的要求我们掌握如何在Verilog代码中为按键消抖,并且掌握如何利用按键对状态的切换和利用按键进行校时,同时理解和掌握对系统时钟分成不同时钟的应用。二、实验原理和内容: 实验原理:该实验原理与前面的实验五的原理一样,不同的是多了一个按键功能,把系统时钟进行分频,分成5us的时钟来作为按键消抖的触发条件,即当在连续的3个5us的时间内按键都是按下的这判断按键是按下的。 实验内容:在Quartus II软件中编写实现数码管动态显示时钟和按键控制时钟的Verilog代码。并且下载到开发板上进行调试,同时把开发板上面的数码管显示的

27、时钟作为实验的结果。三、实验步骤:步骤一:打开Quartus II软件建立名字为“LCD_clock”的工程,并且在其工程里面建立Verilog HDL File文件进行多功能数字时钟的Verilog代码的编写。步骤二:在对Verilog代码编写完之后,进行保存,并且进行综合编译。如果有错误必须依次错误直到里面没有任何错误为止。步骤三:在综合编译成功之后,对芯片的引脚进行配置并且把不用的引脚设置成三态,再把Verilog代码下载到开发板进行调试,如果调试不成功则返回到代码上面进行修改直到调试成功为止,最后拍下开发板上数码管显示的时钟。四、实验数据和结果:代码: module LCD_clock (Clk,dig,seg,key); input Clk; input3:0key; output5:0dig; output7:0seg; reg5:0dig; reg7:0seg; reg31:0Count1, Count2; reg Clk_Out1,Clk_Out2; /1US always(posedge Clk) begin if(Count1=50000) begin Clk_Out1=Clk_Out1; Count1=0; end else Coun

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1