wait for 10 us; input<=\ wait for 10 us; END PROCESS tb;
-- *** End Test Bench - User Defined Section ***
END behavior; 仿真图如下:
(三)、用VHDL语言实现四选一选择器的设计并实现功能仿真。
选择器常用于信号的切换,四选一选择器可以用于4路信号的切换。其真值表如下所示:
表3 四选一真值表
选择输入 b 0 0 0 0 1 1 1 1 a 0 0 1 1 0 0 1 1 数据输入 Input0 0 1 x x x x x x Input1 x x 0 1 x x x x Input2 x x x x 0 1 x x Input3 x x x x x x 0 1 数据输出 y 0 1 0 1 0 1 0 1 用VHDL语言实现四选一选择器的设计并实现功能仿真。 参考程序如下:
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;
21
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=\ y<=input(0); ELSIF(se1=\ y<=input(1); ELSIF(se1=\ y<=input(2); ELSE
y<=input(3); END IF; END PROCESS; END rt1;
测试向量参考程序如下:
-- VHDL Test Bench Created from source file mux4.vhd -- 16:22:02 03/24/2008 -- Notes:
-- This testbench has been automatically generated using types std_logic and -- std_logic_vector for the ports of the unit under test. Xilinx recommends -- that these types always be used for the top-level I/O of a design in order -- to guarantee that the testbench will bind correctly to the post-implementation -- simulation model. LIBRARY ieee;
USE ieee.std_logic_1164.ALL; USE ieee.numeric_std.ALL; ENTITY mux4_mux4_vhd_tb IS END mux4_mux4_vhd_tb;
ARCHITECTURE behavior OF mux4_mux4_vhd_tb IS
COMPONENT mux4 PORT(
input : IN std_logic_vector(3 downto 0); a : IN std_logic;
22
b : IN std_logic; y : OUT std_logic );
END COMPONENT;
SIGNAL input : std_logic_vector(3 downto 0); SIGNAL a : std_logic; SIGNAL b : std_logic; SIGNAL y : std_logic;
BEGIN
uut: mux4 PORT MAP( );
input => input, a => a, b => b, y => y
-- *** Test Bench - User Defined Section *** u1: PROCESS BEGIN a<='0';
wait for 30 us; a<='1'; wait for 30 us; a<='0'; wait for 10 us; a<='1'; wait;
END PROCESS u1; u2: process begin b<='0';
wait for 20 us;
23
b<='1'; wait for 40 us; b<='0'; wait for 10 us; b<='1'; wait for 10 us; b<='0'; wait;
end process u2;
u3: process begin
input<=\
wait for 20 us; input<=\ wait for 20 us; input<=\ wait for 40 us; input<=\ wait ;
end process u3;
-- *** End Test Bench - User Defined Section *** END behavior; 仿真结果如下图:
六、预习与思考
预习:在实验前编好实验程序,做实验时验证。
24
实验三 时序逻辑电路的VHDL语言实验
实验性质:验证性 实验级别:必做 开课单位:信息与通信工程学院通信工程系 学时:2学时 一、实验目的:
1、掌握用VHDL语言设计基本的时序逻辑电路及仿真。 2、掌握VHDL顺序语句和并行语句的异同
3、掌握触发器同步复位和异步复位的实现方式。 4、掌握软件时钟的加入方法。 5、掌握信号和变量的主要区别。 二、实验器材:
计算机、Quartus II软件或xilinx ISE 三、实验内容:
1、设计带使能的递增计数器
2、在步骤1的基础上设计一带使能的同步(异步)复位的递增(递减)计数器 3、在步骤1的基础上设计同步(异步)清零的同步(异步)复位的递增(递减)计数器 四、实验步骤:
1、设计带使能的递增计数器。
2、在步骤1的基础上设计一带使能的同步复位的递增计数器并实现时序仿真。 3、在步骤1的基础上用信号设计一带使能的同步复位的递增计数器并实现时序仿真。
4、用变量设计一带使能的同步复位的可增可减计数器并实现时序仿真,比较信号和变量的不同。 5、在步骤1的基础上设计异步清零的异步清零的递增(递减)计数器,和步骤二中同步设计比较,清零信号和时钟信号位置不同时仿真结果有何不同,同时理解VHDL语言顺序语句和并行语句的区别。
6、测试向量设计 参考程序: library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity ycounter is
port(clk,clear,ld,enable:in std_logic; d:in std_logic_vector(7 downto 0); qk:out std_logic_vector(7 downto 0));
25