Poniżej znajduje się kod, który używam. Moje pytanie brzmi: dlaczego 3. spust wait until
w modelsim? Wyjście konsoli to po prostu GOT HERE
. Nigdy nie dociera do linii GOT HERE 2
. Myślę, że posiadanie tego samego wait until <SIGNAL> = 1
dwa razy z rzędu byłoby w porządku, ponieważ warunek jest prawdziwy zarówno razy. Nie dodałem tam zdarzenia, więc nie sądzę, że symulator będzie musiał zobaczyć przewagę. Czy ktoś może wyjaśnić to zachowanie?Poczekaj, aż <signal> = 1 nigdy nie będzie prawdziwe w symulacji VHDL.
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity example_wait_failure is
end example_wait_failure;
architecture behave of example_wait_failure is
signal r_CLK_TB : std_logic := '0';
begin
r_CLK_TB <= '1' after 20 ns, '0' after 40 ns, '1' after 60 ns;
p_TEST : process
begin
wait until r_CLK_TB = '1';
report "GOT HERE" severity note;
wait until r_CLK_TB = '1';
wait until r_CLK_TB = '1';
report "GOT HERE 2 " severity note;
end process p_TEST;
end behave;
Dziękuję za wyjaśnienie. Interesujące jest dla mnie, że oczekiwanie na r_CLK_TB jest częścią czekania do sprawdzenia r_CLK_TB = "1". Pozwól, że zadam jedno ostatnie pytanie, wtedy sprawdzę pudełko :) Podczas szukania pozytywnych krawędzi zegarka masz 2 opcje. Zakładając, że nie korzystasz z wait until rising_edge (r_CLK_TB) w normalnym kodzie RTL, którego używasz, poczekaj, aż r_CLK_TB'event i r_CLK_TB = "1". Czy mówisz mi, że poczekaj, aż r_CLK_TB'event będzie tutaj całkowicie bezużyteczny? – Russell
W 'wait do r_CLK_TB'event i r_CLK_TB = '1'',' r_CLK_TB'event' będzie trywialne TRUE, gdy 'r_CLK_TB'event i r_CLK_TB =' 1'' jest oceniany, ponieważ jest to zdarzenie, które uruchamia ocenę jak sugerujesz, więc wyrażenie można zredukować do 'r_CLK_TB = '1''. –
NEAT. Zamierzam zacząć pisać cały mój kod, po prostu, żeby zadzierać z ludźmi :) – Russell