Zeit messen in Testbench

Gast #2177018
Lesenswert?
• ▲
▼
Hallo,

ich habe mich gerade gefragt, ob es möglich ist in einer Testbench die 
Zeit zwischen zwei Events (z.B. mittels signal'ACTIVE) zu messen. Ich 
habe ein UART-Modul und würde gerne automatisiert testen, ob und wie 
genau die gewünschte Baudrate eingehalten wird. Da ich bisher nichts 
dadrüber gefunden hab, versuch ich es mal hier :-)
Gast #2177192
Lesenswert?
• ▲
▼
Ich verwende dafür das folgende Konstrukt:
1
  time_check_data_setup: process
2
      variable change: time;
3
  begin
4
     wait until data'event;
5
     change := now;
6
     wait until falling_edge(enable);
7
   
8
     assert (now - change) >= t_ah_c
9
        report "Data setup time to short"
10
        severity error;
11
  end process;

Duke
Moderator (Firma: Titel) Persönliche Seite #2177201
Lesenswert?
• ▲
▼
Die aktuelle Simulationszeit ist im Wert NOW abgelegt.

Du kannst also einfach z.B. bei einer Flanke des Signals bei einer 
Flanke auf dem Signal S den Zeitwert S'last_event von NOW abziehen. 
Oder auch irgendwas mit dem S'active rumtricksen...

Eine Anwendung von NOW findest du dort im 
Beitrag "Re: [VHDL] Daten von ADC in BRAM speichern"

EDIT: Pech, Zweiter. Das kommt davon, wenn man das Fenster zu lange 
offen lässt... ;-)
Gast #2177315
Lesenswert?
• ▲
▼
So hab ich es jetzt übrings eingebaut:
1
  process
2
    variable change: time;
3
  begin
4
    wait until rising_edge(enableTimeCheck0);
5
    wait until uart0_tx'transaction = '1' or uart0_tx'transaction = '0';
6
    change := now;
7
    wait until uart0_tx'transaction = '1' or uart0_tx'transaction = '0';
8
    timeDiff0 <= now - change;
9
    wait;
10
  end process;

Den Wert timeDiff0 prüfe ich dann später auf Abweichungen von dem 
erwarteten Wert.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren