fehlende Testbench Befehle

Gast #1583608
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
1
if (endfile(File) = TRUE) then
2
  assert (FALSE) report "EOF der Datei erreicht, Simulation erfolgreich beendet" severity failure; 
3
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
Gast #1583625
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.
Gast #1583655
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.
1
# control file
2
T 5000
1
:
2
constant time_unit : time := 1 us;
3
:
4
read(line, mark);
5
case mark is
6

7
  when '#' =>
8
    null; -- ignore comments
9

10
  when 'T' =>
11
    read(line, space);
12
    read(line, time_value);
13
    wait for time_value * time_unit;
14
:
15
  when others =>
16
    null;
17

18
end case;

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

Duke
Gast #1583667
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:
1
:
2
constant frequency       : natural   := 50_000_000;
3
constant period          : time      := (1 sec) / frequency;
4

5
signal simulation_active : boolean   := true;
6

7
signal testbench_clock   : std_logic := '0';
8
:
9
testbench_clock <= not testbench_clock after period/2 when simulation_active;
10
:
11
process
12
begin
13
  :
14
  -- apply some test vectors
15
  :
16
  simulation_active <= false;
17
  wait;
18
end process;

Duke
#1583705
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
Gast #1584950
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.
(Firma: www.dossmatik.de) #1585042
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?
Gast #1585829
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

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