EDA大作业及实验报告1实验一:QUARTUSⅡ软件使用及组合电路设计仿真实验目的:学习QUARTUSⅡ软件的使用,掌握软件工程的建立,VHDL源文件的设计和波形仿真等基本内容;实验内容:1.四选一多路选择器的设计首先利用QuartusⅡ完成4选1多路选择器的文本编辑输入(mux41a.vhd)和仿真测试等步骤,给出仿真波形。步骤:(1)建立工作库文件夹和编辑设计文件;(2)创建工程;(3)编译前设置;(4)全程编译;(5)时序仿真;(6)应用RTL电路图观测器(可选择)实验程序如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux41ISPORT(S10:INSTD_LOGIC_VECTOR(1DOWNTO0);A,B,C,D:INSTD_LOGIC;Q:OUTSTD_LOGIC);ENDENTITYmux41;ARCHITECTUREbhvOFmux41ISBEGINPROCESS(A,B,C,D,S10)BEGINIFS10=00THENQ=A;ELSIFS10=01THENQ=B;ELSIFS10=10THENQ=C;ELSEQ=D;ENDIF;ENDPROCESS;ENDbhv;波形仿真如图:2其中,分别设置A,B,C,D四个输入都为10.0ns的方波,其占空比分别为25%,50%,75%,90%以作为四种输入的区分,使能端s10以此输入00(即[0]),01(即[1]),10(即[2]),11(即[3]),可以观察到输出端Q依次输出分别为A,B,C,D。试验成功。其RTL电路图为: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上对以下程序进行编辑、编译、综3合、适配、仿真,给出其所有信号的时序仿真波形。试验程序如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYDecL7SISPORT(A:INSTD_LOGIC_VECTOR(3DOWNTO0);LED7S:OUTSTD_LOGIC_VECTOR(6DOWNTO0));END;ARCHITECTUREoneOFDecL7SISBEGINPROCESS(A)BEGINCASEA(3DOWNTO0)ISWHEN0000=LED7S=1000000;--X“80”-0WHEN0001=LED7S=1111001;--X“79”-1WHEN0010=LED7S=0100100;--X“24”-2WHEN0011=LED7S=0110000;--X“30”-3WHEN0100=LED7S=0011001;--X“19”-4WHEN0101=LED7S=0010010;--X“12”-5WHEN0110=LED7S=0000010;--X“02”-6WHEN0111=LED7S=1111000;--X“78”-7WHEN1000=LED7S=0000000;--X“00”-8WHEN1001=LED7S=0010000;--X“10”-9WHEN1010=LED7S=0001000;--X“08”-AWHEN1011=LED7S=0000011;--X“03”-BWHEN1100=LED7S=1000110;--X“46”-CWHEN1101=LED7S=0100001;--X“21”-DWHEN1110=LED7S=0000110;--X“06”-EWHEN1111=LED7S=0001110;--X“0E”-FWHENOTHERS=NULL;ENDCASE;ENDPROCESS;END;波形仿真如图:如图,当输入端A依次输入0-15的四位二进制码时,输出端依次输出(0-9及A-F)的数码管所对应的七位二进制数,例如,当输入0000时,输出端输出1000000(即字符@的ASCII码),显示在数码段上即‘0’。4实验二计数器设计与显示实验目的:(1)熟悉利用QUARTUSII中的原理图输入法设计组合电路,掌握层次化设计的方法;(2)学习计数器设计、多层次设计方法和总线数据输入方式的仿真,并进行电路板下载演示验证。实验内容:1.完成计数器设计设计含有异步清零和计数使能的4位二进制加减可控计数器。要求:(1)写出设计框图、流程和方法;(2)利用VHDL设计实现程序;(3)进行波形仿真验证;(4)完成设计实验报告:将实验原理、设计过程、编译仿真波形和分析结果写进实验报告。Q1=(OTHERS='0')NOYQ=Q1YN开始EN,CLC,CLKQ1=Q1+1Q1=Q1-1QCLK’EVENTCLK=’1’CLC=’0’开始CLC,CLK,ENEN=’1’5其设计原理:由三个输入端CLC,CLK,EN控制计数器的输出和计数方式,其中当清零端CLC=’1’时,输出端输出为全零;当CLC=’0’时,正常计数。其中如果出现时钟上升沿,加减控制端EN=’1’时,为加法计数,反之则为减法计数。在程序设计时,在进程中引入信号Q1,在进程中完成标准逻辑位的加减,结束进程之后将其给输出。设计框图如上所示。实验程序如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYCNT4ISPORT(CLK:INSTD_LOGIC;EN:INSTD_LOGIC;CLC:INSTD_LOGIC;Q:OUTSTD_LOGIC_VECTOR(3DOWNTO0));ENDENTITYCNT4;ARCHITECTUREBHVOFCNT4ISSIGNALQ1:STD_LOGIC_VECTOR(3DOWNTO0);BEGINPROCESS(CLK)BEGINIFCLC='1'THENQ1=(OTHERS='0');ELSIF(CLK'EVENTANDCLK='1')THENIFEN='1'THENQ1=Q1+1;ELSEQ1=Q1-1;ENDIF;ENDIF;ENDPROCESS;Q=Q1;ENDARCHITECTUREBHV;波形仿真结果如图:如上图所示,当CLC=’1’时,清零;否则,正常计数。EN=’0’时,减法计数,EN=’1’时,加法计数。仿真验证实验设计成功。2.计数器显示译码设计与下载用原理图输入法的方式,以前面设计的七段译码器DecL7S和计数器为底层元件,完成“计数器显示译码”的顶层文件设计。设计原理:为了使数码管的变化能够用肉眼观察,将输入时钟(50MHz)先进行进行50M分频,输出频率为1Hz的时钟。其中分频器采用M=50M计数器的进位输出端来实现,将分频后的时钟信号送入四位二进制加减可控计数器的时钟输入端。四位二进制加减可控计数器由实验1中提供,其输出作为七段译码器的输入端。50M分频器程序设计:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;6ENTITYCNT5MISPORT(CLK:INSTD_LOGIC;CLK_OUT:OUTSTD_LOGIC);ENDENTITYCNT5M;ARCHITECTUREBHVOFCNT5MISSIGNALCOUNT:STD_LOGIC_VECTOR(26DOWNTO0);BEGINPROCESSBEGINWAITUNTILCLK'EVENTANDCLK='1';IF(COUNT49999999)THENCOUNT=COUNT+1;CLK_OUT='0';ELSECOUNT=(OTHERS='0');CLK_OUT='1';ENDIF;ENDPROCESS;ENDARCHITECTUREBHV;修改后加减计数器程序:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYCNT4ISPORT(CLK:INSTD_LOGIC;UPDOWN:INSTD_LOGIC;RESET,ENABLE:INSTD_LOGIC;Q:OUTSTD_LOGIC_VECTOR(3DOWNTO0));ENDENTITYCNT4;ARCHITECTUREBHVOFCNT4ISSIGNALQ1:STD_LOGIC_VECTOR(3DOWNTO0);BEGINPROCESS(CLK)BEGINIFENABLE='1'THENIFRESET='1'THENQ1=(OTHERS='0');ELSIF(CLK'EVENTANDCLK='1')THENIFUPDOWN='1'THENQ1=Q1+1;ELSEQ1=Q1-1;ENDIF;ENDIF;ENDIF;ENDPROCESS;Q=Q1;ENDARCHITECTUREBHV;其原理图如下:7其中为了便于观察,我们只仿真未加分频器时的的波形图如下:其中,ENABLE为使能端,其为1时,电路正常工作。RESET为复位端,当其为1时,输出为全零。UPDOWAN为加减控制端,其为0时,减法计数,为1时,加法计数。硬件测试:将编译好的的程序下载到实验板上,其引脚对应如原理图所示。引脚及开关对应关系如下:控制引脚enableresetupdown对应的开关SW0SW1SW2上电后,SW0为低电平,数码管输出为‘0‘,SW0为高电平时,正常计数。将SW1置为高电平时,清零,数码管显示‘0’;只为低电平时,数码管正常显示。SW2为低电平时,减法计数,为高电平时,加法计数。实验三:大作业设计——循环彩灯控制器实验任务:设计一个循环彩灯控制器,该控制器可控制10个发光二极管循环点亮、间隔点亮或者闪烁等花型。要求至少设计三种以上花型,并用按键控制花型之间的转换。实验设计:本实验通过设计一个拥有11个状态的状态机,其11个暂态s0-s10循环链接,将其所代替的二进制码送入led灯,以实现彩灯“流水”的特性。对于每个暂态,都拥有4种二进制码,通过对输入的使能端EN12的判断,决定输出的码值,进而确定显示的彩灯的类型。同时用数码管作为彩灯花型序号的显示装置,当EN12为00时,显示‘1’;01时显示‘2’;10时显示‘3’,11时显示‘4’。为了能搞看清彩灯的变化规律,须先经过50M分频器分频。程序设计如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYLIUSHUIISPORT(CLK:INSTD_LOGIC;EN1:INSTD_LOGIC;EN2:INSTD_LOGIC;CON:INSTD_LOGIC;Z:OUTSTD_LOGIC_VECTOR(9DOWNTO0);LED7S:OUTSTD_LOGIC_VECTOR(6DOWNTO0));ENDENTITYLIUSHUI;ARCHITECTUREBHVOFLIUSHUIISTYPESTATE_TYPEIS(S0,S1,S2,S3,S4,S5,S6,S7,S8,S9);8SIGNALCURRENT_STATE,NEXT_STATE:STAT