[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
gEDA: Incorrect cbReadWriteSynch scheduling in Icarus
I believe cbReadWriteSynch scheduling in Icarus is not as
intended by the Verilog standard. (However, I base myself
on Sutherlands's PLI handbook for this claim - I didn't
consult the standard itself).
The attached example shows that cbReadWriteSync callbacks
can occur interleaved with non-blocking assignment updates.
In contrast, I believe that a cbReadWriteSync callback should
either see all non-blocking updates, or none. Basically
there should be a separate queue for cbReadWriteSync callbacks
and for non-blocking assignment updates.
My underlying problem is that I need to know after how
many (re)scheduled cbReadWriteSync callbacks I am guaranteed
to see all non-blocking updates. In my example, this
happens eventually, but I fear that this may be arbitrary
behavior; in other words, that potentially I would *never*
see the non-blocking updates while rescheduling cbReadWriteSync
callbacks.
The example can be run as follows:
> iverilog-vpi RWSync.c RWSync_table.c
> iverilog RWSync.v
> vvp -m ./RWSync.vpi a.out
It shows which output I believe to be in error.
Regards, Jan
--
Jan Decaluwe - Resources bvba
Losbergenlaan 16, B-3010 Leuven, Belgium
mailto:jan@jandecaluwe.com
http://jandecaluwe.com
RWSync.tar