Is this a VITAL bug?

P

Peter Spjuth

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
 
B

Brian Drummond

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.

Surely you can only check the "Hold High" time of a signal (presumably
after a clock edge) once the hold time has expired; i.e. once the signal
has become '0'?

I may be misunderstanding, but that's what I get from the limited
context above...

- Brian
 
P

peter.spjuth

Surely you can only check the "Hold High" time of a signal (presumably
after a clock edge) once the hold time has expired; i.e. once the signal
has become '0'?

I may be misunderstanding, but that's what I get from the limited
context above...

According to the VITAL source comments HoldHigh is:
"Absolute minimum time duration after
the transition of RefSignal for which
transitions of TestSignal are allowed
to proceed to the "1" state without
causing a hold violation."

This I interpret as a rising edge, and that
is how the vendor's libraries use it.

As you wrote, the name HoldHigh do imply that it is the
value being held that should be high, which
adds to the confusion.

/Peter
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,007
Latest member
obedient dusk

Latest Threads

Top