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