[Author Prev][Author Next][Thread Prev][Thread Next][Author 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

Attachment: RWSync.tar
Description: Unix tar archive