电子科技大学成都学院实验报告模板_第1页
电子科技大学成都学院实验报告模板_第2页
电子科技大学成都学院实验报告模板_第3页
电子科技大学成都学院实验报告模板_第4页
电子科技大学成都学院实验报告模板_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

电子科技大学成都学院实验报告册课程名称:EDA实验与实践姓名:学号:院系:微电子技术系专业:电子科学与技术教师:2013年12月10日实验一:奇数分频一、实验目的:掌握用VerilogHDL语言实现奇数分频。二、实验原理和内容:内容:编写奇数分频模块,实现对输入时钟信号的17分频,同时占空比为50%的方波信号。原理:采用了两个计数器,一个由输入时钟上升沿触发,另一个由输入时钟下降沿触发,两个分频器的输出信号正好有半个时钟周期的相位差,最后将两个计数器的输出相或,即得占空比为50%的方波信号。三、实验步骤:1、启动QuartusII建立一个空白工程,然后命令为couter17.qpf2、新建VerilogHDL源程序文件counter17,v,输入程序代码并保存(完整的VerilogHDL程序参考程序清单),然后进行综合编译。若在编译过程中发现错误,则找出并更改错误,直至编译成功为止。3、新建文件对话框VectorWareformfile,单击ok关闭建立一个空的波形编辑器窗口,并改名为counter17.vwf保存。在所示Name选项卡内双击鼠标左键,弹出一对话框,选择NodeFinder按钮,再次弹出了一对话框,选择list添加所有引脚,再单击ok,然后编辑输入节点波形,最后再Quartus主界面下选择Tools--》SimulatorTool命令,弹出一对话窗,第一步:在Simulationinput选择仿真文件counter17.vwf第二步:在Simulationmode选择Functional第三步:点击GenerateFunctionalSimulationNetlist生成仿真网表第四步:点击左下角的Start开始仿真,结束后再点击Open打开仿真后的波形文件。4、检查是否正确,若错误,则修改程序,直到达到要求。四、实验数据和结果:modulecouter17(clk,clk_out);inputclk;outputclk_out;reg[4:0]m,n;wireclk_out;regclk_out1,clk_out2;assignclk_out=(clk_out1|clk_out2);always@(posedgeclk)beginm<=m+1;if(m==16)m<=0;elseif(m==15)beginclk_out1=~clk_out1;endelseif(m==7)beginclk_out1=~clk_out1;endendalways@(negedgeclk)beginn<=n+1;if(n==16)n<=0;elseif(n==15)beginclk_out2=~clk_out2;endelseif(n==7)beginclk_out2=~clk_out2;endendendmodule仿真波形结果为:五、实验总结:进过波形仿真的验证可知,程序实现了对输入信号的17分频,且其占空比为50%。该程序只要稍加改动可以实现任意奇数分频。实验二:静态数码管显示一、实验目的:学习7段数码管显示译码器的设计,进一步了解、熟悉和掌握FPGA开发软件QuartusII的使用方法及VerilogHDL的编程方法,学习LPM兆功能模块的调用。实验原理和内容:原理:实验箱上有8个位码DIG0~DIG7和8个段码SEG0~SEG7分别与FPGA相应的引脚相连。只要DIG0~DIG7上一直输出低电平“0”,则8个数码管将显示相同的数码(因为8个LED数码管的段码线分别接到了同一引脚上),这样8位动态LED数码管就变成了静态LED。内容:建立7段译码显示模块,用于控制LED数码管的静态显示。要求在SmartSOPC实验箱上的数码管依次显示0~9和A~F16个字符。实验步骤:启动QuartusII建立一个空白工程,然后命令为sled.qpf新建VerilogHDL源程序文件decl7s.v,输入程序代码并保存(完整的VerilogHDL程序参考程序清单3.4),然后进行综合编译。若在编译过程中发现错误,则找出并更改错误,直至编译成功为止。选择目标器件并对相应的引脚进行锁定,将未使用的引脚设置为三态。信号引脚seg[0]169seg[1]170seg[2]167seg[3]168seg[4]165seg[5]166seg[6]163seg[7]164clock284、将sled.bdf设置为顶层实体。对该工程文件进行全程编译处理,若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。5、连接硬件,下载程序。实验数据和结果:modulesled(clk,seg,dig);inputclk;output[7:0]seg,dig;reg[7:0]segr;reg[7:0]dig=8'h00;regclk_out;reg[3:0]d;reg[31:0]count;regstate;assignseg=segr;parameters0=1'b0,s1=1'b1;always@(posedgeclk)//1sbegincount<=count+1;if(count==23999999)begincount<=0;clk_out<=~clk_out;endendalways@(posedgeclk_out)begincasex(state) s0:begind<=d+1; if(d==4'hf) begind<=4'he;state<=s1;end end s1:begind<=d-1; if(d==4'h0) begind<=4'h1;state<=s0;end end endcaseendalways@(d)begincase(d)4'd0:segr=8'hc0;//显示4'd1:segr=8'hf9;//显示1 4'd2:segr=8'ha4;//显示2 4'd3:segr=8'hb0;//显示3 4'd4:segr=8'h99;//显示4 4'd5:segr=8'h92;//显示5 4'd6:segr=8'h82;//显示6 4'd7:segr=8'hf8;//显示7 4'd8:segr=8'h80;//显示8 4'd9:segr=8'h90;//显示9 4'd10:segr=8'h88;//显示A 4'd11:segr=8'h83;//显示B 4'd12:segr=8'hc6;//显示C 4'd13:segr=8'ha1;//显示D 4'd14:segr=8'h86;//显示E 4'd15:segr=8'h8e;//显示F default:segr=8'hxx;endcaseendendmodule显示:从0~F再到F~0循环显示;五、实验总结:由于LED静态显示需要占用较多的I/O口,且功耗较大,因此在大多数场合通常不采用静态显示,而采用动态扫描的方法来控制LED数码管的显示实验三:显示学号实验目的:学习动态扫描显示的原理及电路的设计。二、实验原理和内容:内容:是建立数码管动态扫描显示模块,具体的内容:A、在SmartSOPC实验箱上完成LED数码管的动态显示“40720323”这八个数字。B、放慢扫描速度演示动态显示的原理过程。原理:在SmartSOPC实验箱上有八个数码管,其中每个数码管的8个段:a、b、c、d、e、f、g、h(h是小数点)都分别连到seg0~seg7,8个数码管分别由8个选通信号dig0~dig7来选择。被选通的数码管显示数据,其余的关闭。根据这种电路状态,8个数码管全都显示想要的数据,就必须使得8个选通信号dig0~dig7分别单独选通,同时,在段信号输入口加上希望在该对应数码管上显示的数据,于是随着选通信号的扫描就能实现扫描显示的目的。虽然每次只有一个LED显示,但是只要扫描显示速度够快,由于人的视觉余辉效应,使我们仍会感觉所有的数码管都在同时显示。实验步骤:1、启动QuartusII建立一个空白工程,然后命令为snum.qpf2、新建VerilogHDL源程序文件snum.v,输入程序代码并保存(完整的VerilogHDL程序参考程序清单),然后进行综合编译。若在编译过程中发现错误,则找出并更改错误,直至编译成功为止。3、新建图形设计文件名为snum.bdf并保存。4、选择目标器件并对相应的引脚进行锁定,将未使用的引脚设置为三态。信号引脚信号引脚seg[0]169dig[1]159seg[1]170dig[2]162seg[2]167dig[3]161seg[3]168dig[4]215seg[4]165dig[5]216seg[5]166dig[6]213seg[6]163dig[7]214seg[7]164clock28dig[0]1605、对该工程文件进行全程编译处理,若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。5、连接硬件,下载程序。四、实验数据和结果:modulenum(clock,seg,dig);inputclock;output[7:0]seg,dig;reg[7:0]seg,dig;reg[32:0]coutsz;//分频计数reg[2:0]cout;//数码管计数regclk_out;//分频后时钟1msreg[31:0]disp=32'h40720323;reg[31:0]disp_dat;always@(posedgeclock)//1msbegincoutsz<=coutsz+1;if(coutsz==23999) begin clk_out<=~clk_out; coutsz<=0; endendalways@(posedgeclk_out)begin cout<=cout+1'b1;endalways@(posedgeclk_out)begincase(cout)//选择扫描显示数据3'h0:disp_dat=disp[31:28];3'h1:disp_dat=disp[27:24];3'h2:disp_dat=disp[23:20];3'h3:disp_dat=disp[19:16];3'h4:disp_dat=disp[15:12];3'h5:disp_dat=disp[11:8];3'h6:disp_dat=disp[7:4];3'h7:disp_dat=disp[3:0];endcasecase(cout) 3'h0:dig=8'b01111111;//选择第1个数码管 3'h1:dig=8'b10111111;//选择第2个数码管 3'h2:dig=8'b11011111;//选择第3个数码管 3'h3:dig=8'b11101111;//选择第4个数码管 3'h4:dig=8'b11110111;//选择第5个数码管 3'h5:dig=8'b11111011;//选择第6个数码管 3'h6:dig=8'b11111101;//选择第7个数码管 3'h7:dig=8'b11111110;//选择第8个数码管 endcaseendalways@(disp_dat)begincase(disp_dat) 4'd0:seg=8'hc0;//显示0 4'd1:seg=8'hf9;//显示1 4'd2:seg=8'ha4;//显示2 4'd3:seg=8'hb0;//显示3 4'd4:seg=8'h99;//显示4 4'd5:seg=8'h92;//显示5 4'd6:seg=8'h82;//显示6 4'd7:seg=8'hf8;//显示7 4'd8:seg=8'h80;//显示8 4'd9:seg=8'h90;//显示9 4'd10:seg=8'h88;//显示A 4'd11:seg=8'h83;//显示B4'd12:seg=8'hc6;//显示C 4'd13:seg=8'ha1;//显示D 4'd14:seg=8'h86;//显示E 4'd15:seg=8'h8e;//显示Fendcaseendendmodule显示:(用肉眼看)同时显示为:40720323五、实验总结:动态扫描显示时刷新率最好大于50Hz,即每显示一轮的时间不超过20ms。每个数码管显示的时间不能太长也不能太短,时间太长会影响刷新率,导致总体显示呈现闪烁的现象;时间太短发光二极管的电流导通时间也会就短,会影响总体的显示亮度。一般控制在1ms左右最佳实验四:按键消抖一、实验目的:学习按键去抖动电路的硬件设计。二、实验原理和内容:内容:通过SmartSOPC实验箱上的按键KEY1(经过消抖)或KEY2(没有消抖)控制数码管显示数字。对比有加消抖模块和没加消抖模块电路的区别。原理:作为机械开关的键盘,在按键操作时,机械触点的弹性及电压突跳等原因,在触点闭合或开启的瞬间会出现电压抖动。按键去抖动关键在于提取稳定的低电平状态,滤除前沿、后沿抖动毛刺。对于一个按键信号,可以用一个脉冲对它经行采样。如果连续三次采样为低电平,可以认为信号已经处于键稳定状态,这时输出一个低电平按键信号。继续采样的过程中如果不能满足连续三次采样为低,则认为键稳定状态结束,这时输出变为高电平。三、实验步骤:1、启动QuartusII建立一个空白工程,然后命令为key.qpf2、新建VerilogHDL源程序文件key.v,输入程序代码并保存(完整的VerilogHDL程序参考程序清单),然后进行综合编译。若在编译过程中发现错误,则找出并更改错误,直至编译成功为止。3、新建图形设计文件名为key.bdf并保存。4、选择目标器件并对相应的引脚进行锁定,将未使用的引脚设置为三态。信号引脚信号引脚seg[0]169dig[2]162seg[1]170dig[3]161seg[2]167dig[4]215seg[3]168dig[5]216seg[4]165dig[6]213seg[5]166dig[7]214seg[6]163key_in121seg[7]164key2122dig[0]160clock28dig[1]1595、对该工程文件进行全程编译处理,若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。5、连接硬件,下载程序。四、实验数据和结果:modulekey(clk,key1,key2,seg,dig);inputclk;inputkey1;inputkey2;output[7:0]seg;output[7:0]dig;reg[7:0]dig;reg[7:0]seg;wireclock;regkey_out;reg[31:0]count;regclk_out;reg[3:0]d;regdout1,dout2,dout3;andm1(clock,key2,key_out);always@(posedgeclk)//1msbegincount<=count+1;if(count==239999)begincount<=0;clk_out<=~clk_out;endendalways@(posedgeclk_out)//bouncebegindout1<=key1;dout2<=dout1;dout3<=dout2;beginkey_out<=(dout1|dout2|dout3);endendalways@(posedgeclock)beginbegind<=0;d<=d+1;dig=8'b01111111;endbegincase(d)4'h0:seg=8'hc0; 4'h1:seg=8'hf9; 4'h2:seg=8'ha4; 4'h3:seg=8'hb0; 4'h4:seg=8'h99; 4'h5:seg=8'h92; 4'h6:seg=8'h82; 4'h7:seg=8'hf8; 4'h8:seg=8'h80; 4'h9:seg=8'h90; 4'ha:seg=8'h88; 4'hb:seg=8'h83; 4'hc:seg=8'hc6; 4'hd:seg=8'ha1; 4'he:seg=8'h86; 4'hf:seg=8'h8e;endcaseendendendmodule显示:当按下key1后数码管显示数字自动加1,而当按下key2后数码管显示数字不是依次加1,而是一个随机数。实验总结:当按下KEY1时,能稳定显示0~F,而按下KEY2时,数码管显示数字很不稳定消抖电路的采样时钟要实际应用可以灵活改变,因为按键触发的时间一般为几百毫秒,干扰毛刺脉宽一般为几百毫秒到几毫秒,所以采样时钟的周期一般为几毫秒实验五:序列检测器一、实验目的:掌握利用有限状态机实现一般时序逻辑分析的方法,了解一般状态机的设计与应用。二、实验原理和内容:内容:设计一序列检测器,进行波形仿真验证。原理:当序列检测器连续收到一组串行二进制码后,如果这组序列码与检测器中预先设置的序列码相同,则输出1,否则输出0.这种检测的关键是必须收到连续的正确码,所以要求检测器必须对前一次接收到的序列码做记忆分析,直到在连续检测中所收到的每一位二进码都与预置序列码对应相同。在检测过程中,只要有一位不相等都在回到初始状态重新开始检测。实验步骤:1、启动QuartusII建立一个空白工程,然后命令为schk.qpf2、新建VerilogHDL源程序文件schk,v,输入程序代码并保存(完整的VerilogHDL程序参考程序清单),然后进行综合编译。若在编译过程中发现错误,则找出并更改错误,直至编译成功为止。3、新建文件对话框VectorWareformfile,单击ok关闭建立一个空的波形编辑器窗口,并改名为schk.vwf保存。在所示Name选项卡内双击鼠标左键,弹出一对话框,选择NodeFinder按钮,再次弹出了一对话框,选择list添加所有引脚,再单击ok,然后编辑输入节点波形,最后再Quartus主界面下选择Tools--》SimulatorTool命令,弹出一对话窗,第一步:在Simulationinput选择仿真文件schk.vwf第二步:在Simulationmode选择Functional第三步:点击GenerateFunctionalSimulationNetlist生成仿真网表第四步:点击左下角的Start开始仿真,结束后再点击Open打开仿真后的波形文件。4、检查是否正确,若错误,则修改程序,直到达到要求。四、实验数据和结果:moduleschk(rst,clk,state,In,Out);inputrst,clk,In;outputOut;output[2:0]state;reg[2:0]state;regOut;parameters0=3'd0,s1=3'd1,s2=3'd2,s3=3'd3,s4=3'd4,s5=3'd5;always@(posedgeclk)beginif(!rst)Beginstate<=s0;Out<=0;endelsecasex(state)s0:beginif(In==0)beginstate<=s1;Out<=0;endelsebeginstate<=s0;Out<=0;endends1:beginif(In==0)beginstate<=s0;Out<=0;endelsebeginstate<=s2;Out<=0;endends2:beginif(In==0)beginstate<=s1;Out<=0;endelsebeginstate<=s3;Out<=0;endends3:beginif(In==0)beginstate<=s4;Out<=0;endelsebeginstate<=s0;Out<=0;endends4:beginif(In==0)beginstate<=s1;Out<=0;endelsebeginstate<=s5;Out<=1;endends5:beginif(In==0)beginstate<=s0;Out<=0;endelsebeginstate<=s3;Out<=0;endenddefaultstate<=s0;endcaseendendmodule波形仿真结果为:五、实验总结:该代码经过仿真验证,能够检测序列01101。状态机是VerilogHDL里重要的思想,应该学会灵活运用。要实现其他序列只需画其状态转换图,将状态机的部分修改即可。实验六:花样流水灯实验目的:熟悉和掌握CPLD/FPGA开发软件的使用方法及VerilogHDL的编程方法,学习简单的时序电路的设计和硬件测试。实验原理和内容:内容:建立可用于控制LED流水灯的简单硬件电路,要求在SmartSOPC实验箱上实验花样流水灯。原理:建立分频模块和花样显示模块,分频模块实现LED灯显示的频率,花样显示模块实现LED灯如何显示。实验步骤:启动QuartusII建立一个空白工程,命名为hyledwater.qpf。新建VerilogHDL源程序文件hyledwater.v,输入程序代码并保存,然后进行综合编译。若在编译过程中发生错误,则找出并更正,直至编译成功为止。由hyledwater.v生成名为hyledwater.bsf的模块符号文件,将光盘中的int_div.bsf和int_div.v拷贝到工程目录下。新建图形文件命名为hyledwater.bdf并保存,在空白处双击鼠标左键后分别将project下的hyledwater和int_div模块放入图形文件hyledwater.bdf中,加输入,输出引脚并命名。按下图所示进行连接选择目标器件并对相应的引脚进行锁定,在这里所选择的器件为Altera公司Cyclone系列的EP1C12Q240C8芯片,引脚设置如下表,未使用的引脚设为三态输入。信号引脚Led[0]50Led[1]53Led[2]54Led[3]55Led[4]176Led[5]47Led[6]48Led[7]

温馨提示

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

评论

0/150

提交评论