For correct behaviour of synchronous edge-triggered hardware, the progagation delay of D-types must be greater than their hold time.
Question : How can we ensuse this in a technology-neutral model that does not have any specific numerical delays ?
Answer: Hardware simulators commonly support the compute/commit or `signal' paradigm for non-blocking updates.
Two examples:
reg A, B;
always @(posedge ck) begin
A <= B;
B <= A;
end
| | // Separate example
reg zz;
reg [2:0] q;
always @(posedge ck) begin
zz <= ~zz;
if (zz) q <= q + 3'd1;
// Prev line sees old zz
end
|