Почему моя комбинационная логика VHDL задерживается внутри процесса? - PullRequest
0 голосов
/ 04 марта 2011

Я создаю тестовую среду для комбинационной логики, где a, b, cin - входные данные для тестируемого экземпляра.Все это работает нормально.

Тем не менее, я получаю сигнал test_s путем добавления в процесс тестирования, и это кажется странно задержанным.Не имеет значения продолжительность моих операторов ожидания, я могу изменить единицы измерения от ps до ns, и симптомы будут такими же.Кажется, что происходит то, что a и b установлены правильно, но test_s не изменяется, пока a и b не изменят свои значения.Когда это происходит, test_s фактически обновляется до предыдущих значений a и b.Поэтому сначала, когда a и b становятся 0, test_s становится XXXXXXX.Затем, когда a становится 1, test_s становится 0000000, когда оно должно быть фактически 00000001.

enter image description here

enter image description here

-- 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;

1 Ответ

2 голосов
/ 04 марта 2011

Пришлось подождать между назначением a, b и назначением test_s, так как test_s зависит от этих значений сигнала ... это было дано в частном порядке

...