专用集成电路实验报告13050Z011305024237刘德文实验一开发平台软件安装与认知实验实验内容1、本实验以三线八线译码器(LS74138)为例,在XilinxISE9.2软件平台上完成设计电路的VHDL文本输入、语法检查、编译、仿真、管脚分配和编程下载等操作。下载芯片选择Xilinx公司的CoolRunnerII系列XC2C256-7PQ208作为目标仿真芯片。2、用1中所设计的的三线八线译码器(LS74138)生成一个LS74138元件,在XilinxISE9.2软件原理图设计平台上完成LS74138元件的调用,用原理图的方法设计三线八线译码器(LS74138),实现编译,仿真,管脚分配和编程下载等操作。源程序:libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;--Uncommentthefollowinglinestousethedeclarationsthatare--providedforinstantiatingXilinxprimitivecomponents.--libraryUNISIM;--useUNISIM.VComponents.all;entityls74138isPort(g1:instd_logic;g2:instd_logic;inp:instd_logic_vector(2downto0);y:outstd_logic_vector(7downto0));endls74138;architectureBehavioralofls74138isbeginprocess(g1,g2,inp)beginif((g1andg2)='1')thencaseinpiswhen000=y=00000001;when001=y=00000010;when010=y=00000100;when011=y=00001000;when100=y=00010000;when101=y=00100000;when110=y=01000000;when111=y=10000000;whenothers=y=00000000;endcase;elsey=00000000;endif;endprocess;endBehavioral;波形文件:生成元器件及连接电路思考:有程序可以看出,定义了三个输入端,一个输出端。g1,g2为使能输入端,当全为一时,开始执行宽度为三的输入inp,并听过程序实现三八译码器的功能。通过实验,分别用了原理图和vhdl语言两种方式进行调试。两种方法各有优缺点。对于原理图而言,可以清晰直观的看出电路各部分的构造,但却只能在原有的基础上进行链接而无法随意修改元器件功能;vhdl语言则可以按照实际的需求进行编写程序,从而可以实现开发者想要实现的功能。实验二组合逻辑电路的VHDL语言实现实验内容:1.用VHDL语言实现优先编码器的设计并实现功能仿真2.用VHDL语言实现四选一选择器的设计并实现功能仿真。1.优先编码器源程序LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYpriorityencoderISPORT(input:INSTD_LOGIC_VECTOR(7DOWNTO0);y:OUTSTD_LOGIC_VECTOR(2DOWNTO0));ENDpriorityencoder;ARCHITECTURErtlOFpriorityencoderISBEGINPROCESS(input)BEGINIF(input(0)='0')THENy=111;ELSIF(input(1)='0')THENy=110;ELSIF(input(2)='0')THENy=101;ELSIF(input(3)='0')THENy=100;ELSIF(input(4)='0')THENy=011;ELSIF(input(5)='0')THENy=010;ELSIF(input(6)='0')THENy=001;ELSEy=000;ENDIF;ENDPROCESS;ENDrtl;波形图原理图:2.四选一选择器源程序:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux4ISPORT(input:INSTD_LOGIC_VECTOR(3DOWNTO0);a,b:INSTD_LOGIC;y:OUTSTD_LOGIC);ENDmux4;ARCHITECTURErt1OFmux4ISSIGNALse1:STD_LOGIC_VECTOR(1DOWNTO0);BEGINse1=b&a;PROCESS(input,se1)BEGINIF(se1=00)THENy=input(0);ELSIF(se1=01)THENy=input(1);ELSIF(se1=10)THENy=input(2);ELSEy=input(3);ENDIF;ENDPROCESS;ENDrt1;波形图原理图思考:1.优先编码器:通过程序定义了一个八位的输入端和一个三位的输入端。首先是通过八位的输入端的最低位开始判断,如果是0,则输出为:111;如果是1,则判断第二位,以此类推,直到最后一位,如果都不满足,则输出:000。2.四选一选择器:一共有三个输入,其中一个是宽度为四的可供选择的输入端,将一个四位宽度的二进制码赋值给input端,通过a与b的输入选择input的输出。如ab为00时,则输出为:input(0),以此类推。实验三时序逻辑电路的VHDL语言实验实验内容:(3选1)(一)、设计一个60进制的计数器(二)设计一带使能的同步复位清零的递增8位二进制计数器(三)设计一带使能的异步清零复位的递增8位二进制计数器六十进制(异步清零)源程序:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityycounterisport(clk,clear,enable:instd_logic;--ld:instd_logic;--d:instd_logic_vector(7downto0);qk:outstd_logic_vector(7downto0));endycounter;architecturea_ycounterofycounterisbeginPROCESS(clk)VARIABLEcnt:std_logic_vector(7downto0);BEGINIF(clk'EVENTANDclk='1')THENIF(clear='0')THENcnt:=00000000;--ELSE--IF(ld='0')THEN--cnt:=d;ELSEIF(enable='1')THENcnt:=cnt+00000001;if(cnt=00111100)thencnt:=00000000;endif;ENDIF;--ENDIF;ENDIF;ENDIF;qk=cnt;ENDPROCESS;enda_ycounter;波形图:六十进制(同步置数)源程序:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityycounterisport(clk,clear,enable:instd_logic;ld:instd_logic;d:instd_logic_vector(7downto0);qk:outstd_logic_vector(7downto0));endycounter;architecturea_ycounterofycounterisbeginPROCESS(clk)VARIABLEcnt:std_logic_vector(7downto0);BEGINIF(clk'EVENTANDclk='1')THENIF(clear='0')THENcnt:=00000000;ELSEIF(ld='0')THENcnt:=d;ELSEIF(enable='1')THENcnt:=cnt+00000001;if(cnt=00111011)thenLd:=1;endif;ENDIF;ENDIF;ENDIF;ENDIF;qk=cnt;ENDPROCESS;enda_ycounter;波形图:思考:六十进制计数器的实现,1)异步清零程序的实现:通过判断最后一个状态,因为该计数器位六十进制,所以最后一个状态为59,用二进制码表示为:00111011,即当计数器的状态为六十,即00111100状态时,计数器清零,输出00000000。2)同步置数程序的实现:当计数器达到状态,当计数器达到状态00111011时,ld被赋值为0,执行置数功能,将d的值赋值给y,计数器从零开始计数。实验四VHDL层次化设计方法实验实验内容:设计一个8位移位寄存器。各个D触发器模块采用VHDL语言编写,分别用原理图、VHDL语言元件例化语句和生成语句的方法实现8位移位寄存器的设计。D触发器源程序:libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;--Uncommentthefollowinglinestousethedeclarationsthatare--providedforinstantiatingXilinxprimitivecomponents.--libraryUNISIM;--useUNISIM.VComponents.all;entityDchuisPort(CLK:inSTD_LOGIC;D:inSTD_LOGIC;Q:outSTD_LOGIC;CLEAR:inSTD_LOGIC;Q_N:outSTD_LOGIC);endDchu;ARCHITECTUREBEHOFDchuISSIGNALQ1:STD_LOGIC;BEGINPROCESS(CLEAR,CLK,Q1)BEGINIFCLEAR='0'THENQ1='0';ELSIFCLK'EVENTANDCLK='1'THENQ1=D;ENDIF;ENDPROCESS;Q=Q1;Q_N=notQ1;ENDBEH;波形图:D触发器:八位移位寄存器:八位移位寄存器原理图:元件例化:libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;--Uncommentthefollowinglinestousethedeclarationsthatare--providedforinstantiatingXilinxprimitivecomponents.--libraryUNISIM;--useUNISIM.VComponents.all;entityshift_reg_8_comisPort(a,clk,rst:inSTD_LOGIC;b:outSTD_LOGIC);endshift_reg_8_com;ARCHITECTUREBEHOFshift_reg_8_comISComponentdff1Port(d,clk,rst:inSTD_LOGIC;q:outSTD_LOGIC);Endcomponent;Signalq:STD_LOGIC_VECTOR(8DOWNTO0);BEGINq(0)=a;d0:dff1PORTMAP(q(0),clk,rst,q(1));d1:dff1PORTMAP(q(1),clk,rst,q(2));d2:dff1PORTMAP(q(2),