Vorlesung Modellierung und Simulation heterogener Systeme Modellierung heteorgener Systeme (Methodik v. Modellierung und Entwurf) Christoph Grimm 2003
Überblick über Semesterstoff Simulation ereignisdiskreter Systeme, SystemC Grundlagen Methodik Modellierung von Hw/Sw-Systemen Modellierung von Registertransfers Modellierung von Bustransaktionen, Busprotokollen Funktionale Modellierung Nichtdeterministische Modelle, Verfeinerung
Inhalt Kurze Zusammenfassung: SystemC Hw/Sw-Systeme Abstraktionsebenen und Methodik beim Entwurf heterogener Hw/Sw-Systeme Modellierung auf Register-Transfer-Ebene Beispiele
S Y S T E M C T M C++ Klassenbibliothek zur Modellierung von Hw/Sw Systemen Diskrete Prozesse, Kommunikationskanäle Ereignisdiskreter Simulationskern ruft C++ - Methoden von Modulen auf. Modelle können mit normalem C++ Compiler übersetzt werden. SC_MODULE(counter) { sc_out<int> count_val; sc_in<bool> clk; int cnt; do_count { cnt = cnt + 1; count_val.write(cnt); }; SC_CTOR(counter) { SC_METHOD(do_count) sensitive_pos << clk; } };
SystemC Use Flow SystemC Bibliothek C++ Compiler Linker Modell Ausführbares Programm (Simulator) C++ Debugger Simulationsergebnisse
Inhalt Kurze Zusammenfassung: SystemC Hw/Sw-Systeme Abstraktionsebenen und Methodik beim Entwurf heterogener Hw/Sw-Systeme Modellierung auf Register-Transfer-Ebene Beispiele
Hw/Sw-Systeme (1) DSP Σ pofi KV2W hook (telephone receiver) algorithm Interfaces Control Controller Σ prefi KIT Protection net Subscriber Digital circuit Mixed-Signal circuit Analog circuit red: linear electrical magenta: linear DAE s blue: dataflow green: digital (SystemC)
Hw/Sw-Systeme (2)
Hw/Sw-Systeme Vereinfachte Architektur Prozessor Software Hardware (Co-Prozessor) Hw/Sw-System, i. A. mehrere Prozessoren, mehrere Co-Prozessoren, mehrere Busse
Ausführbare Spezifikation (Executable Specification) Welcher Prozessor? Software Am Anfang i. d. R. : Softwareimplementierung Häufig Prototypimplementierung, z. B. MP3- Standardimplementierung von Fraunhofer Aber häufig: Leistungsaufnahme zu hoch Performance zu niedrig Prozessor zu teuer Wenn wir die Softwareimplementierung als Ausgangspunkt für den Entwurf eines Hw/Sw-Systems verwenden, so wird diese als ausführbare Spezifikation bezeichnet.
Hw/Sw-Systeme Partitionierung, Auswahl Architektur Prozessor Software Hardware (Co-Prozessor) Erforschung des Entwurfsraums (Partitionierung, Allokation): Zuweisung von Teilen der ausführbaren Spezifikation an Verarbeitungseinheiten (Prozessor(en), Co-Prozessore(en), Bussen),
Klassischer Top-Down Design Flow Verfeinerung C/C++ System Level Model Compilation Simulation Manuelle Konvertierung für HW Partition -Fehler - Inkonsistenzen - Unnötige Simulationen VHDL/Verilog Result Simulation Partitionierung, Allokation: Sukzessives Verlagern von Systemfunktionen auf Co-Prozessoren, bis Performence/Leistungsaufnahme OK Synthesis
SystemC Design Flow Verfeinern SystemC Model Compilation Simulation Evaluation Keine manuelle Übersetzung nötig. Der gesamte Entwicklungsprozess kann in einer Sprache durchgeführt werden. Der Entwurf kann sukzessive, ohne Bruch an eine Realisierung angenähert werden. RT-Synthese Software: C++ - Compiler, OS,... Gate-Level Design with Verilog, VHDL,...
Meilensteine der Verfeinerung Executable Spec. Untimed Functional Model Timed Functional Model Bus-Cycle Accurate Model Clock-Cycle Accurate Model Register-Transfer Model Parallelität geschätzte Laufzeiten [sec] Busse, Kommunikation Taktzyklen Realisierung
Meilensteine der Verfeinerung Executable Spec. Untimed Functional Model Timed Functional Model Bus-Cycle Accurate Model Clock-Cycle Accurate Model Register-Transfer Model Parallelität geschätzte Laufzeiten [sec] Busse, Kommunikation Taktzyklen Realisierung
Modellierung auf RT-Ebene Modelliert wird: Struktur: Kombinatorische Gatternetze Register Verhalten: Transfer von Eingang oder Register über Funktion zu Ausgang oder Register abhängig von Bedingungen (z. B. Taktflanken o. Pegeln) Registertransfermodelle: (Pseudocode) wenn EREIGNIS: Register = f1(register) EREIGNISSE: boolesche Funktion aus Pegeln oder Flanke von Signalen klingt zu einfach die Tücke liegt in der Synthese!
Registertransfersynthese Registertransfermodelle sind i.d.r. Ausgangspunkt für RT- Synthese! Es reicht nicht, dass Modell korrekt simuliert! Simulation (mis)match: RT-Synthese muss versuchen, das Verhalten des ereignisdiskreten Modells möglichst genau zu implementieren. RT-Synthese muss effiziente Hardware liefern. Synthetisierte Hardware muss sich genauso verhalten wie simuliertes Modell! Probleme - Vorsicht: Delta-Zyklen nicht physikalisch realisierbar Die Werte Unknown sind in der Realität entweder 1 oder 0.
Syntheserobuste Spezifikation von RT-Modellen NIE darauf verlassen, dass Synthesetool das Verhalten irgendwie korrekt realisiert. Methodik: Gewünschte Register und ihre Art (Flipflop oder Latch) wählen. Modell so schreiben, dass Synthese diese Register einführt, und das auch Kontrollieren. Registerinferenzregeln beschreiben Relation zwischen syntaktischen Konstrukten und synthetisierter Hardware. Registerinferenzregeln sind von Synthesewerkzeug zu Synthesewerkzeug verschieden. IEEE 1076.6: Minimalstandard für Austausch von RT-Modellen Sinngemäß: Syntheserobuste Spezifikation
Syntheserobuste Spezifikation kombinatorischer Funktionen Sie wollen eine kombinatorische Funktion realisieren (z. B. Addierer, Multiplizierer) x1 xn Syntheserobustes RT-Modell: WENN EVENT(x1,,xn) y=f(x1, xn) y=f(x1, xn) y
Modellierung kombinatorischer Funktionen in SystemC SC_MODULE(beispiel) { sc_in<int> a,b; sc_out<int> y; void compute() { y=a+b; }; SC_METHOD(compute) sensitive << a,b; }
Syntheserobuste Spezifikation von FlipFlops Sie wollen ein Schaltwerk, dessen Ergebnisse in FlipFlops gespeichert werden x1 xn Syntheserobustes RT-Modell: rv soll in Flipflop gespeichert werden WENN steigende Taktflanke rv=f(x1, xn) Takt f(x1, xn) rv Alle Signale, denen Wert zugewiesen wird, werden als Flipflops realisiert!
Modellierung von Schaltnetzen mit Flipflops in SystemC SC_MODULE(beispiel) { sc_in<int> a,b; sc_in<bool> clk; sc_out<int> y; void compute() { y=a+b; }; SC_CTOR(beispiel) { SC_METHOD(compute) sensitive_pos << clk; } }
Syntheserobuste Spezifikation von Latches Sie wollen ein Schaltwerk, dessen Ergebnisse in Latches gespeichert werden x1 xn Syntheserobustes RT-Modell: rv soll in Latch gespeichert werden WENN Taktpegel rv=f(x1, xn) Takt f(x1, xn) rv Alle Signale, denen Wert zugewiesen wird, werden als Latches realisiert!
Modellierung von Schaltnetzen mit Latches in SystemC SC_MODULE(beispiel) { sc_in<int> a,b; sc_in<bool> clk; sc_out<int> y; void compute() { if (clk == 1) { y=a+b; }; } } SC_CTOR(beispiel) SC_METHOD(compute) sensitive << clk << a << b; }
Nicht-Syntheserobuste Konstrukte (Beispiele) WENN EVENT(x1,,xn-1) y=f(x1, xn) Für Simulation-Match nötig: Latch, in dem y gespeichert wird, falls sich xn ändert. Synthesetools implementieren solche Prozesse meist als kombinatorische Logik Simulation-Mismatch! WENN EVENT(x1,, xn) IF (condition) THEN y=f(x1,, xn) END IF; Führt ggf. zur Inferenz eines Registers, in dem y gespeichert wird, solange condition nicht erfüllt ist. Häufig aber kombinatorische Logik gewünscht bzw. gedacht.
Überblick über Semesterstoff Simulation ereignisdiskreter Systeme, SystemC Grundlagen Methodik Modellierung von Hw/Sw-Systemen Modellierung von Registertransfers Modellierung von Bustransaktionen, Busprotokollen Funktionale Modellierung Nichtdeterministische Modelle, Verfeinerung
Übung Beispiel: Modellierung eines einfachen RISC -Prozessors Zu Hause: Modellieren sie selber einen einfachen RISC-Prozessor, der außerdem über load/store-befehle verfügt.
TI-Mini-RISC Prozessor hat die folgenden Register: Programmzähler PC Pointer auf Adresse, die nächsten auszuführenden Befehl enthält Instruktionsregister IR Auszuführender Befehl Andere Register Stackpointer, Datenregister, Adressregister, Flags, Zyklen: Fetch: Von *PC wird Befehl in IR geholt, PC = PC + 1; Decode: CASE(IR) ADD: Next = ExecuteADD; ExecuteINC: z.b. D0 = D0+1;