www.mikrocontroller.net

Forum: FPGA, VHDL & Co. fehlende Testbench Befehle


Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

für meine Testbench arbeite ich häufiger mit Dateien, um Steuersequenzen 
einzulesen oder Logdateien zu schreiben. Dabei habe ich folgende 
Funktionen immermal wieder vermisst und bin nun drauf und dran, mich dem 
ganzen selber zu widmen. Bevor ich mir die Mühe mache, wollte ich hier 
aber noch einmal fragen, ob ihr vielleicht schon eine fertige Lösung für 
die folgenden Problemchen kennt oder selbst erstellt habt.

 - Eine Zeit aus einer Datei auslesen. Idealer Weise kann man die Zeit 
in ps, ns, us oder ms angeben. Read(line, timestamp) funktioniert leider 
nicht.

 - eine Zeit (z.B. Timestamp) mit einer bestimmten Formatierung (ggf. 
gerundet) in eine Datei schreiben: mit den Befehlen write(Line, now); 
writeline(LogFile, Line); kann ich einen Timestamp in die Datei 
schreiben, dieser wird je nach Wert unterschiedlich dargestellt: 1ms 
wird als 1 ms dargestellt, der nächste Timestamp eine ps später wird 
dann aber zu 100...001 ps. Das macht das Lesen schwierig, da die Werte 
immer eine unterschliedliche Länge haben. Schön wäre eine Funktion, die 
eine Zeit auf ns, us oder ms runden kann und dann immer in einer 
konstanten Formatierung ausgibt (also nur ns oder nur us oder nur ms)



Außerdem bin ich auf der Suche nach einer Möglichkeit, die Simulation 
aus dem Quellcode zu stoppen. Bisher generiere ich einen Fehler und 
stell den Simulator entsprechend ein, aber
if (endfile(File) = TRUE) then
  assert (FALSE) report "EOF der Datei erreicht, Simulation erfolgreich beendet" severity failure; 
end if;
sieht einfach doof aus.

Wenn jemand ideen für mich hat, würd ich mich freuen.

Vielen Dank und viele Grüße
Martin

Autor: SeriousSam (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Um eine Simulation zu beenden musst du dafür sorgen, dass keine Events 
mehr erzeugt werden. Normalerweise kannst du einfach dafür sorgen, dass 
keine Clock mehr generiert wird und die Simulation wird stoppen.

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Martin schrieb:
> - Eine Zeit aus einer Datei auslesen. Idealer Weise kann man die Zeit
> in ps, ns, us oder ms angeben. Read(line, timestamp) funktioniert leider
> nicht.

Ich würde an die erste Stelle der Zeile eine Markierung machen und die 
Zeit als integer abspeichern.
# control file
T 5000
:
constant time_unit : time := 1 us;
:
read(line, mark);
case mark is

  when '#' =>
    null; -- ignore comments

  when 'T' =>
    read(line, space);
    read(line, time_value);
    wait for time_value * time_unit;
:
  when others =>
    null;

end case;

Die Interpretation kann dann in der gewählten Zeiteinheit oder durch 
einen zusätzlichen Parser erfolgen.

Duke

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
SeriousSam schrieb:
> Normalerweise kannst du einfach dafür sorgen, dass
> keine Clock mehr generiert wird und die Simulation wird stoppen.

Bei mir sieht das meist so aus:
:
constant frequency       : natural   := 50_000_000;
constant period          : time      := (1 sec) / frequency;

signal simulation_active : boolean   := true;

signal testbench_clock   : std_logic := '0';
:
testbench_clock <= not testbench_clock after period/2 when simulation_active;
:
process
begin
  :
  -- apply some test vectors
  :
  simulation_active <= false;
  wait;
end process;

Duke

Autor: Matthias G. (mgottke)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zum lesen der Control-Files habe ich mir inzwischen einige Funktionen 
und Prozeduren geschrieben um komfortabler Daten einlesen zu können. So 
werden dann z.B. Leerzeilen und Kommentare (beginnend mit --) 
herausgefiltert. Die Strings können beliebig lange sein und auch mit 
einem beliebig langem Zwischenraum. Bei Integer-zahlen (inkl. 
std_logic_vector) können diese nun ein beliebiges Format haben. Entweder 
als Integer-, Binär oder Hex-Codiert.

In der Testbench definiere ich dann Befehle. Diese verwende ich dann als 
erstes im Control-File einer Zeilen. Jeder Befehl hat dann im Folgenden 
einen
festen Satz an Daten. Um in Deinem Beispiel zu bleiben kann das dann 
z.B. So
aussehen:
   set_time   12 h   25 min   10 sec
oder sowas:
   wait   3.4 ns

Autor: NichtDerMartin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>if (endfile(File) = TRUE) then

VHDL braucht keine Klammerung ;O)

Autor: Georg A. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
BTW: pck_fio ist übrigens sehr praktisch, so eine Art printf.

http://www.easics.com/webtools/freesics

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

Bewertung
0 lesenswert
nicht lesenswert
> VHDL braucht keine Klammerung ;O)
Aber es ist einfacher, sich bei den Abfragen immer Klammern zu setzen, 
insbesondere, wenn man zwischen C und VHDL hin- und herwechselt.

Autor: René D. (Firma: www.dossmatik.de) (dose)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich weiss nicht ob es weiter hilft, jedoch es wäre zur Formatierung 
einen Versuch wert.

write(line, now, justified =>right, field => 10, unit => us);

Autor: NichtDerMartin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Aber es ist einfacher, sich bei den Abfragen immer Klammern zu setzen,
>insbesondere, wenn man zwischen C und VHDL hin- und herwechselt.

Ist aber bestimmt nicht der Fall ;-)
Überall Klammern, das nervt einfach nur.

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

Bewertung
0 lesenswert
nicht lesenswert
> Überall Klammern, das nervt einfach nur.
Immer_noch_besser_als_die_beliebten_Unterstriche  ;-)

Autor: René D. (Firma: www.dossmatik.de) (dose)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man habt ich Probleme.
Von der Lesbarkeit finde ich C auch ungünstig.
Dafür gibt es sogar ein Misra C, um unleserliche Konstrukte zu 
eliminieren.
Aber die obige Klammer schadet mal nicht.
Da finde ich die Typenumwandlungen in VHDL wesentlich unleserlicher.

Eigentlich wollte ich nur mal fragen, ob es eine Rückmeldung zu meinem 
Formatierungsbeitrag gibt?

Autor: FpgaX (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Immer_noch_besser_als_die_beliebten_Unterstriche

Nichtsdestotrotz sind Unterstriche meiner Meinung nach besser als:

ImmerNochBesserAlsDieBeliebtenUnterstricke


weil Modelsim bspw. folgendes daraus macht:
immernochbesseralsdiebeliebtenunterstricke

daverliertmanschonmaldenueberblicklothar ;-)

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.