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