EDA技术及应用实验报告参考答案.doc_第1页
EDA技术及应用实验报告参考答案.doc_第2页
EDA技术及应用实验报告参考答案.doc_第3页
EDA技术及应用实验报告参考答案.doc_第4页
EDA技术及应用实验报告参考答案.doc_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

EDA技术及应用实验报告系 部:电子通信工程系指导教师: 学 号: 班 级: 姓 名: 实验一 点亮LED设计一、实验目的通过此试验可以让大家逐步了解,熟悉和掌握FPGA开发软件Quartus II的使用方法及VerilogHDL的编程方法。二、实验内容本实验是一个简单的点亮LED灯的实验,具体包括:1) 使用Quartus II建立一个工程;2) Quartus II工程设计;3) 设置编译选项并编译硬件系统;4) 下载硬件设计到目标FPGA;5) 观察LED的状态;三、实验原理和单片机一样,向片子里写进数据,输出高电平(对于共阴极的),或者输出低电平(对于共阳极)。根据Cyclone片子已经分配好的针脚设置好针脚。四、实验步骤建立一个工程输入程序软件编译生成下载文件下载调试五、实验程序module led1(led);/模块名led1output7:0led;/定义输出端口reg7:0led;/定义寄存器always/过程1beginled = 8b10101010;/输出0xAAendendmodule六、思考题(1)写出使用QuartusII软件开发工程的完整的流程。建立一个工程输入程序软件编译综合生成下载文件下载硬件调试实验二流水灯实验一、实验目的通过此试验让大家进一步了解熟悉和掌握FPGA开发软件的使用方法及软件编程方法。学习简单的时序电路的设计和硬件测试。二、实验内容 本实验的内容是建立用于控制LED流水灯的简单硬件电路,要求在SmartSOPC上实现LED1-LED8发光二极管流水灯的显示。三、实验原理这里的显示用分频模块(int_div)得到的较低的始终作为信号,在此时钟下,对输入数据进行移位,就得到了流水灯的效果。四、实验步骤建立工程输入源程序调用模块生成符号调用符号连成电路图编译下载调试五、实验程序 原理图:六、思考题1.本实验顶层采用了图形输入的方式,若采用文本输入方式,如何编写顶层文件?写出相应程序。module led2(clock,led);input clock;output 7:0led;wire p;int_div u1( .clock(clock),.clk_out(p);ledwater u2(.clk(p),.led(led);endmodule实验三 键盘、LED发光实验一、实验目的本实验的主要目的是联系顶层模块的设计。学习和体会分支条件语句case的使用及FPGA的I/O控制。二、实验内容用跳线把key1-key8和指定的引脚连起来,以实现功能控制。三、实验原理FPGA的所有的I/O控制块允许每个引脚单独的配置为输入口。只要配置正确,则一暗淡几个键中有键输入,在检测到键盘输入的情况下,继续判断其键盘值并作出相应的处理。四、实验步骤1:按以前的步骤建立工程,并按说明书进行配置引脚,未用的按三态处理。2:对文件进行编译,并检错。3:按说明短接跳帽和连接跳线。4:观察输入情况。五、实验程序module keyled(key,led);/模块名keyledinput7:0 key;/定义键盘输入口output7:0led;/定义发光管输出口reg7:0led_r;/定义寄存器reg7:0buffer_r;assign led = led_r;/输出键值always(key)/过程1beginbuffer_r = key;/读取键值case(buffer_r)8b11111110:led_r = 8b11111110;/是键KEY1,则给寄存器赋值0xfe8b11111101:led_r = 8b11111100;/是键KEY2,则给寄存器赋值0xfc8b11111011:led_r = 8b11111000;/是键KEY3,则给寄存器赋值0xf88b11110111:led_r = 8b11110000;/是键KEY4,则给寄存器赋值0xf08b11101111:led_r = 8b11100000;/是键KEY5,则给寄存器赋值0xe08b11011111:led_r = 8b11000000;/是键KEY6,则给寄存器赋值0xc08b10111111:led_r = 8b10000000;/是键KEY7,则给寄存器赋值0x808b01111111:led_r = 8b00000000;/是键KEY8,则给寄存器赋值0x00default:led_r = 8b11111111;/否则给寄存器赋值0xffendcaseendendmodule六、思考题1.能否用if语句改写本实验程序?如果能,写出相应程序。module keyled(key,led);/模块名keyledinput7:0 key;/定义键盘输入口output7:0led;/定义发光管输出口reg7:0led_r;/定义寄存器reg7:0buffer_r;assign led = led_r;/输出键值always(key)/过程1beginbuffer_r = key;/读取键值if (buffer_r=8b11111110) led_r = 8b11111110; else if (buffer_r=8b11111101) led_r = 8b11111100; else if(buffer_r=8b11111011) led_r = 8b11111000; else if(buffer_r=8b11110111) led_r =8b11110000; else if (buffer_r=8b11101111) led_r = 8b11100000; else if(buffer_r=8b10111111) led_r = 8b10000000; else (buffer_r=8b01111111) led_r = 8b00000000;endendmodule实验四 静态数码管显示实验一、实验目的学习LPM兆模块的调用。二、实验内容 建立7段译码显示模块,用于控制LED数码管的静态显示。要求在实验箱上的数码管依显示09和个字符。三、实验原理本实验通过分频模块int_div 分频得到1HZ的频率信号,加载4位计数器的时钟输入端,计数循环输出0-9,A-F 16个数,最后通过七段译码后在数码显示出来。四、实验步骤1:立源程序文件dec17s.v,输入程序代码并保存,并对此生成符号。2:添加LPM模块并按需要生成相应的文件。五、实验程序六、思考题1.本实验采用的是共阳极数码管,若采用共阴极数码管,有什么不同? 对应显示相同的数时,输入的不同。2.如何显示HHHHHHHH和PPPPPPPP?H 对应的89h, P 对应的是73h;实验五 动态数码管显示实验一、 实验目的学习动态扫描显示的原理图及电路的设计。二、实验内容1:在SmartSOPC试验箱上完成LED数码管的动态显示“1-8”个数字。2:放慢扫描速度演示动态显示的原理过程。三、实验原理虽然每次只有一个LED显示,但只要扫描显示速率够快,由于人的视觉余辉效应,使我们仍会感觉所有的数码管都在同时显示。四、实验步骤1:建立一个空白工程,并命名。2:对该工程文件进行全程编译处理,若在编译过程中发现错误,则找出并更改,直至编译成功为止。3:从设计文件创建模块。4:将光盘中EDA目录文件拷贝到工程目录。5:添加常量兆功能模块。五、实验程序module scan_led(clk_1k,d,dig,seg);/模块名scan_ledinput clk_1k;/输入时钟input31:0 d;/输入要显示的数据output7:0dig;/数码管选择输出引脚output7:0 seg;/数码管段输出引脚reg7:0 seg_r;/定义数码管输出寄存器reg7:0 dig_r;/定义数码管选择输出寄存器reg3:0 disp_dat;/定义显示数据寄存器reg2:0count;/定义计数寄存器assign dig = dig_r;/输出数码管选择assign seg = seg_r;/输出数码管译码结果always (posedge clk_1k) /定义上升沿触发进程begincount = count + 1b1;endalways (posedge clk_1k) begincase(count)/选择扫描显示数据3d0:disp_dat = d31:28;/第一个数码管3d1:disp_dat = d27:24;/第二个数码管3d2:disp_dat = d23:20;/第三个数码管3d3:disp_dat = d19:16;/第四个数码管3d4:disp_dat = d15:12;/第五个数码管3d5:disp_dat = d11:8;/第六个数码管3d6:disp_dat = d7:4;/第七个数码管3d7:disp_dat = d3:0;/第八个数码管endcasecase(count)/选择数码管显示位3d0:dig_r = 8b01111111;/选择第一个数码管显示3d1:dig_r = 8b10111111;/选择第二个数码管显示3d2:dig_r = 8b11011111;/选择第三个数码管显示3d3:dig_r = 8b11101111;/选择第四个数码管显示3d4:dig_r = 8b11110111;/选择第五个数码管显示3d5:dig_r = 8b11111011;/选择第六个数码管显示3d6:dig_r = 8b11111101;/选择第七个数码管显示3d7:dig_r = 8b11111110;/选择第八个数码管显示endcaseendalways (disp_dat)begincase(disp_dat)/七段译码4h0:seg_r = 8hc0;/显示04h1:seg_r = 8hf9;/显示14h2:seg_r = 8ha4;/显示24h3:seg_r = 8hb0;/显示34h4:seg_r = 8h99;/显示44h5:seg_r = 8h92;/显示54h6:seg_r = 8h82;/显示64h7:seg_r = 8hf8;/显示74h8:seg_r = 8h80;/显示84h9:seg_r = 8h90;/显示94ha:seg_r = 8h88;/显示a4hb:seg_r = 8h83;/显示b4hc:seg_r = 8hc6;/显示c4hd:seg_r = 8ha1;/显示d4he:seg_r = 8h86;/显示e4hf:seg_r = 8h8e;/显示fendcaseendendmodule六、思考题1.说出数码管动态显示的原理。每一位都是将8个发光二极管(下面简称LED)的负极接在一块,就有8个负极,接上8个IO口,这个就是位选,相应IO口输出低电平算是选通该位。相同字段LED的正极连在一起,也有八根线,接上8个IO口,这就是段选,相应IO口输出高电平算是选通该段。实验六 按键去抖动实验一、实验目的学习按键去抖动电路的硬件设计。二、实验内容本实验的内容是建立按键消抖模块,对比有加消抖模块和没加消抖模块电路的区别。三、实验原理作为机械开关的键盘,在按键操作时,机械触点的弹性及电压突跳等原因,在触点或开启的瞬间会出现电压抖动。四、实验步骤1:启动QuartusII建立一个空白工程并命名。2:将电路用Verilog VHDL语言描述出来,并扩展多个通道。3:从设计文件创建模块,由debounce.v生成命名为debounce.vbsf。4:其他步参考顶层模块原理图。五、实验程序module debounce(clk,key_in,key_out);/按键消抖模块input clk;/系统时钟输入inputKEY_WIDTH-1:0 key_in;/外部按键输入outputKEY_WIDTH-1:0key_out;/按键消抖输出regKEY_WIDTH-1:0dout1,dout2,dout3;/寄存器parameter KEY_WIDTH = 8;/参数assign key_out = (dout1 | dout2 | dout3);/按键消抖输出always (posedge clk)begindout1 = key_in;dout2 = dout1;dout3 = dout2;endendmodule六、思考题1.比较下面两段程序的异同,并画出电路结构图.- 21 -always ( posedge clk) begin dout1=key_in; /非阻塞赋值 dout2=dout1; dout3=dout2;end/其RTL描述为:always ( posedge clk)begin dout1=key_in; /阻塞赋值 dout2=dout1; dout3=dout2;end /其RTL描述为: 实验七 硬件电子琴实验一、实验目的学习利用蜂鸣器和按键设计硬件电子琴。二、实验内容在SmartSOPC实验箱上的实现一个简单的电子琴。三、实验原理由于组成乐曲的每个音符的频率值及其持续时间是乐曲演奏的2个基本数据,因此需要控制输出到扬声器的激励信号的频率高低和该频率信号持续的时间。四、实验步骤1:在QuartusII中建立一个工程项目文件,输入程序代码并保存。2:选择目标器件并对相应的引脚进行锁定。3:对该工程文件进行全程编译处理,若在编译过程中发现错误,则找出并更改,直至编译成功为止。4:打开电源,执行下载命令。五、实验程序module beep1(clk,key,beep,led);/模块名称beepinput clk;/系统时钟48MHzinput7:0key;/按键输入output beep;/蜂鸣器输出端output7:0led;/LED输出reg beep_r;/寄存器reg15:0count,count_end;reg7:0key_r;always(posedge clk)begincount = count + 1b1;/计数器加1if(count = count_end)&(!(count_end = 16hffff)begincount = 16h0;/计数器清零beep_r = !beep_r;/取反输出信号endendalways (key)beginkey_r = key;/取键值case(key_r)8b11111110:count_end = 16hb327;/中音1的分频系数值8b11111101:count_end = 16h9fa0;/中音2的分频系数值8b11111011:count_end = 16h8e32;/中音3的分频系数值8b11110111:count_end = 16h8637;/中音4的分频系数值8b11101111:count_end = 16h7794;/中音5的分频系数值8b11011111:count_end = 16h6a88;/中音6的分频系数值8b10111111:count_end = 16h5ee8;/中音7的分频系数值8b01111110:count_end = 16h59ab;/高音1的分频系数值8b01111101:count_end = 16h4fce;/高音2的分频系数值8b01111011:count_end = 16h471a;/高音3的分频系数值8b01110111:count_end = 16h431c;/高音4的分频系数值8b01101111:count_end = 16h3bca;/高音5的分频系数值8b01011111:count_end = 16h3544;/高音6的分频系数值8b00111111:count_end = 16h2f74;/高音7的分频系数值default:count_end = 16hffff;endcaseendassign beep =beep_r;/输出音乐assign led =key_r;/输出按键状态endmodule六、思考题1. 举例说明产生不同音符的原理。由于组成乐曲的每个音符的频率值及其持续时间是乐曲演奏的2个基本数据,因此需要控制输出到扬声器的激励信号的频率高低和该频率信号持续的时间。频率的高低决定了音调的高低,而乐曲的简谱与各音名的频率关系是对应的,只要求出对应的分频分数,这样利用程序可以很轻松的得到相应的乐声。实验八 数字时钟设计一、实验目的学习数字时钟的硬件设计。二、实验内容在SmartSOPC试验箱上完成一个可以计时的数字时钟,其显示时间范围是00:00:00-23:59:59三、实验原理一个完整的时钟应由3部分组成,秒脉冲发生电路,计数显示部分和时钟调整部分。本实验的校时电路在此仅仅完成了暂停,清零的基本功能。四、实验步骤1:在QuartusII中建立一个工程项目文件。2:选择目标器件并对相应的引脚进行锁定。3:对该工程文件进行全程编译处理。4:硬件连接,下载程序。五、实验程序module clock(clk,key,dig,seg);/模块名clockinput clk;/输入时钟input1:0 key;/输入按键output7:0dig;/数码管选择输出引脚output7:0 seg;/数码管段输出引脚reg7:0 seg_r;/定义数码管输出寄存器reg7:0 dig_r;/定义数码管选择输出寄存器reg3:0 disp_dat;/定义显示数据寄存器reg24:0count;/定义计数寄存器reg23:0hour;/定义现在时刻寄存器reg sec,keyen;/定义标志位reg1:0dout1,dout2,dout3;/寄存器wire1:0key_done;/按键消抖输出assign dig = dig_r;/输出数码管选择assign seg = seg_r;/输出数码管译码结果/秒信号产生部分always (posedge clk) /定义clock上升沿触发begincount = count + 1b1;if(count = 25d24000000)/0.5S到了吗?begincount = 25d0;/计数器清零sec = sec;/置位秒标志endend/按键消抖处理部分assign key_done = (dout1 | dout2 | dout3);/按键消抖输出always (posedge count17)begindout1 = key;dout2 = dout1;dout3 = dout2;endalways (negedge key_done0)beginkeyen = keyen;/将琴键开关转换为乒乓开关end/数码管动态扫描显示部分always (posedge clk) /count17:15大约1ms改变一次begincase(count17:15)/选择扫描显示数据3d0:disp_dat = hour3:0;/秒个位3d1:disp_dat = hour7:4;/秒十位3d2:disp_dat = 4ha;/显示-3d3:disp_dat = hour11:8;/分个位3d4:disp_dat = hour15:12;/分十位3d5:disp_dat = 4ha;/显示-3d6:disp_dat = hour19:16;/时个位3d7:disp_dat = hour23:20;/时十位endcasecase(count17:15)/选择数码管显示位3d0:dig_r = 8b11111110;/选择第一个数码管显示3d1:dig_r = 8b11111101;/选择第二个数码管显示3d2:dig_r = 8b11111011;/选择第三个数码管显示3d3:dig_r = 8b11110111;/选择第四个数码管显示3d4:dig_r = 8b11101111;/选择第五个数码管显示3d5:dig_r = 8b11011111;/选择第六个数码管显示3d6:dig_r = 8b10111111;/选择第七个数码管显示3d7:dig_r = 8b01111111;endcaseendalways (posedge clk)begincase(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;4h8:seg_r = 8h80;4h9:seg_r = 8h90;/4ha:seg_r = 8hbf;default:seg_r = 8hff;endcaseif(count17:15= 3d2)&sec)seg_r = 8hff;endalways (negedge sec or negedge key_done1)/beginif(!key_done1)beginhour = 24h0;endelse if(!keyen)beginhour3:0 = hour3:0 + 1b1;if(hour3:0 = 4ha)beginhour3:0 = 4h0;hour7:4 = hour7:4 + 1b1;if(hour7:4 = 4h6)beginhour7:4 = 4h0;hour11:8 = hour11:8 + 1b1;if(hour11:8 = 4ha)beginhour11:8 = 4h0;hour15:12 = hour15:12 + 1b1;if(hour15:12 = 4h6)beginhour15:12 = 4h0;hour19:16 = hour19:16 + 1b1;if(hour19:16 = 4ha)beginhour19:16 = 4h0;hour23:20 = hour23:20 + 1b1;endif(hour23:16 = 8h24)hour23:16 = 8h0;endendendendendendendmodule六、思考题1. 自己动手添加校时程序,写出相应程序。module clock(clk,key,dig,seg);/模块名clockinput clk;/输入时钟input1:0 key;/输入按键output7:0dig;/数码管选择输出引脚output7:0 seg;/数码管段输出引脚reg7:0 seg_r;/定义数码管输出寄存器reg7:0 dig_r;/定义数码管选择输出寄存器reg3:0 disp_dat;/定义显示数据寄存器reg24:0count;/定义计数寄存器reg23:0hour;/定义现在时刻寄存器reg sec,keyen;/定义标志位reg1:0dout1,dout2,dout3;/寄存器wire1:0key_done;/按键消抖输出assign dig = dig_r;/输出数码管选择assign seg = seg_r;/输出数码管译码结果/秒信号产生部分always (posedge clk) /定义clock上升沿触发begincount = count + 1b1;if(count = 25d24000000)/0.5S到了吗?begincount = 25d0;/计数器清零sec = sec;/置位秒标志endend/按键消抖处理部分assign key_done = (dout1 | dout2 | dout3);/按键消抖输出always (posedge count17)begindout1 = key;dout2 = dout1;dout3 = dout2;endalways (negedge key_done0)beginkeyen = keyen;/将琴键开关转换为乒乓开关end/数码管动态扫描显示部分always (posedge clk) /count17:15大约1ms改变一次begincase(count17:15)/选择扫描显示数据3d0:disp_dat = hour3:0;/秒个位3d1:disp_dat = hour7:4;/秒十位3d2:disp_dat = 4ha;/显示-3d3:disp_dat = hour11:8;/分个位3d4:

温馨提示

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

评论

0/150

提交评论