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 :-)
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
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... ;-)
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.