EDA上机实验报告班级:021211姓名:张育东学号:02121056实验一:QUARTUSII软件使用及组合电路设计仿真实验目的:学习QUARTUSII软件的使用,掌握软件工程的建立、VHDL源文件的设计和波形仿真等基本内容;实验内容:1.四选一多路选择器的设计1.1实验内容首先利用QuartusⅡ完成4选1多路选择器的文本编辑输入和仿真测试等步骤,给出仿真波形。步骤:(1)建立工作库文件夹和编辑设计文件;(2)创建工程;(3)编译前设置;(4)全程编译;(5)时序仿真。1.2程序设计:libraryieee;useieee.std_logic_1164.all;entitymux41isport(s:INSTD_LOGIC_VECTOR(1DOWNTO0);a,b,c,d:INSTD_LOGIC;y:outstd_logic);endmux41;architecturebehaviorofmux41isbeginprocess(s)beginIFs=00THENy=a;ELSIFs=01THENy=b;ELSIFs=10THENy=c;ELSIFs=11THENy=d;ENDIF;ENDPROCESS;ENDBEHAVIOR;1.3仿真波形图四选一多路选择器波形仿真结果1.4结果分析通过对实验结果的研究,可以发现该程序成功实现了4选1多路选择器的功能。当s=00时,y=a;s=01时,y=b;s=10时,y=c;s=11时,y=d.完全实现了4选1多路选择器的功能。2.七段译码器程序设计仿真2.1实验原理:7段数码是纯组合电路,通常的小规模专用IC,如74或4000系列的器件只能作十进制BCD码译码,然而数字系统中的数据处理和运算都是2进制的,所以输出表达都是16进制的,为了满足16进制数的译码显示,最方便的方法就是利用VHDL译码程序在FPGA或CPLD中实现。本项实验很容易实现这一目的。例1作为7段BCD码译码器的设计,输出信号LED7S的7位分别接如实验图1数码管的7个段,高位在左,低位在右。例如当LED7S输出为0010010时,数码管的7个段:g、f、e、d、c、b、a分别接0、0、1、0、0、1、0,实验中的数码管为共阳极的,接有低电平的段发亮,于是数码管显示“5”。实验图1数码管及其电路2.2实验内容:参考后面的七段译码器程序,在QUARTUSII上对以下程序进行编辑、编译、综合、适配、仿真,给出其所有信号的时序仿真波形。2.3程序设计:libraryieee;useieee.std_logic_1164.all;entitymu7isport(dat:instd_logic_vector(3downto0);led:outstd_logic_vector(6downto0));endmu7;architecturebehaveofmu7issignaltmp:std_logic_vector(6downto0);beginprocess(dat)begincasedatiswhen0000=tmp=0000001;when0001=tmp=1001111;when0010=tmp=0010010;when0011=tmp=0000110;when0100=tmp=1001100;when0101=tmp=0100100;when0110=tmp=0100000;when0111=tmp=0001111;when1000=tmp=0000000;when1001=tmp=0000100;when1010=tmp=0001000;when1011=tmp=1100000;when1100=tmp=0110001;when1101=tmp=1000010;when1110=tmp=0110000;when1111=tmp=0111000;whenothers=null;endcase;endprocess;led=tmp;endbehave;2.4仿真波形:2.5结果分析:通过波形仿真,得到该程序成功实现了七段译码器的功能,其中dat为四位二进制数的输入端,led为七段译码器的输出端。实验二计数器设计与显示实验目的:(1)熟悉利用QUARTUSII中的原理图输入法设计组合电路,掌握层次化设计的方法;(2)学习计数器设计、多层次设计方法和总线数据输入方式的仿真,并进行电路板下载演示验证。实验内容:1.完成计数器设计1.1实验内容:设计含有异步清零和计数使能的4位二进制加减可控计数器。1.2程序设计:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;ENTITYcnt4ISPORT(CLK,enable,updown,reset:instd_logic;Oc:outstd_logic;Q:BUFFERINTEGERrange15downto0);ENDENTITYcnt4;ARCHITECTUREbhvOFcnt4ISBEGINPROCESS(CLK,reset,enable,updown)BEGINifreset='1'thenQ=0;elseifenable='1'thenIFCLK'EVENTANDCLK='1'THENifupdown='1'thenQ=Q+1;elseQ=Q-1;endif;ifQ=15thenOc='1';endif;ifQ=0thenOc='0';endif;ENDIF;endif;endif;ENDPROCESS;ENDbhv;1.3仿真波形:1.4结果分析:通过波形仿真,可得该程序可以实现4位二进制加减可控计数器的功能。其中控制enable可以使计数器暂停或继续工作,控制reset可以使计数器复位,updown可以控制计数器是“加”还是“减”,可以看到Q在这次仿真过程中成功从0加到15,又从15减到0。可见实验结果是成功的。2.计数器显示译码设计与下载2.1实验内容:用原理图输入法按实验图2的方式,以前面设计的七段译码器DecL7S和计数器为底层元件,完成“计数器显示译码”的顶层文件设计。2.2程序设计:其他模块的代码与之前设计的实验代码一致,只有50M分频器的代码需要重新设计50M分频器代码如下:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;ENTITYcnt50ISPORT(CLK,enable,updown,reset:instd_logic;Oc:outstd_logic;Q:BUFFERINTEGERrange49999999downto0);ENDENTITYcnt50;ARCHITECTUREbhvOFcnt50ISBEGINPROCESS(CLK,reset,updown,enable)BEGINifreset='1'thenQ=0;elseifenable='1'thenIFCLK'EVENTANDCLK='1'THENifupdown='1'thenQ=Q+1;elseQ=Q-1;endif;ifQ=49999999thenOc='1';endif;ifQ=0thenOc='0';endif;ENDIF;endif;endif;ENDPROCESS;ENDbhv;2.3波形仿真:2.4各模块连接电路原理图:实验图2计数器和译码器连接电路的顶层文件原理图2.5结果分析:根据实验结果可知,各模块的功能都能成功实现,控制enable可以使计数器暂停或继续工作,控制reset可以使计数器复位,updown可以控制计数器是“加”还是“减”,而七段译码器则将计数器所记数通过数码管显示出来。成功实现了计数器显示译码的设计。实验3:大作业设计:2人抢答器(一)设计任务及要求设计一个2人抢答器。要求如下:1.两人抢答,先抢为有效,用发光二极管显示是否抢到优先答题权;2.每人2位计分显示,答错了不加分,答对了可加10分、20分、30分;3.每题结束后,裁判按复位键,可重新抢答下一题;4.累计加分可由裁判随时清除;(二)设计总体框图:(三)程序功能:1.此程序主要由三部分组成,即抢答、加分、显示;2.当一人抢到优先答题权,发光二极管亮,另一人再按键无效。答题结束后,裁判按复位键,方可再次抢答;3.每人有2个数码管显示累加计分情况,分数分为3档,用按键来区别,数码管的末位始终显示0.(四)程序设计:实体:(实体器件图)整个程序代码:entityqdisport(i1,i2:inbit;reset:inbit;g10,g20,g30:inbit;--加分light1,light2:outbit:='0';--抢答标志灯t11:outstd_logic_vector(6downto0):=1000000;--第一人分数的十位数和个位数t12:outstd_logic_vector(6downto0):=1000000;t21:outstd_logic_vector(6downto0):=1000000;--第二人分数的十位数和个位数t22:outstd_logic_vector(6downto0):=1000000;clk:inbit;--时钟cong:inbit--清零);endqd;architecturestruofqdissignalcs1:integerrange0to9;signalcs2:integerrange0to9;signala,b:bit:='0';signall1,l2:bit:='0';beginprocess(clk)beginifclk'eventandclk='1'thenif(cong='1')thenif(reset='1')thenif(i1='0'anda='0')thenl1='1';a='1';--抢答elsif(i2='0'anda='0')thenl2='1';a='1';endif;if(g10='0'andl1='1'andb='0')thencs1=cs1+1;b='1';elsif(g20='0'andl1='1'andb='0')thencs1=cs1+2;b='1';elsif(g30='0'andl1='1'andb='0')thencs1=cs1+3;b='1';endif;--完成第一人的加分if(g10='0'andl2='1'andb='0')thencs2=cs2+1;b='1';elsif(g20='0'andl2='1'andb='0')thencs2=cs2+2;b='1';elsif(g30='0'andl2='1'andb='0')thencs2=cs2+3;b='1';endif;--完成第二人的加分。if(cs1=0)thent11=1000000;--数码管显示。elsif(cs1=1)thent11=1111001;elsif(cs1=2)thent11=0100100;elsif(cs1=3)thent11=0110000;elsif(cs1=4)thent11=0011001;elsif(cs1=5)thent11=0010010;elsif(cs1=6)thent11=0000010;elsif(cs1=7)thent11=1111000;elsif(cs1=8)thent11=0000000;elsif(cs1=9)thent11=0010000;elset11=0010000;endif;if(cs2=0)thent21=1000000;elsif(cs2=1)thent21=1111001;elsif(cs2=2)thent21=0100100;elsif(cs2=3)thent21=0110000;elsif(cs2=4)thent2