1. Realisierungsformen (Grundlagen Digitaltechnik II) The Moore s Law (Gordon Moore, Intel): Anzahl Transistoren auf einem Chip verdoppelt sich alle 2 Jahre. Standart-Bauteile Fixe Funktion, verschiedene Technologien, grosse Stückzahl, Einsatzgebiet in Serienproduktion AND, OR, NFC, Flash-Speicher Programmierbare Bauteile Beispiel:FPGA xilinx series 7 x CLB (zwischen 100k - 4.4mio) 2 Slices pro CLB Pro Slice 4xLUT, 8xFF davon 4xD- Latch, Mux, Carry Anwendungsspezifische Bauteile ROM (Read Only Memory) Günstig, Logikschaltungen PLD (Programable Logic Device) Baustein aus AND- und OR-Matrix FPGA(Field Programable Gate Array) Zweidimensionales Array von Logikblöcken, breites Einsatzspektrum. Zwei Technologien: SRAM: statisch RAM, verliert Info ohne Strom Antifuses: Isolationsschicht durchgebrannt ->immer leitenden Verbindung Semi-Custom ASIC (Anwendungsspezifischer IC) Full-Custom ASIC PROM/OTP (One time programable) EPROM (erasable with UV) EEPROM (electric erasable) Flash (EEPROM mit blockweise r/w) PAL (Programmable Array Logic) AND programmierbar, OR fest PLA (Programmable Logic Array) AND; OR programmierbar GAL (Generic Array Logic) Logik wie PLA aber noch Ausgangsnetzwerke CPLD (complex PLD) Viele Makrozellen & Logikblöcke für parallele Prozesse Aus Logikblock (CLB), I/O-Block (IOB), Schaltmatrix (PSM),weitere Makrozellen wie RAM, Clock, DSP CLB (Configurable Logic Block): -Look-up-Table (LUT) -FlipFlop (FF) -Carry-Logik -Mux Mikrozellen aus Transistoren Zu Gates -> Gate Array oder Sea of Gates Auch analoge Teile Einbau möglich Völlig Kundenspezifisch, genau auf Anwendung designt NRE (non-recurring engineering costs): einmalige Entwicklungskosten. Michel Gisler Elektrotechnik @ HSR 1
2. Entwurfsprozess Das Y-Modell von Gajski enthält drei Ansichten: Verhaltensansicht, Wie muss Systemverhalten Strukturelle Sicht, Welche Schaltungen Physikalische Sicht, Wie platzieren Designprozess 1. Designbeschreibung in VHDL 2. Synthese & Optimierung 3. Technology Mapping 4. Place and Route 5. Simulation 3. VHDL (Very High Speed IC Hardware Descripiton Language) In VHDL (IEEE Standart 1076) ist eine Hierarchie vorhanden, es besteht aus der Beschreibung und der entsprechenden Intepretation von parallelen Abläufen, elektrischen Signalen und dem zeitlichen Verhalten. Nicht case-sensitiv Immer mit Buchstabe beginnen, kein _ am Ende, kein Keine Schlüsselwörter als Namen -- Kommentar 4. Key Concept I Jedes VHDL-File besteht aus den folgenden 3 Einheiten: Library, Entity und Architecture Library Bibliotheken welche vorgegebene Funktionen enthalten. Librarys werden am Anfang deklariert. Entity Beschreibt die Anschlüsse des IC s. Signalrichtungen: in,out,buffer, inout Ausgabearten: true, false, bit, bit_vector, integer, oder std logic Architecture Beschreibt den inneren Aufbau des IC s. Behavioral: Verhaltensmodell, beschreibt Funktion Structural: Strukturmodell, aus mehreren Bauteilen zusammensetzen RTL: Register Tranfer Level Dataflow: Liste mit boolschen Operatoren TB: Testbench Michel Gisler Elektrotechnik @ HSR 2
5. Key Concept II Signale Relation Signalzuweisung Aggregat: Klammer welche mehrere Signale zu Vektor zusammenfasst. port x => port y y <= x Konstanten: Aufzähltypen: Physikalische Datentypen: Array Variablen: Zugriff über :=. Ändern Wert sofort. Nur in Prozessen möglich Unbedingte Signalzuweisung: Alle haben den gleichen Wert Verwendung: Kombinatorische Logik ohne Verzweigung Selektive Signalzuweisung: Alle Bedingungen werden parallel abgearbeitet, alle Möglichkeiten angeben. Verwendung: Kombinatorische Logik, Mux, LUT Bedingte Signalzuweisung: Bedingungen nacheinander (sequentiell) bis ein True ergibt, wenn nicht behält Ausgang den alten Wert Verwendung: Kombinatorische Logik mit Verzweigung Prozesse: Alle Prozesse innerhalb architecture sind nebenläufig, Prozesse intern laufen nacheinander, nur unbedingt & sequentiell Signalzuweisung erlaubt, alle anderen verboten. In der Sensitivitätsliste alle Signale die das Ausgangssignal ändern Michel Gisler Elektrotechnik @ HSR 3
5.1 Sequentielle Systeme Negative Flanke erfassen des Signals clk if clk event and clk = `0` then rising edge(clk) bei std_logic Positive Flanke erfassen des Signals clk if clk event and clk = `1` then falling edge(clk) bei std_logic Schleifen Ausgangssignal in Sensitivitätsliste -> vermeiden D-Flip-Flop D-Latch: Unbeabsichtigter unerwünschter Speicher Massnahmen: Default-Werte, explizite else-blöcke 5.2 Finite State Machines Diese Systeme werden ab einem Zustandsdiagramm synthetisiert. Mealy-System Moore-System Medwedjew-System Hier ist ein Prozess nötig für die Ausgangslogik F, Ausgangsberechnung G und den Speicher Z F: process(present_state, input) F: process(present_state) Hier sind nur zwei Prozesse nötig für die Ausgangsberechnung G und den Speicher Z Michel Gisler Elektrotechnik @ HSR 4
6. Key Concept III IEEE1164 Logiksystem Die binäre Darstellung genügt nicht um das elektrische Verhalten einer Hardware zu realisiern. Gründe dafür sind das Analog nicht darstellbar ist, keine bidirektionale Busse möglich sind sowie die don t care und undefined. Durch Einbinden der ieee.std.logic_1164 Library werden die std_logic und die std_ulogic Datentypen verfügbar. Damit verbunden ist auch die 9-wertige Logik: Wenn immer möglich ist die std_ulogic einzusetzen. std_logic nur bei bidirektionalen Bussen einsetzen. std_logic solved logic erlaubt mehrere Treiber an einem Signal -> Gefahr von Kurzschlüssen, Subklasse von std_ulogic (ab VHDL 2008) std_ulogic unsolved logic nur einfache Busse erlaubt da nur ein Treiber pro Signal werden Kurzschlüsse eliminiert Auflösefunktion wenn mehrere std_logic Treiber 6.1 Busse Master bestimmt welcher Slave sendet, in jeder entity wird es auf enable gesetzt wenn gesendet werden darf, übergeordnete Stelle weist Sendebefehl den entitys zu. Alle Teilnehmer dürfen den Bus immer abhören (empfangen) Alle nichtaktiven werden auf `Z` geschaltet (Hochohmig, abgehängt) 6.2 Arithmetik Die Hardware beherrscht Arithmetik nicht. Ausserdem definiert der Bit-String keine Zahl, die Interpretation des Bit-Strings muss definiert werden. Mittels den Logikoperatoren (and, nand, or, nor, xor, xnor, not) wird nur eine bitweise Interpretation erreicht. Um richtige Zahlenwerte darzustellen muss die Bibliothek ieee.numeric inkludiert werden. Die signed Zahlen werden mittels Zweierkomplement dargestellt. ieee.numeric_std Typen: signed (Zahl mit Vorzeichen), unsigned (Zahl ohne Vorzeichen) Zahlen werden intern auf Vektoren abgebildet ieee.numeric_bit Typen: signed (Zahl mit Vorzeichen), unsigned (Zahl ohne Vorzeichen) Zahlen werden intern auf Bit abgebildet Michel Gisler Elektrotechnik @ HSR 5
Operator Bedeutung Code-Beispiel Synthesefähig = Gleich Y=A; Ja /= Ungleich Y/=A; Ja <, <=, > >= kleiner, kleiner gleich, Y<A, if (Y<=A)then.. Ja grösser, grösser gleich Y>A, if (Y>=A)then.. +, -, *, / Plus, minus, mal, dividiert Y<=A+B; Division oft nicht abs() Absolutwert Y<=abs(A); Ja Mod Modulo Y<=A mod B nur für 2 x Vorzeichen von Y ist gleich das von B rem Rest Y<=A rem B nur für 2 x Vorzeichen von Y ist gleich das von A ** Potenz Y<=2**A; nur für 2 x 6.1 Typkonversation Auf beiden Seiten eines Operators müssen die gleichen Datentypen stehen. Daher sind Umwandlungsfunktionen nötig. Ab VHDL 2008 ist es möglich über std_ulogic_vector(my_bus) direkt in den Zieldatentyp zu konvertieren. target_signal <= target_type(source_signal); target_type (T) source_type(s) Type Conversion Operator Beispiel bit std_(u)logic to_bit(s) T <=to_bit(s) bit_vector std_(u)logic_vector to_bitvector(s) T <=to_bit_vector(s) std_(u)logic) bit to_std_(u)logic)(s) T <=to_stdlogic(s) std_(u)logic_vector bit_vector to_std_(u)logic_vector(s, lenght) T <=to_stdlogicvector(s,4) std_logic_vector std_ulogic_vector to_stdlogicvector(s) T <=to_stdlogicvector(s) std_ulogic_vector std_logic_vector to_stdulogicvector(s) T <=to_stdulogicvector(s) integer (un)signed To_integer (S) T <=to_integer (S) (un)signed integer To_(un)signed (S, length) T <=to_(un)signed (S, 4) integer std_(u)logic_vector integer->(un)signed-> std_(u)logic_vector target_type (T) source_type(s) Type Conversion Operator Beispiel unsigned std_(u)logic_vector unsigned (S) T <= unsigned (S) signed std_(u)logic_vector signed (S) T <= unsigned (S) std_(u)logic_vector unsigned std_(u)logic_vector (S) T <= u std_(u)logic_vector (S) std_(u)logic_vector signed std_(u)logic_vector (S) T <= std_(u)logic_vector (S) 7. Key Concept IV Testbenches Die Simulation /Funktionstest wird mit Hilfe einer Test- Bench gemacht Die Test-Bench soll Wiederverwendbarsein, ist aber nicht synthesefähig Die Test-Bench sollte unabhängig sein vom verwendeten Verfahren des DUT Event-Queue: Liste mit Ereignissen abgearbeitet, ohne auf Zeit zu. Delta-Time: Unterschieden in Ursache und Wirkung aber Zeitverzögerung ignoriert Transport Delay: Wirkung um fixe Zeitspanne verlängert, länge Einganspuls egal Inertial Time Model: simuliert Eingangssignale am Ausgang nur wenn bestimmte Dauer wait for Statement ist nicht synthesefähig, und bei wait sofort Werte auswerten assert gibt Fehlermeldung aus wenn Bedingung nicht stimmt, im Response Monitor. Michel Gisler Elektrotechnik @ HSR 6
7.1 Aufbau Test-Bench Library Entity leer Architecture: tb of DUT_tb is Timing-Konstante & Signale deklariern Komponenten deklarieren resp DUT Komponentenkonfiguration Instanzierung des DUT ( Signale zuweisen) Prozess für Clock-Erzeugung Prozess für Anwendung-von Stimuli (Stimulusgenerator) Prozess für erfassen der Systemantwort (Response-Monitor) Entity Architecture Timing-Konstante Komponenten deklarieren Komponentenkonfiguration Instanzierung des DUT Ab hier begin Clock-Prozess Stimulusgenerator Response-Monitor Unregelmässige Zeitabstände Werte abfragen end architecture Michel Gisler Elektrotechnik @ HSR 7
8. Key Concept V Parametrisierbarkeit Es gibt Bausteine die immer wieder gebraucht werden, sich aber leicht unterscheiden (Zähler). Mittels generic kann so eine Parametrisierbarkeit erreicht werden. Generic steht für eine Übergabe eines Parameter an ein Modell. Parameter zur Designzeit: Konstanten (maxcount: integer :=127); Parameter zur Compilezeit: Generic (y: out integer range o to maxcount); Parameter zur Laufzeit: Signal 8.1 Beispiel Zähler Der Zähler muss nur einmal definiert werden und kann anschliessend dank generic mehrmals verwendet werden Definition von counter_x Verwendung als Komponente Michel Gisler Elektrotechnik @ HSR 8