Hi everybody,
I have a question regarding wait(SC_ZERO_TIME) statements.
I am working on a virtual platform for embedded systems with
several ISSs, interconnections and memory modules.
The memory thread has to be triggered on the positive edge of the
request signal and keep on serving subsequent requests if the
signal is kept high by the initiator after the first request.
The code below shows the memory module implementation.
-----------------------------------------------------------------------------
void memory::working()
{
while (true)
{
wait(SC_ZERO_TIME);
wait(SC_ZERO_TIME);
if(!request.read())
wait(request.posedge_event());
data = IO_data.read();
/* ... */
}
}
-----------------------------------------------------------------------------
My problem is that without the 2 wait(SC_ZERO_TIME) statements,
a quick fix made some time ago, the data read is wrong (not current cycle).
Since I checked that every master is filling first the data field then
raising the request signal, I don't understand the need of two delta
cycles to avoid reading the old value.
Any idea/suggestion?
Ciao,
Daniele