Simulation und weiterführende Simulationstechniken

Transcription

Simulation und weiterführende Simulationstechniken
Outline
Einführung
Workflow
GHDL
Modelsim und embeded Skripting
Simulation und weiterführende
Simulationstechniken
Marc Reichenbach
Informatik 3 / Rechnerarchitektur
Universität Erlangen Nürnberg
05/14
1 / 48
Outline
Einführung
Workflow
GHDL
Modelsim und embeded Skripting
Gliederung
Einführung
Allgemeiner Simulations-Workflow
Simulationstools - GHDL
Modelsim und embeded Skripting
2 / 48
Outline
Einführung
Workflow
GHDL
Modelsim und embeded Skripting
Gründe für die Simulation
Simulation spielt eine entscheidende Rolle in der HW-Entwicklung,
weil:
• Synthesen sehr lange dauern können
• realer Test sehr teuer sein kann
• Fehlersuche bei realen Tests sehr schwer ist
• sehr viele automatische Abbildungen beim realen Test
vorgenommen werden
• Randfälle betrachtet werden können
• es bessere Debug-Möglichkeiten gibt
3 / 48
Outline
Einführung
Workflow
GHDL
Modelsim und embeded Skripting
Simulationsmarkt
• Simulationsmarkt angetrieben von Cadence, Synopsys und
Mentor
• auch Tools unter GNU verfügbar, erreichen aber bei Weitem
nicht die Funktionalität
• Testbenchsimulation mit automatisierter Auswertung
• zusätzliche Funktionen: TCL (embedded Skripting),
Datenfluss, Schematic, virtuelle Signale, ...
• Sprachgebrauch: Simulation/Verifikation
• Wann ist eine Simulation vollständig?
4 / 48
Outline
Einführung
Workflow
GHDL
Modelsim und embeded Skripting
Simulationsmarkt Produktübersicht
• Mentor Graphics: Modelsim SE, PE, DE / Questasim
• Cadence: NCsim
• Synopsys: VCS/DVE
• GNU: GHDL, GTKwave
• GNU: icarus (Verilog)
5 / 48
Outline
Einführung
Workflow
GHDL
Modelsim und embeded Skripting
Übersicht Simulations-Workflow
Allgemein besteht die Simulation aus folgenden Schritten:
• Kompilierung
• Elaborierung
• Initialisierung
• Simulation
6 / 48
Outline
Einführung
Workflow
GHDL
Modelsim und embeded Skripting
Übersicht Simulations-Workflow - Kompilierung
• einbinden vorhandener Bibliotheken
• kompilieren in einer Bibliothek zwingend
• logische Namen der Bibliotheken vs. physikalische Namen
• Generierung von Debugginginformationen
• Reihenfolge der Dateien beachten
• Vorgang wird auch als Analyse bezeichnet
7 / 48
Outline
Einführung
Workflow
GHDL
Modelsim und embeded Skripting
Übersicht Simulations-Workflow - Elaborierung
• hierarchische Expansion des Entwurfs
• rekursives Durchlaufen der Testbench und Auflösen der
Komponentenreferenzen
• so lange Ersetzung, bis nur noch Liste von Prozessen existiert
• Struktur-, Verhaltens-, und Datenflussbeschreibungen
• Simulationsmodell = Verbund von Prozessen gekoppelt über
Signale
• Annotieren der Generics
• Reservieren von Speicherplatz für das Modell
• Vorgang vergleichbar mit Linker in SW
8 / 48
Outline
Einführung
Workflow
GHDL
Modelsim und embeded Skripting
Übersicht Simulations-Workflow - Initialisierung
• Initialisierung von Signalen auf Standardwerte
• std_logic bspw. ’U’, Bit?
• falls gegeben, Initialisierung auf Benutzerwerte (ACHTUNG:
kritisch bei Synthese)
• jeder Prozess wird einmal durchlaufen
• komplett oder
• bis zur ersten wait-Anweisung
9 / 48
Outline
Einführung
Workflow
GHDL
Modelsim und embeded Skripting
Übersicht Simulations-Workflow - Ausführung
• testen des Schaltungsmodells
• Generierung der Ausgaben (Waveform)
• zeitintensiver Vorgang
• ereignisgesteuertes Simulationskonzept
10 / 48
Outline
Einführung
Workflow
GHDL
Modelsim und embeded Skripting
Ereignisgesteuertes Simulationskonzept - Begriffe
• jedes Signal besitzt eine Ereignisliste
• darin enthalten sind Transaktionen
• Transaktionen geben an, zu welchen Zeitpunkt sich ein
Signal ändert
• Transaktionen können in der Ereignisliste überschrieben
werden
• ein Ereignis an einem Signal tritt ein, wenn eine Transaktion
ausgeführt wird
11 / 48
Outline
Einführung
Workflow
GHDL
Modelsim und embeded Skripting
Ereignisgesteuertes Simulation
• keine kontinuierliche Simulation, nur an bestimmten diskreten
Zeitpunkten
• Prozess nur dann aktiv, wenn ein Ereignis (Signalwechsel)
eintritt
• Einsprungspunkt: Sensitivitätsliste bzw. wait-Anweisung
• Aufteilung eines Simulationszeitpunktes in mehrere
Delta-Zyklen
• Aufteilung eines Delta-Zyklus in Signalzuweisung und
Prozessausführung
12 / 48
Outline
Einführung
Workflow
GHDL
Modelsim und embeded Skripting
Ereignisgesteuertes Simulation - Signalzuweisung
• da Nebenläufigkeit simuliert werden soll, werden zu einem
bestimmten Zeitpunkt zuerst die Signale zugewiesen
(Signalzuweisung)
• dann werden alle Prozesse (seriell) abgearbeitet
(Prozessausführung)
• Änderungen an einem Signal innerhalb eines Prozesses werden
nicht sofort durchgeführt, sondern in der Ereignisliste als
Transaktion vermerkt
• ist die vermerkte Zeit herangenaht, wird das Signal aktualisiert
und die betreffenden Prozesse erneut ausgeführt
13 / 48
Outline
Einführung
Workflow
GHDL
Modelsim und embeded Skripting
Ereignisgesteuertes Simulation - Delta-Zyklen
Was passiert bei folgedem Datenfluss-Code, wenn sich A von 1 auf
0 zum Zeitpunkt t ändert?
C <= A AND B ;
E <= C AND D ;
• es werden bei der Simulation 2 Prozesse erstellt, welche
sensitiv auf die Eingaben reagieren.
• es wird Prozess 1 ausgeführt, weil sich A von 1 auf 0 geändert
hat und somit C neu berechnet.
• Was wird in die Ereignisliste als Transaktion eingetragen?
14 / 48
Outline
Einführung
Workflow
GHDL
Modelsim und embeded Skripting
Ereignisgesteuertes Simulation - Delta-Zyklen
Was passiert bei folgedem Datenfluss-Code, wenn sich A von 1 auf
0 zum Zeitpunkt t ändert?
C <= A AND B ;
E <= C AND D ;
• Zeitpunkt des Updates ist immer noch t - jedoch infinitesimal
später
• dies nennt man einen Delta-Zyklus, keine Zeit im Modell ist
vergangen
• nachdem alle Prozesse ihre Eingaben gelesen haben und ihre
gewünschten Änderungen in die Ereignisliste vermerkt haben,
wird zum nächsten Delta-Zyklus gesprungen
• jetzt zum Zeitpunkt t+1δ, wird C neu zugewiesen und der 2.
Prozess des obigen Beispiels wird angestoßen um E neu zu
berechnen
15 / 48
Outline
Einführung
Workflow
GHDL
Modelsim und embeded Skripting
Ereignisgesteuertes Simulation - Delta-Zyklen
• Delta-Zyklen werden so oft zu einer Simulationszeit
hinzugefügt, wie es Signaländerung im Zeitschritt t gibt
• Gibt es keine Signaländerungen mehr, wird ein echter
Zeitschritt bis zum nächsten Ereignis getätigt
• Delta-Zyklen werden benötigt um Schaltungen, welche ohne
Verzögerungszeit modelliert sind, sauber auflösen und
simulieren zu können
16 / 48
Outline
Einführung
Workflow
GHDL
Modelsim und embeded Skripting
Delta-Zyklen - Ausgabe im Simulator
17 / 48
Outline
Einführung
Workflow
GHDL
Modelsim und embeded Skripting
Delta-Zyklen - Ausgabe im Simulator
18 / 48
Outline
Einführung
Workflow
GHDL
Modelsim und embeded Skripting
GHDL + GTKwave
• GHDL: Ada Implementierung, der Simulator
• GTKwave: Die GUI zum Anzeigen der Simulationsergebnisse
• nur Unterstützung der Grundfunktionalität, z.B. keine
Recordunterstützung, Probleme beim rekursiven Auflösen von
Strukturen
• Kompilierende Simulation
19 / 48
Outline
Einführung
Workflow
GHDL
Modelsim und embeded Skripting
GHDL + GTKwave Workflow
• analyze der VHDL Dateien (compile & object files)
$ ghdl -a datei.vhd
• Elaboration (design hierachy & simulator code & executable)
$ ghdl -e toplevel_unit
• Ausführung (simulation)
$ ghdl -r toplevel_unit --vcd=results.vcd
$ ./toplevel_unit --vcd=results.vcd
• anschauen und auswerten
$ gtkwave results.vcd
20 / 48
Outline
Einführung
Workflow
GHDL
Modelsim und embeded Skripting
Besonderheiten
• IEEE Bibliotheken müssen bekannt gemacht werden
$ ghdl --ieee=synopsys -a datei.vhd
• Arbeitsbibliothek angeben
$ ghdl --work=work -a datei.vhd
• VCD Dateien werden schnell sehr groß
$ ghdl -r toplevel_unit --vcdgz=results.vcd.gz
• Simulationen laufen unendlich lange
doppeltes wait oder
CTRL+C oder
$ ghdl -r toplevel_unit --vcdgz=results.vcd.gz --stop-time=value
21 / 48
Outline
Einführung
Workflow
GHDL
Modelsim und embeded Skripting
Exkurs VCD 1
$date
Mon May 30 17:00:31 2011
$end
$version
GHDL v0
$end
$timescale
1 fs
$end
$var reg 1 ! clk $end
$var reg 1 " reset $end
$var reg 58 # x[57:0] $end
...
$comment xcos is not handled $end
...
22 / 48
Outline
Einführung
Workflow
GHDL
Modelsim und embeded Skripting
Exkurs VCD 2
...
#4900000000
0!
0*
0F
0I
0S
0W
0[
0a
0g
#4950000000
1!
b0000000000000000001111111111111111111111111111101010101010
1*
...
23 / 48
Outline
Einführung
Workflow
GHDL
Modelsim und embeded Skripting
Modelsim Einführung
• Kommerzieller Simulator, viele Funktionen
• Einsatz in Lehre, Forschung und Wirtschaft aufgrund einfachen
Bedienkonzepts
• viele verschiedene Versionen
• Einsatz für Verifikation möglich
• Unterstützung vieler verschiedener Sprachen (VHDL, Verilog,
SystemC, SystemVerilog, PSL)
• Schematic Editor, Dataflow Diagram, Code Coverage,
Functional Converage
• Bedienung über GUI oder Kommandozeile
24 / 48
Outline
Einführung
Workflow
GHDL
Modelsim und embeded Skripting
Modelsim GUI (1)
• Kompilieren der Quellen
• Compile -> Compile
• Bibliothek auswählen
• Dateien auswählen
• Compile
• Done
25 / 48
Outline
Einführung
Workflow
GHDL
Modelsim und embeded Skripting
Modelsim GUI (2)
• Simulation starten
• Heraussuchen der TB-Entity unter Library oder
• Simulate -> Start Simulation (mehr Optionen)
26 / 48
Outline
Einführung
Workflow
GHDL
Modelsim und embeded Skripting
Modelsim GUI (3)
• Interessante Signale auswählen und simulieren
• Objects -> to Wave -> Selected Signals
• Simulate -> Run -> Run 100
27 / 48
Outline
Einführung
Workflow
GHDL
Modelsim und embeded Skripting
Modelsim GUI - Demonstration
28 / 48
Outline
Einführung
Workflow
GHDL
Modelsim und embeded Skripting
Modelsim CLI (1)
• Modelsim vollkommen über Kommandozeile zu bedienen
• zu jedem GUI Befehl gibt es (mindestens) einen Befehl auf der
Konsole
• Befehle können zu Batch-Dateien zusammengefasst werden
• vollkommen automatisierter Ablauf von Simulationen
• Zeitersparnis und automatisiertes Auswerten
• dazu vollständige Unterstützung von TCL (embedded
Skripting)
29 / 48
Outline
Einführung
Workflow
GHDL
Modelsim und embeded Skripting
Modelsim CLI (2)
• kompilieren der Quellen
$ vcom -work library design.vhd
• Simulation starten
$ vsim library.entity
• -novopt für weglassen der Optimierung
• Singnale ins Waveform übernehmen
$ add wave sim:/pfad/zum/signal
• -radix radix_type zum wechseln der Darstellung (bsp.
unsigned)
• -label Name zum ändern des Namens
• -divider Name zur grafischen Abtrennung
• -color Name zur Farbgebung
30 / 48
Outline
Einführung
Workflow
GHDL
Modelsim und embeded Skripting
Modelsim CLI (3)
• Simulation durchführen
$ run Zeit Einheit [Zeit Einheit] ...
• Simulieren ohne Testbench (Anlegen von Testwerten)
$ force signal value time
• relative Zeit (Standard) und absolute Zeit (@)
• -freeze, -drive, -deposit Art der Anlegung des Signals
• -repeat beispielsweise zur Taktgenerierung
• Ausführen einer Batch-Datei
$ do /pfad/zur/datei.do
• Werte der Simulation abfragen
$ examine signalname
• -time Abfrage an einem bestimmten Zeitpunkt
31 / 48
Outline
Einführung
Workflow
GHDL
Modelsim und embeded Skripting
Modelsim CLI/TCL
Was passiert wenn man signal1 bis signal20 zum waveform
hinzufügen will?
• ein Skript mit 20x add wave schreiben
• benutzen von TCL
TCL ist eine Skriptsprache, mit der sich die Funktionalität von
Tools, welche TCL unterstützen, beliebig erweitern lässt. Beispiele:
• mit einer for-Schleife viele Signale hinzufügen
• Ergebnisse abgreifen und in eine Ausgabedatei schreiben
• erstellen neuer GUI-Elemente
• Verbindung über Sockets zu anderen Programmen
• Wenn ein bestimmtes Signal anliegt, eine andere Eingabe
forcen
• ...
32 / 48
Outline
Einführung
Workflow
GHDL
Modelsim und embeded Skripting
Einführung TCL
• Tool Command Language vom John Ousterhout
• Open Source-Skriptsprache
• Entstanden aus der Not, als jedes Tool seine eigene
Skriptsprache hatte
• als Bibliothek eingebettet in ein beliebiges Programm
• Unterstützung in vielen Tools
• Mentor Modelsim
• Xilinx ISE/Vivado
• Synopsys DC
• Synopsys Synplify
• Cadence Encounter
33 / 48
Outline
Einführung
Workflow
GHDL
Modelsim und embeded Skripting
Zentrale Notation TCL
• Prefix Notation / polnische Notation
• {} für Blöcke
• [] zur Auswertung von Ausdrücken
• # Kommentarzeichen
• "" für Strings
34 / 48
Outline
Einführung
Workflow
GHDL
Modelsim und embeded Skripting
Zentrale Eingenschaften TCL
• dynamische Typen "everthing is a string"
• automatische Speicherverwaltung
• selbstmodifizierender Code möglich
• UTF-8 kompatibel
• Vereinigung verschiedener Programmierparadigmen
35 / 48
Outline
Einführung
Workflow
GHDL
Modelsim und embeded Skripting
TCL Codeschnipsel (1)
• Ausgabe: puts channelid string
% puts "VHDL rulez!"
• Eingabe: gets channelid variable
% gets stdin a
• Arithmetische Ausdrücke
% expr "6+4/2"
• Zuweisungen von Variablen
% set a "VHDL rulez!"
• Referenzieren von Variablen
% puts $a
36 / 48
Outline
Einführung
Workflow
GHDL
Modelsim und embeded Skripting
TCL Codeschnipsel (2)
• Evaluieren von Ausdrücken
% set a "puts \"VHDL rulez!\""; eval $a
• Kombination von Ausdrücken
% set a [expr "3+4"]
• Beispiel funktionale Programmierung (wiki.tcl.tk)
% proc mean L {expr double([join $L +]) / [llength $L]} ;
37 / 48
Outline
Einführung
Workflow
GHDL
Modelsim und embeded Skripting
TCL Kontrollstrukturen (1)
• Prozeduren
% proc name arguments body
Beispiel www.tcl.tk
proc sum {arg1 arg2} {
set x [expr {$arg1 + $arg2}];
return $x
}
38 / 48
Outline
Einführung
Workflow
GHDL
Modelsim und embeded Skripting
TCL Kontrollstrukturen (2)
• Verzweigungen - IF
% if expr1 then body1 elseif expr2 then body2 elseif ... else bodyN
Beispiel http://tmml.sourceforge.net/doc/tcl/if.html
if {$vbl == 1} {
puts "vbl
} elseif {$vbl ==
puts "vbl
} else {
puts "vbl
}
is one"
2} {
is two"
is not one or two"
39 / 48
Outline
Einführung
Workflow
GHDL
Modelsim und embeded Skripting
TCL Kontrollstrukturen (3)
• Schleifen - for Schleife
% for start test next body
Beispiel http://www.tcl.tk/man/tcl8.4/TclCmd/for.htm
for {set x 0} {$x<10} {incr x} {
puts "x is $x"
}
40 / 48
Outline
Einführung
Workflow
GHDL
Modelsim und embeded Skripting
TCL Kontrollstrukturen (4)
• Schleifen - while Schleife
% while test body
Beispiel http://www.tcl.tk/man/tcl/tutorial/Tcl9.html
while {$x < 5} {
puts "x is $x"
set x [expr {$x + 1}]
}
41 / 48
Outline
Einführung
Workflow
GHDL
Modelsim und embeded Skripting
Einbettung und Erweiterung TCL
• eigene Programme durch die Möglichkeit des
Benutzer-Skriptings erweitern
• Einbettung von TCL in eigene (C) Programme möglich durch
Bibliothek
• Instanzierung eines TCL Interpreters, welcher einen "TCL
String" oder externe Datei ausführt
• Erweiterung von TCL durch weitere Kommandos
• neue Kommandos verweisen auf eine Funktion im eigenen
Programm
• Parameterübergabe an Funktion und Datenrückgabe an den
Interpreter möglich
42 / 48
Outline
Einführung
Workflow
GHDL
Modelsim und embeded Skripting
Demonstration
Beispieldemonstration (Kopplung Modelsim CLI mit TCL) zeigt:
• Kompilieren der Quellen
• Starten der Simulation
• wichtige Signale im Waveform anzeigen
• forcen der Eingaben clk, reset, x, y, z
• Ausführen der Simulation und herausschreiben des Cosinus in
jeder Iteration
• Berechnung des Gesamtfehlers zwischen Cordic und Software
43 / 48
Outline
Einführung
Workflow
GHDL
Modelsim und embeded Skripting
Erweiterungen
Erweiterungen denkbar und Umsetzbar mit TCL:
• Randomisierte Startwerte
• Festlegen eines Schwellfehlers und Ausgabe Works/Failes
• TK Elemente -> beispielsweise ein Button in Modelsim
hinzufügen welches diese Simulation dann ausführt
• Ergebnisse über einen Socket an eine andere Anwendung
senden
• Verifikationen, Tcl3D, Fehlerinjektionen, ...
44 / 48
Outline
Einführung
Workflow
GHDL
Modelsim und embeded Skripting
Spezifische Modelsimfeatures (1)
Virtuelle Signale:
• manchmal will man die Summe zweier Signale betrachten ...
oder
• es gibt eine serielle Arithmetik, wo man mehrere Bits an
verschiedenen Stellen zusammenfassen will ... oder
• man hat mehrere Bits, die zusammen einen Opcode ergeben ...
• dafür gibt es in Modelsim virtuelle Signale
$ virtual signal {expression string} name
$ virtual signal {sim:/tb/a & sim:/tb/b} sigconcat
$ virtual signal {sim:/tb/a + sim:/tb/b} sigadd
• auf virtuellen Signalen kann dann genauso gearbeitet werden
wie auf normalen Signalen
45 / 48
Outline
Einführung
Workflow
GHDL
Modelsim und embeded Skripting
Spezifische Modelsimfeatures (2)
Virtuelle Signale Beispiel:
46 / 48
Outline
Einführung
Workflow
GHDL
Modelsim und embeded Skripting
Spezifische Modelsimfeatures (3)
Weiterführende Features:
• Signalspy
• viele GUI Einstellmöglichkeiten
• Gruppieren von Signalen
• Farben, Radix, ...
• Memory Read/Write
• mem save
• mem load
• viele Frontends
• wave und list
• dataflow und schematic
• debugging
• Verifikation
47 / 48
Outline
Einführung
Workflow
GHDL
Modelsim und embeded Skripting
Zusammenspiel zwischen ISE und Modelsim
• ISE besitzt internen Simulator iSim - für kleine Projekte ok
• ISE unterstützt die Interaktion mit Modelsim
• wird in den Projekteigenschaften festgelegt, welcher Simulator
verwendet wird
• dadurch einfaches Arbeiten über die GUI mit beiden Tools
möglich
• als Schnittstelle zwischen ISE und Modelsim dienen TCL
do-Dateien (*.fdo, *.tdo, *.udo) welche ISE automatisch
erstellt
• diese übernehmen Kompilierung, Simulationsstart, Anzeigen
des waveforms und Simulationssteuerung
• automatisch erzeugte do-Dateien, rufen immer ein user-do
(*.udo) auf, die durch eigenen Code erweitert werden kann
48 / 48