演示版VHDL实验报告全面 vhdl实验报告

 精选

  专用集成电路实验报告

 13050Z01

 1305024237

 刘德文

 实验一 ?开发平台软件安装与认知实验

 实验内容

 1、 本实验以三线八线译码器(LS74138)为例,在Xilinx ISE 9.2软件平台上完成设计电路的VHDL文本输入、语法检查、编译、仿真、管脚分配和编程下载等操作。下载芯片选择Xilinx公司的CoolRunner II系列XC2C256-7PQ208作为目标仿真芯片。

 2、 用1中所设计的的三线八线译码器(LS74138)生成一个LS74138元件,在Xilinx ISE 9.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 is

  Port ( 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 is

 begin

 process(g1,g2,inp)

 begin

  if((g1 and g2)='1') then

  case inp is

  when "000"=>y<=;

  when "001"=>y<=;

  when "010"=>y<=;

  when "011"=>y<=;

  when "100"=>y<=;

  when "101"=>y<=;

  when "110"=>y<=;

  when "111"=>y<=;

  when others=>y<=;

  end case;

  else

  y<=;

  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 IS

  PORT (input:IN STD_LOGIC_VECTOR (7 DOWNTO 0);

  y:OUT STD_LOGIC_VECTOR (2 DOWNTO 0));

 END priorityencoder;

 ARCHITECTURE rtl OF priorityencoder IS

 BEGIN

  PROCESS (input)

  BEGIN

  IF(input(0)='0') THEN

  y<="111";

  ELSIF(input(1)='0') THEN

  y<="110";

  ELSIF(input(2)='0') THEN

  y<="101";

  ELSIF(input(3)='0') THEN

  y<="100";

  ELSIF(input(4)='0') THEN

  y<="011";

  ELSIF(input(5)='0') THEN

  y<="010";

  ELSIF(input(6)='0') THEN

  y<="001";

  ELSE

  y<="000";

  END IF;

  END PROCESS;

 END rtl;

 波形图

 原理图:

 四选一选择器源程序:

 LIBRARY IEEE;

 USE IEEE.STD_LOGIC_1164.ALL;

 ENTITY mux4 IS

  PORT (input:IN STD_LOGIC_VECTOR (3 DOWNTO 0);

  a,b:IN STD_LOGIC;

  y:OUT STD_LOGIC);

 END mux4;

 ARCHITECTURE rt1 OF mux4 IS

 SIGNAL se1:STD_LOGIC_VECTOR (1 DOWNTO 0);

 BEGIN

  se1<=b&a;

  PROCESS (input,se1)

  BEGIN

  IF(se1="00")THEN

  y<=input(0);

  ELSIF(se1="01")THEN

  y<=input(1);

  ELSIF(se1="10")THEN

  y<=input(2);

  ELSE

  y<=input(3);

  END IF;

  END PROCESS;

 END rt1;

 波形图

 原理图

 思考:

 优先编码器:通过程序定义了一个八位的输入端和一个三位的输入端。首先是通过八位的

  输入端的最低位开始判断,如果是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 is

  port(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 is

 begin

  PROCESS (clk)

  VARIABLE cnt :std_logic_vector(7 downto 0);

  BEGIN

  IF (clk'EVENT AND clk = '1') THEN

  IF(clear = '0') THEN

  cnt := ;

  --ELSE

  --IF(ld = '0') THEN

  -- cnt := d;

  ELSE

  IF(enable = '1') THEN

  cnt := cnt + ;

  if(cnt=)then

  cnt := ;

  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 is

  port(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 is

 begin

  PROCESS (clk)

  VARIABLE cnt :std_logic_vector(7 downto 0);

  BEGIN

  IF (clk'EVENT AND clk = '1') THEN

  IF(clear = '0') THEN

  cnt := ;

  ELSE

  IF(ld = '0') THEN

  cnt := d;

  ELSE

  IF(enable = '1') THEN

  cnt := cnt + ;

  if(cnt=)then

  Ld :=1;

  end if;

  END IF;

  END IF;

  END IF;

  END IF;

  qk <= cnt;

  END PROCESS;

 end a_ycounter;

 波形图:

 思考:

 六十进制计数器的实现,1)异步清零程序的实现:通过判断最后一个状态,因为该计数器位六十进制,所以最后一个状态为59,用二进制码表示为:,即当计数器的状态为六十,即状态时,计数器清零,输2)同步置数程序的实现:当计数器达到状态,当计数器达到状态时,ld被赋值为0,执行置数功能,将d的值赋值给y,计数器从零开始计数。

 实验四 VHDL层次化设计方法实验

 实验内容:

 设计一个8位移位寄存器。各个D触发器模块采用VHDL语言编写,分别用原理图、VHDL语言元件例化语句和生成语句的方法实现8位移位寄存器的设计。

 D触发器源程序:

 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 Dchu is

  Port ( CLK : in STD_LOGIC;

  D : in STD_LOGIC;

  Q : out STD_LOGIC;

  CLEAR : in STD_LOGIC;

  Q_N : out STD_LOGIC);

 end Dchu;

 ARCHITECTURE BEH OF Dchu IS

  SIGNAL Q1:STD_LOGIC;

 BEGIN

  PROCESS (CLEAR,CLK,Q1)

  BEGIN

  IF CLEAR='0'

  THEN Q1<='0';

  ELSIF CLK'EVENT AND CLK='1'

  THEN Q1<=D;

  END IF;

  END PROCESS;

  Q<=Q1;

  Q_N<=not Q1;

  END BEH;

 波形图:

 D触发器:

 八位移位寄存器:

 八位移位寄存器原理图:

 元件例化:

 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 shift_reg_8_com is

  Port ( a,clk,rst : in STD_LOGIC;

  b: out STD_LOGIC);

 end shift_reg_8_com;

 ARCHITECTURE BEH OF shift_reg_8_com IS

  Component dff1

 Port ( d,clk,rst : in STD_LOGIC;

  q: out STD_LOGIC);

 End component;

 Signal q:STD_LOGIC_VECTOR(8DOWNTO0);

 BEGIN

  q(0)<=a;

 d0:dff1 PORT MAP(q(0),clk,rst,q(1));

 d1:dff1 PORT MAP(q(1),clk,rst,q(2));

 d2:dff1 PORT MAP(q(2),clk,rst,q(3));

 d3:dff1 PORT MAP(q(3),clk,rst,q(4));

 d4:dff1 PORT MAP(q(4),clk,rst,q(5));

 d5:dff1 PORT MAP(q(5),clk,rst,q(6));

 d6:dff1 PORT MAP(q(6),clk,rst,q(7));

 d7:dff1 PORT MAP(q(7),clk,rst,q(8));

 b<=q(4);

 End str;

 生成语句:

 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 shift_reg_8_com is

  Port ( a,clk,rst : in STD_LOGIC;

  b: out STD_LOGIC);

 end shift_reg_8_com;

 ARCHITECTURE BEH OF shift_reg_8_com IS

  Component dff1

 Port ( d,clk,rst : in STD_LOGIC;

  q: out STD_LOGIC);

 End component;

 Signal q:STD_LOGIC_VECTOR(8DOWNTO0);

 BEGIN

  q(0)<=a;

 g1: FOR I IN 0 TO 7 GENERATE

 dx:dff1 PORT MAP(q(i),clk,rst,q(i+1));

 End generate g1;

 b<=q(4);

 End str;

 实验结果(仿真结果)与分析

  元件例化语句由两部分组成,元件说明语句和元件例化语句。首先要设计被上层电路调用的电路块,即D触发器模块,八位移位寄存器就是通过程序调用八个D触发器,每个D触发器都相当于一个模块。生成语句是将已设计好的D触发器的逻辑语句进行复制,从而生成一组结构上完全相同的设计单元的电路结构。从上面的两个程序可以看出,当所需要的组件比较少时,两种语句的大小差不多,但当所需要的组件比较多时,生成语句的执行效率明显的要变高,而且程序所占内存明显减少。

推荐访问:演示版 实验 报告 vhdl