mikrocontroller.net

Forum: FPGA, VHDL & Co. 'Lesenden' Zugriff protokollieren


Autor: Stefan A. (chaos)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!))

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ü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?

Autor: Stefan A. (chaos)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Morin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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:
if clk'event and clk='1' then
  if enable='1' then
    q <= d;
  else
    q <= 0;
  end if;
end if;

Hier könnte man sagen, dass die Schaltung das Eingangssignal d nur 
während enable='1' liest, nicht bei enable='0'.
if clk'event and clk='1' then
  q <= enable and d;
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.