当前位置:范文大全 > 调查报告 > VHDL实验报告

VHDL实验报告

发布时间: 2021-10-25 11:24:06

 专用集成电路实验报告

 1305 0Z 01

 1305 0 242 37 7

 刘德文

 实验一

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

 实验内容 1 1 、

 本实验以三线八线译码器 (L S 741 38) ) 为例, ,在 在 Xilinx I S E 9 、2 2 软件平台上完成设计电路得 L VHDL 文本输入、语法检查、编译、仿真、管脚分配与编程下载等操作。下载芯片选择 Xil in n x 公司得 Coo lR unn e r II I 系列 XC2 C 25 6- - 7P P Q8 208 作为目标仿真芯片、

 2、

 用1中所设计得得三线八线译码器 (LS 74 4 1 38) 生成一个 LS7 48 138 元件, ,在 在 X X i linx IS E 9。2 2 软件原理图设计平台上完成 8 LS74138 元件得调用, , 用原理图得方法设计三线八线译码器 (LS74138), 实现编译, , 仿真, , 管脚分配与编程下载等操作。

 源程序:

 library IEEE; use IEEE。STD_LOGIC_1164.ALL; use IEEE。STD_LOGIC_ARITH。ALL; use IEEE。STD_LOGIC_UNSIGNED、ALL; -—

 Unment the following lines to use the declarations that are --

 provided for instantiating Xilinx primitive ponents、 --library UNISIM; --use UNISIM.Vponents。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

  si pni esacﻩ

 when ”000"=>y<="00000001";

 ;”01000000"=〈y〉=”100" nehwﻩ

  when ”010"=>y<=”00000100”;

  ;"00010000”=<y>=”110” nehwﻩ

 ;”00001000”=〈y>="001" nehwﻩ

 ;”00000100”=〈y>=”101" nehwﻩ

 when "110”=>y<="01000000";

  ;"00000001"=<y>="111" nehwﻩ

 ;""=<y>=srehto nehwﻩ ﻩ

  end case;

  else

 ;""=<yﻩﻩ

 end if; end process; end Behavioral; 波形文件: :

  生成元器件及连接电路

  思考: :

 有程序可以瞧出, 定义了三个输入端, 一个输出端、g1,g2 为使能输入端, 当全为一时, 开始执行宽度为三得输入in p, 并听过程序实现三八译码器得功能、通过实验, 分别用了原理图与vhdl 语言两种方式进行调试。两种方法各有优缺点。对于原理图而言, 可以清晰直观得瞧出电路各部分得构造, 但却只能在原有得基础上进行链接而无法随意修改元器件功能; vhdl语言则可以按照实际得需求进行编写程序, 从而可以实现开发者想要实现得功能。

 实验二

 组合逻辑电路得 L VHDL 语言实现

 实验内容: 1.用 用 V V HL DL 语言实现优先编码器得设计并实现功能仿真

 2. 用VH H DL L 语言实现四选一选择器得设计并实现功能仿真。

 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; 波形图

  原理图:

 2. 四选一选择器源程序: 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; 波形图

 原理图

 思考:

 1. 优先编码器: 通过程序定义了一个八位得输入端与一个三位得输入端。首先就是通过八位得

  输入端得最低 位开始判断,是 如果就是 0, 则输出为:111;是 如果就是 1, 则判断第

 二位, 以此类推, 直到最后一位, 如果都不满足, 则输出:00 0。

 2 、四选一选择器: 一共有三个输入, 其中一个就是宽度为四得可供选择得输入端, 将一个四位给 宽度得二进制码赋值给 input 端, 通过 a 与 与 b 得输入选择in put 得输出。如ab 为 为 00 时,则输出为:inpu t(0), 以此类推、 实验三

 时序逻辑电路得 L VHDL 语言实验

 实验内容:( 3选 1) (一)

 、 设计一个 0 60 进制得计数器

 (二)

 设计一带使能得同步复位清零得递增 8 8 位二进制计数器

 (三)

 设计 一带使能得异步清零复位得递增 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 := ”00000000";

  --ELSE

  —-IF(ld = ’0’) THEN

  -- cnt := d;

  ELSE

 IF(enable = ’1’) THEN

  cnt := cnt + "00000001";

  if(cnt=”00111100")then

 cnt := "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 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 := ”00000000";

  ELSE

  IF(ld = ’0') THEN

  cnt := d;

  ELSE

 IF(enable = "1’) THEN

  cnt := cnt + ”00000001”;

  if(cnt=”00111011”)then

 Ld :=1;

  end if;

 END IF;

  END IF;

  END IF;

  END IF;

 qk <= cnt;

 END PROCESS; end a_ycounter; 波形图:

 思考: 六十进制计数器得实现,1) 异步清零程序得实现: 通过判断最后一个状态, 因为该计数器位六十进制, 所以最后一个状态为 5 9, 用二进制码表示为:"0 0111011” ”, 即当计数器得状态为六十,即"0 011 1100 "状态时, 计数器清零, 输出00000 000 。2) 同步置数程序得实现: 当计数器达到状 态, 当计数器达到状态”00111011" 时,ld 被赋值为0, 执行置数功能, 将d得值赋值给

 y, 计数器从零开始计数、

 实验四

 V V HDL L 层次化设计方法实验

 实验内容:

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

 D 触发器源程序: library IEEE; use IEEE、STD_LOGIC_1164。ALL; use IEEE。STD_LOGIC_ARITH、ALL; use IEEE、STD_LOGIC_UNSIGNED、ALL; —-

 Unment 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

 ;CIGOL_DTS:1Q LANGISﻩ

 BEGIN

 )1Q,KLC,RAELC( SSECORPﻩ

 NIGEBﻩ

 IF CLEAR="0’

  THEN Q1〈=’0';

  ELSIF CLK’EVENT AND CLK=’1' ﻩ;D=〈1Q NEHTﻩ

 END IF;

 ;SSECORP DNEﻩ ﻩ Q〈=Q1;

  ;1Q ton=〈N_Qﻩﻩ

 ;HEB DNEﻩ波形图: 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.Vponents。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_ IS

 1ffd tnenopﻩPort ( d,clk,rst : in

 STD_LOGIC;

  q: out

 STD_LOGIC); End ponent; 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; -—

 Unment 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_ IS

 1ffd tnenopmoCﻩPort ( d,clk,rst : in

 STD_LOGIC;

 q: out

 STD_LOGIC); End component; Signal q:STD_LOGIC_VECTOR(8DOWNTO0); BEGIN

 ;a=<)0(qﻩ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触发器得逻辑语句进行复制, 从而生成一组结构上完全相同得设计单元得电路结构。从上面得两个程序可以瞧出, 当所需要得组件比较少时, 两种语句得大小差不多, 但当所需要得组件比较多时, 生成语句得执行效率明显得要变高, 而且程序所占内存明显减少。

版权所有:策划范文网 2010-2024 未经授权禁止复制或建立镜像[策划范文网]所有资源完全免费共享

Powered by 策划范文网 © All Rights Reserved.。沪ICP备20021408号