R
ralvarexo
Hi,
until now I thought that with concurrent statements order does not matter. Then I wanted to demonstrate delta delay effects with several versions of an RS-FF.
However, the simulator I use (Active HDL 8.3) produces different results for the following 3 versions:
concurrent_1:
qni <= not (s and qi);
qi <= not (r and qni);
concurrent_1:
qi <= not (r and qni);
qni <= not (s and qi);
concurrent_3_with_process:
process(s,qi)
begin
qni <= not (s and qi);
end process;
process(r, qni)
begin
qi <= not (r and qni);
end process;
I would have expected that all 3 versions fail when r and s are simultaneously change from 0 to 1.
However, only the 3rd fails as expected, the other 2 are simulated without any warning, but different result - order matters!
I was under the impression that a concurrent assignment is a short hand fora process with the same assigment AND all righthand signals in the sensitivity list. But according to the results it looks as if the assignments are evaluated/updated only once, i.e. no implied sensitivity list.
While all 3 variants will produce the same HW during synthesis they behave in a different way during simulation. What is even more disturbing is that the order of concurrent statemenst matters during simulation, IMO negating the concept of delta delays.
I am aware that the resulting HW will likely show some other behaviour (metastability) depending on the actual elements used, but this example was choosen to show the inner workings of the simulator.
Is this behaviour of the simulator in accordance with the standard?
Greetings,
Mike
until now I thought that with concurrent statements order does not matter. Then I wanted to demonstrate delta delay effects with several versions of an RS-FF.
However, the simulator I use (Active HDL 8.3) produces different results for the following 3 versions:
concurrent_1:
qni <= not (s and qi);
qi <= not (r and qni);
concurrent_1:
qi <= not (r and qni);
qni <= not (s and qi);
concurrent_3_with_process:
process(s,qi)
begin
qni <= not (s and qi);
end process;
process(r, qni)
begin
qi <= not (r and qni);
end process;
I would have expected that all 3 versions fail when r and s are simultaneously change from 0 to 1.
However, only the 3rd fails as expected, the other 2 are simulated without any warning, but different result - order matters!
I was under the impression that a concurrent assignment is a short hand fora process with the same assigment AND all righthand signals in the sensitivity list. But according to the results it looks as if the assignments are evaluated/updated only once, i.e. no implied sensitivity list.
While all 3 variants will produce the same HW during synthesis they behave in a different way during simulation. What is even more disturbing is that the order of concurrent statemenst matters during simulation, IMO negating the concept of delta delays.
I am aware that the resulting HW will likely show some other behaviour (metastability) depending on the actual elements used, but this example was choosen to show the inner workings of the simulator.
Is this behaviour of the simulator in accordance with the standard?
Greetings,
Mike