首页 > 解决方案 > 位运算符的测试台

问题描述

有人可以帮我为以下程序创建一个 TestBench 程序吗?

library ieee; 
use ieee.std_logic_1164.all;  

entity bitwise is 
  port( a,b    : in std_logic_vector(4 downto 0);  
        result1, result2, result3, result4, result5, result6 : out std_logic_vector(4 downto 0)); 
end bitwise;  

architecture arch of bitwise is 
begin  
  result1   <= a and b; 
  result2   <= a or b;
  result3   <= a xor b;
  result4   <= not a;
  result5   <= to_stdlogicvector(to_bitvector(a) sll 1);
  result6   <= to_stdlogicvector(to_bitvector(a) srl 1);
end arch;

我的测试台程序如下:我坚持在刺激过程中,我们必须测试每一种可能性。它可以是循环版本,也可以只是测试每个运算符的可能数字。

LIBRARY ieee;
USE ieee.std_logic_1164.all;

  entity test_bitwise is
     end test_bitwise;

  architecture behavior of test_bitwise is
    component bitwise;
       port( a,b    : in std_logic_vector(4 downto 0);  
        result1, result2, result3, result4 : out std_logic_vector(4 downto 0)); 
    end component;

    --INPUTS
    signal tb_a  : std_logic_vector(4 downto 0) := (others => '0');
     `signal tb_b  : std_logic_vector(4 downto 0) := (others => '0');

    --OUTPUTS
   signal tb_result1 : std_logic_vector(7 downto 0);
     signal tb_result2 : std_logic_vector(7 downto 0);
     signal tb_result3 : std_logic_vector(7 downto 0);
     signal tb_result4 : std_logic_vector(7 downto 0);  

    begin
      -- INSTANTIATE THE UNIT UNDER TEST (UUT)
      U1_Test : entity work.test_bitwise(behavioral)
        port map (a         => tb_a,
                  b             => tb_b,
                              result1   <= tb_result1,
                              result2   <= tb_result2,
                              result3   <= tb_result3,
                              result4   <= tb_result4);

              --STIMULUS PROCESS
                stim_proc : process
      begin

        -- CODE HERE

            end process;
    end behavior;

标签: vhdl

解决方案


正如其他人在评论中所说,您应该自己提供一些输入。你尝试过什么,为什么没有成功?如果您很难找出尝试什么以及如何开始,您可以从执行以下操作开始。如果您没有成功,您可以编辑您的问题或发布一个新问题,以便其他成员可以帮助您。

使用 for 循环遍历每一种可能性。手动编写所有可能的值进行测试会很累。

  1. 因为您有两个输入,所以在您的流程中使用两个嵌套for循环。一个迭代 input 的值,另一个a迭代b. 在此处查看for 循环的编写方式。

  2. 在循环内,为您的信号tb_atb_b. 循环索引是整数,因此您必须std_logic_vector在分配之前将它们转换为类型。在此处查看有关 VHDL 转换的简短教程。

  3. 在每次迭代后添加一些延迟wait

  4. 例如,使用 将输出值打印到模拟器控制台report,或者您甚至可以使用assert语句。


推荐阅读