为什么我的VHDL组合逻辑在一个进程中有延迟?

为什么我的VHDL组合逻辑在一个进程中有延迟?,vhdl,Vhdl,我正在为组合逻辑创建一个测试台,其中a、b、cin是被测试的实例化单元的输入。所有这些似乎都运转良好 然而,我在测试台过程中通过加法得到测试信号,这似乎被奇怪地延迟了。我的“等待”语句的持续时间无关紧要,我可以将单位从ps更改为ns,症状相同。似乎发生的事情是a和b设置正确,但直到a和b改变它们的值,测试才会改变。发生这种情况时,测试实际上会更新到a和b的以前的值。因此,首先,当a和b变为0时,test_s变为XXXXXXX。然后,当a变为1时,test_s变为0000000,而实际上它应该是0

我正在为组合逻辑创建一个测试台,其中a、b、cin是被测试的实例化单元的输入。所有这些似乎都运转良好

然而,我在测试台过程中通过加法得到测试信号,这似乎被奇怪地延迟了。我的“等待”语句的持续时间无关紧要,我可以将单位从ps更改为ns,症状相同。似乎发生的事情是a和b设置正确,但直到a和b改变它们的值,测试才会改变。发生这种情况时,测试实际上会更新到a和b的以前的值。因此,首先,当a和b变为0时,test_s变为XXXXXXX。然后,当a变为1时,test_s变为0000000,而实际上它应该是00000001

-- Instantiate the Unit Under Test (UUT)
   uut: FastCarry8 PORT MAP (
      a => a,
      b => b,
      cin => cinVec(0), 
      cout => cout
    );

   signal a : std_logic_vector(7 downto 0) := (others => '0');
   signal b : std_logic_vector(7 downto 0) := (others => '0');
   signal cinVec : std_logic_vector(1 downto 0);
   signal test_s : std_logic_vector(8 downto 0);

  -- Stimulus process
  stim_proc: process 
  begin     
  -- hold reset state
  wait for 10 ps;   

    carry_gen: for carry in 0 to 1 loop
        cinVec <= std_logic_vector(to_unsigned(carry, 2));

        b_gen: for j in 0 to 255 loop
            a_gen: for i in 0 to 255 loop

                a <= std_logic_vector(to_unsigned(i, 8));
                b <= std_logic_vector(to_unsigned(j, 8));
                test_s <= std_logic_vector(resize(unsigned(a), test_s'length) + 
                    unsigned(b) + unsigned(cinVec));

                wait for 5ps;

                ASSERT (test_s(8) = cout)
                    REPORT "Carry out failed for cin = 0!";

                wait for 5ps;

            end loop a_gen;
        end loop b_gen;
    end loop carry_gen;

——实例化被测单元(UUT)
uut:FastCarry8端口图(
a=>a,
b=>b,
cin=>cinVec(0),
cout=>cout
);
信号a:std_逻辑_向量(7到0):=(其他=>'0');
信号b:std_逻辑_向量(7到0):=(其他=>'0');
信号cinVec:std_逻辑_向量(1到0);
信号测试:标准逻辑向量(8到0);
--刺激过程
刺激程序:过程
开始
--保持复位状态
等待10秒;
进位生成:用于0到1循环中的进位

cinVec必须在分配a、b和分配测试之间等待,因为测试取决于这些信号值。。这是私下回答的

您需要在数字和物理单位之间留出一个空格。“5ps”而不是“5ps”。然后,语言定义需要在此处使用空格。有些工具可能接受它,但其他工具不会。