EDA、FPGAVerilog实验报告.doc

上传人:仙人指路1688 文档编号:4144012 上传时间:2023-04-07 格式:DOC 页数:23 大小:437KB
返回 下载 相关 举报
EDA、FPGAVerilog实验报告.doc_第1页
第1页 / 共23页
EDA、FPGAVerilog实验报告.doc_第2页
第2页 / 共23页
EDA、FPGAVerilog实验报告.doc_第3页
第3页 / 共23页
EDA、FPGAVerilog实验报告.doc_第4页
第4页 / 共23页
EDA、FPGAVerilog实验报告.doc_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《EDA、FPGAVerilog实验报告.doc》由会员分享,可在线阅读,更多相关《EDA、FPGAVerilog实验报告.doc(23页珍藏版)》请在三一办公上搜索。

1、FPGA实验报告学 号: 姓 名: 院 系:微电子技术系专 业:集成电路设计指 导 教 师:李 海2010年 12月实验一 一位全加器一、实验目的:1、通过此实验进一步熟悉和掌握CPLD/FPGA开发软件的使用方法。2、掌握Verilog HDL语言的书写格式及编程方法。3、学会对Verilog HDL 代码进行编译,检查,改错。4、学会编写代码,验证1位全加器。5、学习简单时序电路的设计和硬件测试。二、实验内容和原理:(一)实验内容:本实验的内容是建立一个1位全加器。具体内容包括:(1)使用Quartus II建立工程、编写程序;(2)进行波形仿真验证;(3)进行硬件测试(二)实验原理:1、

2、一位全加器包括输入端A、B,进位Cin,和输出count,sum,下图是真值表: ABCinSumCout00000100100101011001001101010101101111112、全加器的电路原理图:三、实验步骤:1、启动Quartus II 软件,新建空白的工程,名为:full_add.qdf。2、新建Verilog HDL源文件full_add.v如下full.v:module full_add (a,b,cin,sum,count);input a,b,cin;output sum,count;assign count,sum=a+b+cin;endmodule3、编译完成,找

3、出错误,并改正,直到编译无误为止。4、新建测试文件如下:module full_add _test;reg a,b,cin;wire count,sum;full_add (a,b,cin,sum,count);initial begin a=0;b=0;cin=0;#1000 a=1;#1000 a=0;b=1;#1000 a=1;#1000 a=0;b=0;cin=1;#1000 a=1;#1000 a=0;b=1;#1000 a=1;#1000 $finish;endendmodule5、编译测试文件,结合full_add.v,使用MODELSIM进行时序仿真,观察结果。四、实验数据和结

4、果:比对该波形图的电平与真值表的大小发现其一一对应。五:实验总结:通过本实验,了解了Quartus II的基本使用方法,学会了对Verilog HDL 代码的调试,并能通过编译、波形仿真和验证,最终得到了预想的结果。实验二 花样流水灯一、实验目的:1、通过此实验进一步熟悉和掌握CPLD/FPGA开发软件的使用方法2、熟悉LED灯的工作原理。3、掌握控制LED灯的开关。4、编写代码实现LED灯的花样流水闪烁。5、学习简单时序电路的设计和硬件测试。二、实验内容和原理:(一)实验内容:本实验的内容是建立可用与控制LED流水灯的简单硬件电路,要求在SmartSOPC实验箱上实现LED1LED8发光二极

5、管流水灯显示。(二)实验原理:50MHz 的时钟源,假如我们直接把它输入。LED灯的点亮和熄灭,主要是控制发光二极管的阴极置低电平到发光二极管LED,由于人眼的延迟性,我们将无法看到LED 闪烁,认为它一直亮着。如果我们期望看到闪烁灯,就需要将时钟源的频率降低后再输出。本实验采用计数与判段的方式来实现降低时钟源的频率。计数电路可用计数器实现,每来一个时钟脉冲CLK,计数器就加1,而每当判断出计数器达到某个数值时,把输出状态求反。三、实验步骤:1、打开Quartus II 软件建立一个空白工程,然后命名为led_water.qpf.2、点击FileNew.,在该项目下新建Verilog HDL

6、源程序文件led_water.v,输入试验程序中的源程序代码保存后选择工具栏中启动编译,若在编译中发现错误,则找出并更正错误,直到编译成功为止。moduleled_water (sys_clk,led);input sys_clk;output 7:0 led;reg 7:0 led;reg 24:0 count;reg 4:0 state;wire clk;always (posedge sys_clk)count612EDA612EDAled0505050led5474747led1535353led6484848led2545454led7494949led3555555clock282

7、828led41761761764、更改分频模块(int_div)的分频系数,并重新编译下载,观察流水灯的变化。四、实验结果:led7-led0依次点亮,全部8灯闪烁两次,之后led0-led7依次点亮。全部8灯闪烁两次,之后led7&led0,led6&led1,led5&led2,led6&led3,依次点亮,再返回按顺序熄灭。五、实验总结:通过使用赋值语句,熟练掌握了7个led灯的控制,并进行花样闪烁。熟悉了对IO口的控制操作。掌握了Verilog语言的case语句的书写和调试。实验三 分频器的设计(偶数分频)一、实验目的:1、通过此实验进一步熟悉和掌握CPLD/FPGA开发软件的使用方

8、法。2、掌握Verilog HDL语言的书写格式及编程方法。3、学会对Verilog HDL 代码进行编译,检查,改错。4、学会数控分频器的设计、分析和测试方法。5、学习简单电路的设计和硬件测试。二、实验内容和原理:(一)实验内容:在SmartSOPC试验箱上的实现数控分频器的设计。在clk输入64kHz或更高(要确保分频后落在音频范围)的频率信号(由int_div模块分频得到);输出FOUT接蜂鸣器BUZZ-ER,由KEY1/KEY2控制输入8位预置数,并在数码管12上显示(调用key_led模块)。(二)实验原理:数控分频器的功能就是输入端输入不同的数据时,产生不同的分频比,从而产生不同的

9、频率值。本例是用计数值可并行预置的加法计数器设计完成的,方法是将计数溢出位与预置数加载输入信号相接即可。三、实验步骤:1、启动Quartus II建立一个空白工程,然后命名为dvf16.qpf。 2、建立波形仿真文件(dvf.vwf)并进行功能仿真验证。3、分别新建VerilogHDL源程序文件pulse.v、key_led.v、int_div.v,输入程序代码并保存(完整的VerilogHDL程序参考程序清单五.1、五.2和二.2),然后进行综合编译.若在编译过程中发现错误,则找出并更正错误,直到编译成功为止。4、从设计文件创建模块,由pulse.v、key_led.v、int_div.v分

10、别生成名为pulse.bsf 、key_led.bsf、int_div.bsf的模块符号文件。5、新建图形设计文件(顶层模块)命名为dvf16.bdf并保存。其模块原理图如图五.1所示。图五.1 8位全加器顶层模块6、选择目标器件并对相应的引脚进行锁定,在这里缩选择的器件为Altera公司Cyclone系列的EP1C6Q240C8芯片。引脚锁定方法如表五.1所列。将未使用的引脚设置为三态输入。表五.1 引脚锁定方法信号引脚信号引脚信号引脚IC6IC12EDAIC6IC12EDAIC6IC12EDAseg(0)169169169seg(7)164164164dig(6)198238213seg(

11、1)170170170dig(0)160160160dig(7)205239214seg(2)167167167dig(1)159159159key(0)121121121seg(3)168168168dig(2)162162162key(1)122122122seg(4)165165165dig(3)161161161fout175175175seg(5)166166166dig(4)204236215clock282828seg(6)163163163dig(5)1992372167、将dvf.bdf设置为顶层实体。对该工程文件进行全程编译处理,若在编译过程中发现错误,则找出并更正错误直至

12、编译成功为止。8、连接硬件、下载程序。如果核心板是QuickSOPC-1C12,则须执行此步骤;否则跳过此步。将实验箱配置的连线将核心板上PACK区的引脚236、237、238和239分别与数码管显示区的COM3(DIG_COM)的DIG4DIG7相对应连接。将跳线短接帽跳接到JP7和JP6的KEY1、KEY2和BEEP。将Altera ByteBlasterII下载电缆的两端分别接到PC机的打印机并口和QUICKSOPC核芯板上的JTAG下载口上,打开电源,执行下载命令,把程序下载到FPGA器件中。按下KEY1、KEY2键改变分频预置数,观察蜂鸣器发出的声音有何变化。9、实验程序:modul

13、e div16(clk_in,clk_out,rst); parameter width=3;input clk_in;input rst;output clk_out;regwidth-1:0 cnt;reg tmp_clk; always(posedge clk_in) begin if(!rst) begin cnt=0; tmp_clk=0; end else if(cnt=3b111) begin cnt=0; tmp_clk=tmp_clk; end else cnt=cnt+1; end assign clk_out=tmp_clk; endmodule四、实验结果:五、实验总结

14、:通过本实验,熟练掌握了分频器的工作原理及设计,并进行偶数分频器的波形仿真。熟悉了对IO口的控制操作。掌握了Verilog语言的语言的书写和调试。实验四 按键控制数码管的显示一、实验目的:1、进一步了解、熟悉和掌握FPGA开发软件QuartusII的使用方法及Verilog HDL的编程方法。2、学习数码管的工作原理和电路设计。3、熟悉对按键功能的操作。4、学会按键控制数码管的显示,并通过显示数值,区分是安格按键被按下。二、实验内容和原理:(一)实验内容:要求当按下KEY1是数码管显示1;当按下KEY2是数码管显示2依次类推,直到当按下KEY8是数码管显示8。(二)实验原理:1、数码管的显示原

15、理:LED的结构LED数码管里面有8只发光二极管,分别做a,b,c,d,e,f,g,dp断,其中dp为小数点断,每个段都有两个外部引脚,其中一个接外部电路,另外一个8段共用一个极,或阴极,或阳极。在非共用端加入并行数据就可以控制数码管各段LED的亮和灭,来显示不同的数字。下面是0-9需要再并行一端配置的数据 0xc0,0xf9,x0a4,x0b0,x099,x092,x082,x0f8,0x80,0x982、实验设计:当KEY按下时,我们对KEY_IN的取值进行读取,根据读取的信号,对数码管位选信号进行控制,使其显示对应的数值。例如当第一个按键按下时,有key_in=8b11111110,则赋

16、值seg=8hf9,数码管显示1。三、实验步骤:1、启动 Quartus建立一个空白工程,然后命名为key_led。2、点击FileNew.,在该项目下新建Verilog HDL 源程序文件key_led.v,输入试验程序中的源程序代码保存后选择工具栏中启动编译,若在编译中发现错误,则找出并更正错误,直到编译成功为止。module key_led(key_in,seg);input7:0key_in;output7:0seg;reg7:0seg;reg7:0buffer;always(key_in)begin buffer=key_in; case(buffer) 8b11111110:seg

17、=8hf9; 8b11111101:seg=8ha4; 8b11111011:seg=8hb0; 8b11110111:seg=8h99; 8b11101111:seg=8h92; 8b11011111:seg=8h82; 8b10111111:seg=8hf8; 8b01111111:seg=8h80; default: seg=8hc0; endcaseendendmodule3、引脚设置:Key0Key1Key2Key2Key4Key5Key6Key7121122123124125126127128Seg0Seg1Seg2Seg3Seg4Seg5Seg6Seg71691701671681

18、651661631644、下载sof文件到试验箱里,观察试验箱上的实验结果。四、实验数据和结果当按下KEY1时数码管显示为1;当按下KEY2时数码管显示为2;当按下KEY3时数码管显示为3;当按下KEY4时数码管显示为4;当按下KEY5时数码管显示为5;当按下KEY6时数码管显示为6;当按下KEY7时数码管显示为7;当按下KEY8时数码管显示为8;五、实验总结通过本实验,学会了按键对数码管的控制,并且掌握了数码管数值显示的控制方法,还能通过按键控制数码管显示相应的数值。实验五 学号的显示一、实验目的:1、熟练掌握FPGA开发软件QuartusII的使用方法及Verilog HDL的编程方法。2

19、、熟悉数码管段选和位选的操作。3、掌握分频程序的使用。4、实验设计实现8个数码管显示学号后8位。二、实验原理和内容。(一)实验内容:要求调试好实验以后实验箱上的第一个数码管显示4,一秒后熄灭,此时第二个数码管显示0,然后依次类推直到第八个数码管依次显示数字 4、0、7、1、0、6、3、1。(二)实验原理:在实验箱上,在非共用端加入并行数据就可以控制数码管各段LED的亮和灭,来显示不同的数字。由于实验使用的时钟引脚频率比较高,在扫描数值的时候比较快,肉眼无法识别显示的数字,故先做预分频处理。实验用的原理图: 三、实验步骤:1、启动 Quartus建立一个空白工程,然后命名为scan_led。2、

20、点击FileNew.,在该项目下新建Verilog HDL 源程序文件scan_led.v,输入试验程序中的源程序代码保存后选择工具栏中启动编译,若在编译中发现错误,则找出并更正错误,直到编译成功为止。module scan_led(clk,dig,seg);input clk;output7:0dig;output7:0seg;reg7:0seg_r;reg7:0dig_r;reg3:0disp_dat;reg2:0count;assign dig=dig_r;assign seg=seg_r;always (posedge clk)begin count=count+1b1;endalwa

21、ys (posedge clk)begin case(count) 3d0:disp_dat=4; 3d1:disp_dat=0; 3d2:disp_dat=7; 3d3:disp_dat=1; 3d4:disp_dat=0; 3d5:disp_dat=6; 3d6:disp_dat=3; 3d7:disp_dat=1;endcase case(count) 3d0:dig_r=8b11111110; 3d1:dig_r=8b11111101; 3d2:dig_r=8b11111011; 3d3:dig_r=8b11110111; 3d4:dig_r=8b11101111; 3d5:dig_r

22、=8b11011111; 3d6:dig_r=8b10111111; 3d7:dig_r=8b01111111; endcaseendalways(disp_dat)begin case(disp_dat) 4h0:seg_r=8hc0; 4h1:seg_r=8hf9; 4h2:seg_r=8ha4; 4h3:seg_r=8hb0; 4h4:seg_r=8h99; 4h5:seg_r=8h92; 4h6:seg_r=8h82; 4h7:seg_r=8hf8; 4h8:seg_r=8h80; 4h9:seg_r=8h90; endcaseendendmodule3、点击FileNew.,在该项目

23、下新建Verilog HDL 源程序文件int_div.v,输入试验程序中的源程序代码保存后选择工具栏中启动编译,若在编译中发现错误,则找出并更正错误,直到编译成功为止。module int_div(clock,clk_out);input clock; output clk_out; reg clk_p_r; reg clk_n_r; regF_DIV_WIDTH - 1:0 count_p; regF_DIV_WIDTH - 1:0 count_n; parameter F_DIV = 48000000; parameter F_DIV_WIDTH = 32; wire full_div_

24、p; wire half_div_p; wire full_div_n; wire half_div_n; assign full_div_p = (count_p F_DIV - 1);assign half_div_p = (count_p 1) - 1);assign full_div_n = (count_n F_DIV - 1);assign half_div_n = (count_n 1) - 1);assign clk_out = (F_DIV = 1) ? clock : (F_DIV0 ? (clk_p_r & clk_n_r) : clk_p_r);always (pose

25、dge clock)begin if(full_div_p) begin count_p = count_p + 1b1; if(half_div_p) clk_p_r = 1b0; else clk_p_r = 1b1; end else begin count_p = 0; clk_p_r = 1b0; endendalways (negedge clock)begin if(full_div_n) begin count_n = count_n + 1b1; if(half_div_n) clk_n_r = 1b0; else clk_n_r = 1b1; end else begin

26、count_n = 0; clk_n_r = 1b0; endendendmodule4、新建原理图文件block.bdf,连接各个模块,并设置为顶层文件。5、设置引脚下载sof文件到试验箱。时钟引脚:pin_28Dig0Dig1Dig2Dig3Dig4Dig5Dig6Dig7160159162161215216213214Seg0Seg1Seg2Seg3Seg4Seg5Seg6Seg7169170167168165166163164四、实验结果:实验箱上的第一个数码管显示4,一秒后熄灭,此时第二个数码管显示0,然后依次类推直到第八个数码管依次显示数字 4、0、7、1、0、6、3、1。五、实验

27、总结:通过熟练掌握FPGA开发软件QuartusII的使用方法及Verilog HDL的编程方法。通过实验进一步熟练了数码管的显示原理,和显示过程。并学会了分频程序的使用。实验六 数码管显示计数 一、实验目的:1、熟练掌握FPGA开发软件QuartusII的使用方法及Verilog HDL的编程方法。2、学会了数字时钟的硬件设计2、学会对数码管个位和十位的控制及数值的显示。二、实验内容和原理:(一)实验内容:在SmartSOPC实验箱上完成一个类似数字时钟的可以计时学号后两位显示器,要求使用电脑软件及实验箱学习使用数码管中的个位和十位来显示计数学号从0开始显示直到显示到31,再返回0重新计数。

28、就像数字时钟一样。(二)实验原理:计数程序包括三个部分:脉冲发生电路,计数显示部分。由于系统时钟为50MHz,为了能够找到一个合适的数字跳变时间,我对时钟做50M分频,使得每次数字增加间隔在1 秒。计数显示部分包括LED段选的扫描和显示。复位和暂停包括两个按键控制。实现复位,暂停和开始。 三、实验步骤:1、动 Quartus建立一个空白工程,然后命名为xuehaoxs。2、点击FileNew.,在该项目下新建Verilog HDL 源程序文件scan_led.v,输入试验程序中的源程序代码保存后选择工具栏中启动编译,若在编译中发现错误,则找出并更正错误,直到编译成功为止。module xueh

29、aoxs(clk,key,dig,seg);input clk;input1:0key;output7:0 dig;output7:0 seg;reg7:0 seg_r;reg7:0 dig_r;reg3:0 disp_dat;reg24:0 count;reg7:0 num;reg sec,keyen;reg1:0dout1,dout2,dout3;wire1:0key_done;assign dig=dig_r;assign seg=seg_r;always (posedge clk) /时钟产生部分begin count=count+1b1; if(count=25d4000000) b

30、egin count=25d0; sec=sec; endendassign key_done=(dout1|dout2|dout3);always (posedge count17) /消抖动部分begin dout1=key; dout2=dout1; dout3=dout2;endalways (negedge key_done0)begin keyen=keyen;endalways (posedge clk) /数码管的位选,这里选通两个数码管。begin case(count17:15) 3d0:disp_dat=num3:0; 3d1:disp_dat=num7:4;endcas

31、ecase(count17:15) 3d0:dig_r=8b11111110; 3d1:dig_r=8b11111101;endcaseendalways (posedge clk) /数码管显示部分begin case(disp_dat) 4h0:seg_r=8hc0; 4h1:seg_r=8hf9; 4h2:seg_r=8ha4; 4h3:seg_r=8hb0; 4h4:seg_r=8h99; 4h5:seg_r=8h92; 4h6:seg_r=8h82; 4h7:seg_r=8hf8; 4h8:seg_r=8h80; 4h9:seg_r=8h90; default:seg_r=8hff;

32、endcaseif(count17:15=3d2)&sec) seg_r=8hff;endalways (negedge sec or negedge key_done1) /数码管复位,扫描部分begin if(!key_done1)begin num=8h1; endelse if(!keyen)begin num3:0=num3:0+1b1; if (num3:0=4ha) beginnum3:0=4h0;num7:4=num7:4+1b1;endif (num7:4=4h3&num3:0=4h1)num7:0=8h1;endendendmodule3、编译完成,找出错误,并改正,到无错

33、误。4、引脚设置:时钟引脚:pin_28;Dig0Dig1Dig2Dig3Dig4Dig5Dig6Dig7160159162161215216213214Seg0Seg1Seg2Seg3Seg4Seg5Seg6Seg71691701671681651661631645、通过JTAG接口下载sof文件到实验箱,观察结果。四、实验数据和结果:学习使用数码管中的个位和十位来显示计数学号从0开始显示直到显示到31,再返回0重新计数,依次类推来回循环。就像数字时钟一样。五、实验总结:通过本实验又进一步的熟练掌握了FPGA开发软件QuartusII的使用方法及Verilog HDL的编程方法。并复习了以前

34、学过的知识 学会可用一个数字时钟的模式,和对数码管个个位的控制。最后还熟悉了分频流程及消抖程序在不同程序中的使用方法。实验七 序列检测器一:实验目的:1、熟练掌握FPGA开发软件QuartusII的使用方法及Verilog HDL的编程方法。2、掌握有限状态机的工作原理。3、熟悉串行信号的输入和扫描。4、了解在多状态情况下的状态选择和控制。5、实现用有限状态机对输入串行信号01100的读取和判断。二、实验内容和原理:(一)实验内容:要求当检测器检测到01100 时cout=1。(二)实验原理:有限状态机:在数字电路系统中,有限状态机是一种十分重要的时序逻辑电路模块。有限状态机是指输出取决于过去

35、输入部分和当前输入部分的时序逻辑电路。一般来说,除了输入部分和输出部分外,有限状态机还含有一组具有“记忆”功能的寄存器,这些寄存器的功能是记忆有限状态机的内部状态,它们常被称为状态寄存器。在有限状态机中,状态寄存器的的下一个状态不仅与输入信号有关,而且还与该寄存器的当前状态有关,因此有限状态机又可以认为是组合逻辑和寄存器逻辑的一种组合。其中,寄存器逻辑的功能是存储有限状态机的内部状态;而组合逻辑有可以分为次态逻辑和输出逻辑两部分,次态逻辑的功能是确定有限状态机的下一个状态,输出逻辑的功能是确定有限状态机的输出。实验原理图: 三、实验步骤:1、启动 Quartus建立一个空白工程,然后命名为jianceqi。2、点击FileNew.,在该项目下新建Verilog HDL 源程序文件jianceqi.v,输入试验程序中的源程序代码保存后选择工具栏中启动编译,若在编译中发现错误,则找出并更正错误,直到编译成功为止。module jianceqi (dat,cout,clk,reset,state);input dat,clk,reset;output cout;output2:0 state;reg2:0 state;reg cout;parameter s0=d0,s1=d1,s2=d2,s3=d3,s4=d4,s5=d5;always (posedge clk)beg

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号