专用集成电路实验报告13050Z011305024237刘德文实验一开发平台软件安装与认知实验实验内容1、本实验以三线八线译码器(LS74138)为例,在Xilinx ISE 9.2软件平台上完成设计电路的VHDL文本输入、语法检查、编译、仿真、管脚分配和编程下载等操作。
下载芯片选择Xilinx公司的CoolRunner II系列XC2C256-7PQ208作为目标仿真芯片。
2、用1中所设计的的三线八线译码器(LS74138)生成一个LS74138元件,在Xilinx ISE9.2软件原理图设计平台上完成LS74138元件的调用,用原理图的方法设计三线八线译码器(LS74138),实现编译,仿真,管脚分配和编程下载等操作。
源程序:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;-- Uncomment the following lines to use the declarations that are-- provided for instantiating Xilinx primitive components.--library UNISIM;--use UNISIM.VComponents.all;entity ls74138 isPort ( g1 : in std_logic;g2 : in std_logic;inp : in std_logic_vector(2 downto 0);y : out std_logic_vector(7 downto 0));end ls74138;architecture Behavioral of ls74138 isbeginprocess(g1,g2,inp)beginif((g1 and g2)='1') thencase inp iswhen "000"=>y<="00000001";when "001"=>y<="00000010";when "010"=>y<="00000100";when "011"=>y<="00001000";when "100"=>y<="00010000";when "101"=>y<="00100000";when "110"=>y<="01000000";when "111"=>y<="10000000";when others=>y<="00000000";end case;elsey<="00000000";end if;end process;end Behavioral;波形文件:生成元器件及连接电路思考:有程序可以看出,定义了三个输入端,一个输出端。
g1,g2为使能输入端,当全为一时,开始执行宽度为三的输入inp,并听过程序实现三八译码器的功能。
通过实验,分别用了原理图和vhdl语言两种方式进行调试。
两种方法各有优缺点。
对于原理图而言,可以清晰直观的看出电路各部分的构造,但却只能在原有的基础上进行链接而无法随意修改元器件功能;vhdl语言则可以按照实际的需求进行编写程序,从而可以实现开发者想要实现的功能。
实验二组合逻辑电路的VHDL语言实现实验内容:1.用VHDL语言实现优先编码器的设计并实现功能仿真2.用VHDL语言实现四选一选择器的设计并实现功能仿真。
1.优先编码器源程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY priorityencoder ISPORT (input:IN STD_LOGIC_VECTOR (7 DOWNTO 0);y:OUT STD_LOGIC_VECTOR (2 DOWNTO 0));END priorityencoder;ARCHITECTURE rtl OF priorityencoder ISBEGINPROCESS (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";END IF;END PROCESS;END rtl;波形图原理图:2.四选一选择器源程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux4 ISPORT (input:IN STD_LOGIC_VECTOR (3 DOWNTO 0);a,b:IN STD_LOGIC;y:OUT STD_LOGIC);END mux4;ARCHITECTURE rt1 OF mux4 ISSIGNAL se1:STD_LOGIC_VECTOR (1 DOWNTO 0);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);END IF;END PROCESS;END rt1;波形图原理图思考:1.优先编码器:通过程序定义了一个八位的输入端和一个三位的输入端。
首先是通过八位的输入端的最低位开始判断,如果是0,则输出为:111;如果是1,则判断第二位,以此类推,直到最后一位,如果都不满足,则输出:000。
2.四选一选择器:一共有三个输入,其中一个是宽度为四的可供选择的输入端,将一个四位宽度的二进制码赋值给input端,通过a与b的输入选择input的输出。
如ab为00时,则输出为:input(0),以此类推。
实验三时序逻辑电路的VHDL语言实验实验内容:(3选1)(一)、设计一个60进制的计数器(二)设计一带使能的同步复位清零的递增8位二进制计数器(三)设计一带使能的异步清零复位的递增8位二进制计数器六十进制(异步清零)源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity ycounter isport(clk,clear,enable:in std_logic;--ld:in std_logic;--d:in std_logic_vector(7 downto 0); qk:out std_logic_vector(7 downto 0)); end ycounter;architecture a_ycounter of ycounter isbeginPROCESS (clk)VARIABLE cnt :std_logic_vector(7 downto 0);BEGINIF (clk'EVENT AND clk = '1') THENIF(clear = '0') THENcnt := "00000000";--ELSE--IF(ld = '0') THEN-- cnt := d;ELSEIF(enable = '1') THENcnt := cnt + "00000001";if(cnt="00111100")thencnt := "00000000";end if;END IF;--END IF;END IF;END IF;qk <= cnt;END PROCESS;end a_ycounter;波形图:六十进制(同步置数)源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity ycounter isport(clk,clear,enable:in std_logic;ld:in std_logic;d:in std_logic_vector(7 downto 0);qk:out std_logic_vector(7 downto 0));end ycounter;architecture a_ycounter of ycounter isbeginPROCESS (clk)VARIABLE cnt :std_logic_vector(7 downto 0);BEGINIF (clk'EVENT AND clk = '1') THENIF(clear = '0') THENcnt := "00000000";ELSEIF(ld = '0') THENcnt := d;ELSEIF(enable = '1') THENcnt := cnt + "00000001";if(cnt="00111011")thenLd :=1;end if;END IF;END IF;END IF;END IF;qk <= cnt;END PROCESS;end a_ycounter;波形图:思考:六十进制计数器的实现,1)异步清零程序的实现:通过判断最后一个状态,因为该计数器位六十进制,所以最后一个状态为59,用二进制码表示为:"00111011",即当计数器的状态为六十,即"00111100"状态时,计数器清零,输出00000000。