P
Peter Spjuth
Guest
Trying to track down a hold violation reported during simulation
in Modelsim, I came to the conclusion that the hold requirements
for raising and falling edge has been mixed up somehow.
Tracing it through the Vendor libraries to the VITAL source I
see this in timing_b.vhd:
CheckInfo.State := To_X01(TestSignal);
CASE CheckInfo.State IS
WHEN '0' => CheckInfo.ExpTime := HoldHigh;
WHEN '1' => CheckInfo.ExpTime := HoldLow;
WHEN 'X' => CheckInfo.ExpTime :=
Maximum(HoldHigh,HoldLow);
END CASE;
As I understand it from comments, and also how it is connected
in libraries, HoldHigh is for rising edge. But in the above source
HoldHigh
is used at '0' i.e. at falling edge.
This would explain the mixup, but my understanding of VITAL details
is too small to be sure that this is actually a VITAL bug.
Anyone with deeper knowledge who can comment?
/Peter
in Modelsim, I came to the conclusion that the hold requirements
for raising and falling edge has been mixed up somehow.
Tracing it through the Vendor libraries to the VITAL source I
see this in timing_b.vhd:
CheckInfo.State := To_X01(TestSignal);
CASE CheckInfo.State IS
WHEN '0' => CheckInfo.ExpTime := HoldHigh;
WHEN '1' => CheckInfo.ExpTime := HoldLow;
WHEN 'X' => CheckInfo.ExpTime :=
Maximum(HoldHigh,HoldLow);
END CASE;
As I understand it from comments, and also how it is connected
in libraries, HoldHigh is for rising edge. But in the above source
HoldHigh
is used at '0' i.e. at falling edge.
This would explain the mixup, but my understanding of VITAL details
is too small to be sure that this is actually a VITAL bug.
Anyone with deeper knowledge who can comment?
/Peter