Hi Dave and other experts,
While I was going through your paper “The missing link…” which gave some useful insights on methods of connecting the DUT and the testbench, I have the following questions. I am sure, many users would be looking for clarification on this aspects.
You mentioned:
A clocking block can address these race conditions even further by sampling on driving signals some number of units away from the clock edge
I am not sure I have understood this. Are you saying the it is due to “non-zero skews”. I have two follow-up questions on this. .
I read the following from LRM,
It is important to understand that simply sampling input signals (or setting nonzero skews on
clocking block inputs) does not eliminate the potential for races. Proper input sampling only addresses a
single clocking block. With multiple clocks, the arbitrary order in which overlapping or simultaneous clocks
are processed is still a potential source for races. The program construct addresses this issue by scheduling
its execution in the Reactive region, after all design events have been processed, including clocks driven by
nonblocking assignments.
and the following,
Together with clocking blocks, the program construct provides for race-free interaction between
the design and the testbench and enables cycle- and transaction-level abstractions
makes me think that we need program blocks or am I missing something ?
also in your paper you mentioned that
Using @ (posedge clk) or any other event will introduce race conditions. Can you please explain why this happens ?
Also Do we need a non-zero skew if the clocking blocks have to provide race-free interactions between DUT and Testbench. If yes, what is recommended way of adding a non-zero skew or #1 step is enough, when do you use what. It is quite confusing. Please explain.
I have another question (may be not related), Do we need “modports at all”. I read from LRM as “modports are used to restrict access…”. But in one of the forum questions, I think one user gives an example where this is not the case and Modport just mentions the direction with respect to Interface. Are there any situations where we may (or must) need modports?
To conclude if the experts could write a paper on these aspects if would help the verification community a lot.
Regards,
Madhu