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
Attachment:
RWSync.tar
Description: Unix tar archive