Hallo, mal eine etwas ungewöhliche Frage: Gibt es in VHDL eine Möglichkeit (Funktion, Designbeispiel, Workaround) die lesend auf ein Signal zugreifenden Prozesse zu überwachen? Beispiel: Ein SRAM Modell zur Nutzung in einer Testbench. Während des Lesezugriffs ist die Datenleitung kurz 'invalid'. Ein Zugriff zu diesem Zeitpunkt brächte dem zu angeschlossenen Schaltkreis ungültige Daten. Wie stelle ich fest, das mein DUT nun doch (/nicht) während dieser Zeit gelesen hat? Danke schonmal für eure kreativen Vorschläge... (Das DUT wird als Black-Box angenommen. Sollte es keine VHDL-Möglichkeit geben, dann vielleicht mit einem Simulatorscript? (kein ModelSim, sondern NCSim!))
Üblicherweise hat so ein SRAM aber Steuersignale (CE# und OE#), und die
haben einen zeitlichen Bezug zur Gültigkeit der Daten. Ist da nichts zu
machen?
Das ist dein/ein Problem:
>Das DUT wird als Black-Box angenommen...
Wie willst du etwas testen, von dem du nicht weißt, was darin vorgeht?
Du weißt dann ja nicht einmal, welches Signal intern möglicherweise die
fehlerhaften Daten übernehmen würde.
Willst du von der TB aus auf interne Signale des DUT zuzugreifen, ohne
diese über die entity zu schleusen?
Lothar Miller wrote: > Üblicherweise hat so ein SRAM aber Steuersignale (CE# und OE#) Der Sram hat (eingehende) Steuersignale, aber wie das bei der Überprüfung der Lesezugriffe helfen soll weiß ich nicht. > Wie willst du etwas testen, von dem du nicht weißt, was darin vorgeht? > Du weißt dann ja nicht einmal, welches Signal intern möglicherweise die > fehlerhaften Daten übernehmen würde. Nunja, wissen schon. Black_Box meint mehr sowas wie 'nicht änderbar' und nicht unbedingt 'nicht einsehbar'. Ich hab zwar das Wissen über den inneren Aufbau, ich will im DUT aber nichts verändern (keine Konstrukte nur zu Debugging Zwecken). > > Willst du von der TB aus auf interne Signale des DUT zuzugreifen, ohne > diese über die entity zu schleusen? Nunja, ich will nicht zugreifen im Sinne von schreiben/lesen. Ich will nur Wissen DASS da jemand lesend zugreift. Soweit ich bisher rausgefunden habe ist sowas nicht möglich. Gegebenenfalls könnte man ein eigenes Signal schreiben, welches nicht nur schreibende (wie std_logic), sondern auch lesende Prozesse in eine Art Queue speichert. Mein Workaround ist momentan: Ich schreibe im fraglichen Zeitraum 'X' auf das Signal. Sollte jetzt jemand lesend zugreifen, muß ich hoffen dass das im DUT auffällt (interne assertions) und die Simulation stoppt.
> Mein Workaround ist momentan: Ich schreibe im fraglichen Zeitraum 'X' > auf das Signal. Sollte jetzt jemand lesend zugreifen, muß ich hoffen > dass das im DUT auffällt (interne assertions) und die Simulation stoppt. Das ist meiner Meinung nach mehr als nur ein Workaround. Bei kontinuierlichen Signalen ist der Unterschied zwischen "lesen" und "nicht lesen" nicht so klar. Einfaches Beispiel:
1 | if clk'event and clk='1' then |
2 | if enable='1' then |
3 | q <= d; |
4 | else
|
5 | q <= 0; |
6 | end if; |
7 | end if; |
Hier könnte man sagen, dass die Schaltung das Eingangssignal d nur während enable='1' liest, nicht bei enable='0'.
1 | if clk'event and clk='1' then |
2 | q <= enable and d; |
3 | end if; |
Hier wird rein formal das Eingangssignal d immer "gelesen", die Schaltung macht aber genau dasselbe wie die oben. Ich würde genau bei deiner Lösung bleiben: Schreib X auf die Signale, die nicht "gelesen" werden sollen. Wenn sie es doch werden, breitet sich das X durch die Schaltung aus (*), und die wirst es irgendwann an den Ausgängen wiederfinden, bzw. an internen Signalen welche du im Simulator verfolgst. (*) Tatsächlich kann es je nach Eingabemuster vorkommen, dass die Xe doch wieder "verschluckt" werden. In diesem Fall kannst du im Ganzen das Signal als "nicht gelesen" werten. Bei anderen Mustern wird es dann nicht "verschluckt". Das ist aber ein grundlegendes Problem an Tests bzw. Testbenches: Du weißt immer nur für bestimmte Eingabemuster was passiert, nie für alle.
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.