Signal Attribute Issue

C

Calvin

Guest
In the following codes:

if (A'delayed(Th)'event and rd1= '1') then
if (rd1'last_event > Th) then
if (BHE_n = '0') then
ASSERT (IO1'LAST_EVENT = 0 ns) or (IO1'LAST_EVENT > Th)
REPORT "DATA HOLD1 FROM ADDRESS CHANGE TIME VIOLATION"
SEVERITY Error;
end if;
end if;

Th = 0 ns, originally. I got error report when A and IO1 changed 1-2 ns
after rd1 = '1'.

To allow more time for A and IO1 to settle, I changed Th to 5 ns.
However I still got the same error report.

What was wrong ?

Thanks,

Calvin
 
Calvin wrote:
In the following codes:

if (A'delayed(Th)'event and rd1= '1') then
if (rd1'last_event > Th) then
if (BHE_n = '0') then
ASSERT (IO1'LAST_EVENT = 0 ns) or (IO1'LAST_EVENT > Th)
REPORT "DATA HOLD1 FROM ADDRESS CHANGE TIME VIOLATION"
SEVERITY Error;
end if;
end if;

Th = 0 ns, originally. I got error report when A and IO1 changed 1-2 ns
after rd1 = '1'.

To allow more time for A and IO1 to settle, I changed Th to 5 ns.
However I still got the same error report.

What was wrong ?
I'm not sure I understand the problem, but your report says "data hold1
from address change time violation". So I wonder if you could use a
simpler approach

process
begin
wait on A;
wait for Th;
if rd1 = '1' and BHE_n = '0' then
assert IO1'STABLE(Th)
report "DATA HOLD1 FROM ADDRESS CHANGE TIME VIOLATION";
end process;

I've probably misunderstood what you are doing, but I think the simplest
way to check a hold time is to wait until the hold time is ended and
then look backwards using 'STABLE,

regards
Alan
--
Alan Fitch
Doulos Ltd
http://www.doulos.com
 
Hi,

If You want to check for HOLD violation, I think that You should use
VitalSetupHoldCheck procedure (part of the IEEE.VITAL_timing package).
For more info on this checkout http://vhdl.org/fmf and see how it is
done.

Best regards,
Milos

Alan Fitch wrote:
Calvin wrote:
In the following codes:

if (A'delayed(Th)'event and rd1= '1') then
if (rd1'last_event > Th) then
if (BHE_n = '0') then
ASSERT (IO1'LAST_EVENT = 0 ns) or (IO1'LAST_EVENT > Th)
REPORT "DATA HOLD1 FROM ADDRESS CHANGE TIME VIOLATION"
SEVERITY Error;
end if;
end if;

Th = 0 ns, originally. I got error report when A and IO1 changed
1-2 ns
after rd1 = '1'.

To allow more time for A and IO1 to settle, I changed Th to 5 ns.
However I still got the same error report.

What was wrong ?


I'm not sure I understand the problem, but your report says "data
hold1
from address change time violation". So I wonder if you could use a
simpler approach

process
begin
wait on A;
wait for Th;
if rd1 = '1' and BHE_n = '0' then
assert IO1'STABLE(Th)
report "DATA HOLD1 FROM ADDRESS CHANGE TIME VIOLATION";
end process;

I've probably misunderstood what you are doing, but I think the
simplest
way to check a hold time is to wait until the hold time is ended and
then look backwards using 'STABLE,

regards
Alan
--
Alan Fitch
Doulos Ltd
http://www.doulos.com
 

Welcome to EDABoard.com

Sponsor

Back
Top