I looked back at the Accellera LRM, and it defines dynamic processes as the ones created by join_any and join_none. It classifies processes created by fork..join as static processes. I suspect that at some point the text referred to statements inside fork..join, and dynamic processes. Then someone added join_any and join_none to the text about fork..join, and it became redundant with the statement about dynamic processes. The Accellera LRM is incorrect about processes created by fork..join being static processes anyway. If fork..join were only used in initial blocks and always blocks, and tasks could not be re-entered, then this could be true. Processes could be statically allocated for each statement in the fork..join, and started by the execution of the fork. However, fork..join can appear in a task, and a task can be re-entered. That requires as many processes for each statement as there can be concurrent calls to the task. Even in Verilog, the task could be called recursively from one of the subprocesses, creating an unbounded number of processes. A correct implementation of fork..join must be able to dynamically create processes, just like fork..join_none. Steven Sharp sharp@cadence.com -- This message has been scanned for viruses and dangerous content by MailScanner, and is believed to be clean.Received on Tue Aug 5 14:19:35 2008
This archive was generated by hypermail 2.1.8 : Tue Aug 05 2008 - 14:20:05 PDT