13.07.2015 Aufrufe

Design Flow und Verilog

Design Flow und Verilog

Design Flow und Verilog

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

Gajski Y-DiagrammVerhaltenSpezifikationAlgorithmusBoole‘scheGleichungenRTLTransistorenDifferenzialgleichungenGeometrieALU, MUX,RegisterPolygoneZellenCPU,SpeicherGatterFloorplanGeometrischePartitionierungStrukturBlockschaltbild• 3 Achsen für 3 Formen derBeschreibung eines Systems• Außen: hoher Abstraktionsgrad <strong>und</strong>geringes Maß an Detailinformationen• Innen: geringer Abstraktionsgrad <strong>und</strong>hohes Maß and Detailinformationen• Fertigungstechnologie (Lithographie)gibt zwingend vor: Polygone alsBeschreibungsformDST SS2003 - Hardware Description LanguagesSuS@TI, Seite 1


Verhalten: SpezifikationVerhaltenSpezifikationAlgorithmusRTLBoole‘scheGleichungenTransistorenDifferenzialgleichungenALU, MUX,RegisterGatterCPU,SpeicherStrukturBlockschaltbildPolygoneZellenFloorplanGeometrischePartitionierungGeometrie• Beschreibung des Systemverhaltens innatürlicher Sprache• Hohe Form der Abstraktion, wenig Details• Aufgabe eines Hardware-Entwicklers: DieseBeschreibungsform in eine exaktere <strong>und</strong>detailreichere Form überführenDST SS2003 - Hardware Description LanguagesSuS@TI, Seite 2


Verhalten: AlgorithmusVerhaltenSpezifikationAlgorithmusRTLBoole‘scheGleichungenTransistorenDifferenzialgleichungenALU, MUX,RegisterGatterCPU,SpeicherStrukturBlockschaltbildPolygoneZellenFloorplanGeometrischePartitionierungGeometrie• Entscheidender Schritt:Entwurf eines Algorithmus fürdas Verhalten des Systems• Ziel der EDA: Möglichst allenachfolgenden SchritteautomatisierenDST SS2003 - Hardware Description LanguagesSuS@TI, Seite 3


Verhalten: RTLVerhaltenSpezifikationAlgorithmusRTLBoole‘scheGleichungenTransistorenALU, MUX,RegisterCPU,SpeicherStrukturBlockschaltbildPolygoneZellenGatterRegisterDifferenzialgleichungenKombinatorischeLogikRegisterFloorplanGeometrischePartitionierungGeometrie• Register-Transfer-Level (RTL)• Verbindet den Algorithmus mit physikalischenElementen (Register bzw. Flip-Flops)• Bietet genügend Details für Automation allernachfolgenden Transformationsschritte derBeschreibungsform• Allerdings: Hardware-Entwickler müssen dieautomatischen Tools sukzessive mit zusätzlichenInformationen unterstützen• Außerdem: Kontrolle des Transformationsprozesses<strong>und</strong> ggf. manuelle Eingriffe nötig• Wichtigste Form der Beschreibung in HDLsDST SS2003 - Hardware Description LanguagesSuS@TI, Seite 4


Verhalten: Boole‘sche GleichungenVerhaltenSpezifikationAlgorithmusRTLBoole‘scheGleichungenTransistorenDifferenzialgleichungenALU, MUX,RegisterGatterCPU,SpeicherStrukturBlockschaltbildPolygoneZellenFloorplanGeometrischePartitionierungGeometrie• Übergang von RTL zu den Boole‘schenGleichungen für Entwickler sehr aufwendig• Gleichungen können red<strong>und</strong>ante Termeaufweisen• Gewinn durch so detailreiche Beschreibung fürden Entwickler gering, Aufwand jedoch hoch• In den Anfängen der EDA-Industrie: Häufigverwendete Form der Beschreibung einesdigitalen Systems• Vertreter aus diesen Tagen: ABEL HDL(Advanced Boolean Equation Language)DST SS2003 - Hardware Description LanguagesSuS@TI, Seite 5


Verhalten: DifferenzialgleichungenVerhaltenSpezifikationAlgorithmusRTLBoole‘scheGleichungenTransistorenDifferenzialgleichungenALU, MUX,RegisterGatterCPU,SpeicherStrukturBlockschaltbildPolygoneZellenFloorplanGeometrischePartitionierungGeometrie• Herleitung der Differenzialgleichungen aus derSpezifikation des Verhalten eines Systems fürEntwickler:- Sehr aufwendig- Nahezu unmöglich für komplexe Systeme• Daher: Geringe praktische Bedeutung für denEntwurf digitaler Systeme• Bei analogen Schaltkreisen: Simulation derSchaltung auf dieser Ebene mit SPICE- Unnötig, da viel zu detailreichDST SS2003 - Hardware Description LanguagesSuS@TI, Seite 6


Struktur: BlockschaltbildVerhaltenSpezifikationAlgorithmusRTLBoole‘scheGleichungenTransistorenDifferenzialgleichungenALU, MUX,RegisterGatterCPU,SpeicherStrukturBlockschaltbildPolygoneZellenFloorplanGeometrischePartitionierungGeometrie• Hohe Abstraktion ähnlich der sprachlichenSpezifikation des Verhaltens• Häufig verwendete Form der Beschreibung fürAnwender, z.B. in Handbüchern <strong>und</strong>DatenblätternDST SS2003 - Hardware Description LanguagesSuS@TI, Seite 7


Struktur: CPU, Speicher, etc.VerhaltenSpezifikationAlgorithmusRTLBoole‘scheGleichungenTransistorenDifferenzialgleichungenALU, MUX,RegisterGatterCPU,SpeicherStrukturBlockschaltbildPolygoneZellenFloorplanGeometrischePartitionierungMemory CPU IOGeometrie• Weitere Aufteilung des Blockschaltbilds in seineBestandteile• Kann bereits genügen, um ein digitales System zubeschreiben <strong>und</strong> zu implementieren• Beispiel: PC aus Standardkomponenten (Mainboard,Speicher, Prozessor, Grafikkarte, usw.)DST SS2003 - Hardware Description LanguagesSuS@TI, Seite 8


Struktur: ALU, MUX, Register, etc.VerhaltenSpezifikationAlgorithmusRTLBoole‘scheGleichungenTransistorenDifferenzialgleichungenALU, MUX,RegisterGatterCPU,SpeicherStrukturBlockschaltbildPolygoneZellenFloorplanGeometrischePartitionierungGeometrie• Stellt Ebene der Schaltplan-Eingabe (schematicentry) in vielen modernen Entwicklungstools fürdigitale Systeme dar• In Altera MAX+Plus führt diese Ebene durchVerwendung von parametrisierbaren Blöcken(LPMs) bereits zu lauffähigen SystemenDST SS2003 - Hardware Description LanguagesSuS@TI, Seite 9


Struktur: GatterVerhaltenSpezifikationAlgorithmusRTLBoole‘scheGleichungenTransistorenDifferenzialgleichungenALU, MUX,RegisterGatterCPU,SpeicherStrukturBlockschaltbildPolygoneZellenFloorplanGeometrischePartitionierungGeometrie• Vergleichbares Maß an Details wie beiBoole‘schen Gleichungen• Ähnliche Probleme (red<strong>und</strong>ante Terme)• Bereits hoher Aufwand für Entwickler nötig, aberimmer noch praktikabel bei kleinen Systemen• Gute Kontrolle der verbrauchten RessourcenDST SS2003 - Hardware Description LanguagesSuS@TI, Seite 10


Struktur: TransistorenVerhaltenSpezifikationAlgorithmusRTLBoole‘scheGleichungenTransistorenDifferenzialgleichungenALU, MUX,RegisterGatterCPU,SpeicherStrukturBlockschaltbildPolygoneZellenFloorplanGeometrischePartitionierungGeometrie• Herleitung der Verschaltung der Transistorenaus der Spezifikation des Verhalten oder demBlockschaltbild für Entwickler:- Sehr aufwendig- Nahezu unmöglich für komplexe Systeme- Unnötig bei den meisten digitalen Systemen• Daher: Geringe praktische Bedeutung für denEntwurf digitaler Systeme• Ausnahme: Bei der sog. Charakterisierung vonZellbibliotheken• Wichtig <strong>und</strong> weiterhin eingesetzt beim Entwurfanaloger SystemeDST SS2003 - Hardware Description LanguagesSuS@TI, Seite 11


Geometrie: Geometrische PartitionierungVerhaltenSpezifikationAlgorithmusRTLBoole‘scheGleichungenTransistorenDifferenzialgleichungenALU, MUX,RegisterPolygoneGatterCPU,SpeicherStrukturBlockschaltbildLeiterplatte 3Leiterplatte 2Leiterplatte 1ZellenFloorplanGeometrischePartitionierungChip 1 Chip 2GeometrieChip 3• Aufteilung des Systems auf mehrereLeiterplatten oder Chips• Bisher noch geringe Unterstützung durchEntwurfsautomation, da die Elemente zuheterogen sindDST SS2003 - Hardware Description LanguagesSuS@TI, Seite 12


Geometrie: FloorplanVerhaltenSpezifikationAlgorithmusRTLBoole‘scheGleichungenTransistorenDifferenzialgleichungenALU, MUX,RegisterGatterCPU,SpeicherStrukturBlockschaltbildPolygoneZellenFloorplanGeometrischePartitionierungGeometrie• Bei ASICs <strong>und</strong> Full-Custom: Freie Wahlder Lage der I/O Zellen, Speicher-Module,Stromversorgungs-Leitungen, Analog-Teile, etc.• Bei FPGAs, CPLDs: Wahl der I/O Zellen,Speicher-Module <strong>und</strong> Analog-Teile unterden bereits vorhandenen <strong>und</strong> fixenRessourcenDST SS2003 - Hardware Description LanguagesSuS@TI, Seite 13


Geometrie: ZellenVerhaltenSpezifikationAlgorithmusRTLBoole‘scheGleichungenTransistorenDifferenzialgleichungenALU, MUX,RegisterGatterCPU,SpeicherStrukturBlockschaltbildPolygoneZellenFloorplanGeometrischePartitionierungGeometrie• Bei ASICs: Automatische Plazierung vonsog. Standard-Zellen• Bei Full-Custom: Manuelles Plazierenvon Einheiten beliebiger Größe• Bei FPGAs <strong>und</strong> CPLDs: Fix!DST SS2003 - Hardware Description LanguagesSuS@TI, Seite 14


Geometrie: PolygoneVerhaltenSpezifikationAlgorithmusRTLBoole‘scheGleichungenTransistorenDifferenzialgleichungenALU, MUX,RegisterGatterCPU,SpeicherStrukturBlockschaltbildPolygoneZellenFloorplanGeometrischePartitionierungEntwurfszielGeometrie• Gesamtheit der Polygone ergeben das Layout zurMaskenherstellung• Layout beschreibt den Chip vollständig <strong>und</strong>dient direkt der Fertigung• Daher: Ebene der Polygone ist das Entwurfsziel• Bei FPGAs <strong>und</strong> CPLDs: Fix!DST SS2003 - Hardware Description LanguagesSuS@TI, Seite 15


Hardware Description LanguagesVerhaltenSpezifikationManuelleImplementierungAutomatischeImplementierungAlgorithmusBoole‘scheGleichungenRTLTransistorenDifferenzialgleichungenGeometrischePartitionierungGeometriePolygoneZellenALU, MUX,RegisterFloorplanCPU,SpeicherGatterRTLSynthese<strong>Verilog</strong>, VHDLStrukturBlockschaltbildGatter• Mit HDLs können das Verhalten<strong>und</strong> die Struktur beschriebenwerden• Keine Beschreibung derGeometrie mit HDLs möglich!• Front-end <strong>Design</strong> <strong>Flow</strong>: Von derSpezifikation zur Gatter-Ebene• Back-end <strong>Design</strong> <strong>Flow</strong>: Von derGatter-Ebene zur Layout-Ebene• Synthese <strong>und</strong> TechnologyMapping: Von der RTL-Beschreibung zur Gatter-Ebene(Gate-Level Netlist)DST SS2003 - Hardware Description LanguagesSuS@TI, Seite 16


Front-end <strong>Design</strong> <strong>Flow</strong>DST SS2003 - Hardware Description LanguagesSuS@TI, Seite 17


Überblick: <strong>Verilog</strong>, VHDL <strong>und</strong> Co.• Entwickelt 1983/1984 als Werkzeug zurModellierung, Simulation <strong>und</strong> Analyse digitalerSchaltungen• Ursprünglich Eigentum von Cadence• 1990 gab Cadence die Sprache zur Verwendung durchDritte frei• Standardisierung im Jahr 1995 durch die IEEE• Einfach zu lernen• Kompakter Code• Syntax ähnelt C• Stark verbreitet in Nordarmerika <strong>und</strong> Japan, wenigerin Europa• Stark bei low-level designs, hat Schwächen beisystem-level designs• Wird verwendet zur Spezifikation von Netzlisten imback-end• 1993 wurden 85% der ASICs mit <strong>Verilog</strong>entworfen (Quelle: EE Times)• Im Internet unter: www.ovi.orgcase (sel)0: out = in1;1: out = in2;85 %DST SS2003 - Hardware Description LanguagesSuS@TI, Seite 18


<strong>Verilog</strong>vs. VHDLmodule counter (data, clk, clrn, ena, ld, count);input [7:0] data;input clk, clrn, ena, ld;output [7:0] count;reg [7:0] count_tmp;always @(posedge clk or posedge clrn)beginif (clrn)count_tmp = 'b0;else if (ld)count_tmp = data;else if (ena)count_tmp = count_tmp + 'b1;endassign count = count_tmp;endmoduleC-stylelibrary ieee;use ieee.std_logic_1164.all;entity counter isport( data : in integer range 0 to 255;clk, clrn, ena, ld : in std_logic;count : out integer range 0 to 255 );end counter;architecture counter_arch of counter issignal countsig : integer range 0 to 255;beginprocess (clk, clrn)beginif clrn = '0' thencountsig


Definition eines Modulsmodule module_name (port_list) ;Port-DeklarationParameter-DeklarationSchnittstelleVariablen-DeklarationenZuweisungenWeitere Modul-Instanzierungen„initial“ <strong>und</strong> „always“ BlöckeProzeduren <strong>und</strong> FunktionenendmoduleHauptteilModul-Definition• Module stellen das wichtigste strukturelleElement in <strong>Verilog</strong> dar• Beinhalten das eigentliche <strong>Design</strong>• Jedes <strong>Design</strong> besteht aus mindestenseinem Modul (sog. top-level Modul)• Können verschachtelt werden, definieren so die<strong>Design</strong>-Hierarchie• Können also strukturell aufgebaut sein durchInstanzen von Gatter, Leaf-Cells (Standard-Zellen)oder weiteren Modulen• Ebenso möglich: Inhalt eines Moduls wirdalgorithmisch beschrieben durch sog. „always“-BlöckeDST SS2003 - Hardware Description LanguagesSuS@TI, Seite 20


Die Modul-SchnittstelleOp1 Op2 SelModeC_outALUC_inResultEqualPort-Deklaration:Genaue Angabe derRichtung desSignalflusses durch denPort <strong>und</strong> seine Breitemodule ALU (Result, Equal, C_out,C_in, Op1, Op2, Sel, Mode);input [3:0] Op1, Op2, Sel;input C_in, Mode;output [3:0] Result;output C_out, Equal;...endmodulePort-Liste:Angabe derPortnamenDST SS2003 - Hardware Description LanguagesSuS@TI, Seite 21


Signale<strong>Verilog</strong>-Schlüsselwortefür externe Signale:input, output oderinout<strong>Verilog</strong>-Schlüsselwortfür Signale innerhalbeines Moduls: wiremodule ALU (Result, Equal, C_inout,C_in, Op1, Op2, Sel, Mode);input [3:0] Op1, Op2, Sel;input C_in, Mode;output [3:0] Result;inout C_inout, Equal;wirereg...endmodule[7:0] IntSig;[3:0] Result;Vektoren: Angabe derIndizes in eckigenKlammern, z.B. [7:0],zwischen Schlüsselwort<strong>und</strong> SignalnamenExterne Signale vomTyp „output“ <strong>und</strong>interne Signale könnenmit „reg“ als Registergekennzeichnet werden• Signale in <strong>Verilog</strong> können nur vier Werte annehmen:0, 1, X (x) oder Z (z)• X steht für „Unknown“, d.h. das Signal kann 0, 1oder Z sein oder ändert sich gerade• Z steht für „High Impedance“, d.h. die Signalquelleist abgetrennt• Output-Ports vom Typ „reg“ werden insequentiellen Schaltkreisen verwendet• Damit wird sichergestellt, dass der Wertdes Signals bis zum nächsten Taktzyklusgehalten wird, statt in den Zustand „HighImpedance“ zu wechselnDST SS2003 - Hardware Description LanguagesSuS@TI, Seite 22


Strukturelle Beschreibungmodule MUX (A,B,C,D,Sel0,Sel1,Z);input A,B,C,D,Sel0,Sel1;output Z;wire NotSel0, NotSel1;wire Y0, Y1, Y2, Y3;not (NotSel0, Sel0);not (NotSel1, Sel1);and (Y0, A, NotSel0, NotSel1);and (Y1, B, NotSel0, Sel1);and (Y2, C, Sel0, NotSel1);and (Y3, D, Sel0, Sel1);or (Out, Y0, Y1, Y2, Y3);endmodule• Beschreibung des Systems durch Module <strong>und</strong> ihre Verbindungen• Jedes Modul kann seinerseits aus untereinander verb<strong>und</strong>enenModulen bzw. Instanzen bestehen• Je tiefer die Hierarchie-Ebene, desto detaillierter die Beschreibung<strong>und</strong> desto näher an der physikalischen Implementierung• <strong>Verilog</strong> stellt sog. Primitive auf Gatter-Ebene zur Verfügung, dienicht weiter aufgelöst werden müssen• Reihenfolge der Instanzen irrelevant⇒ Konzept der NebenläufigkeitDST SS2003 - Hardware Description LanguagesSuS@TI, Seite 23


Strukturelle Beschreibung (Forts.)module MUX (A,B,C,D,Sel0,Sel1,Z);input A,B,C,D,Sel0,Sel1;output Z;wire NotSel0, NotSel1;wire Y0, Y1, Y2, Y3;EindeutigerInstanzname• Strukturelle Beschreibung auf Gatter-Ebene durchPrimitive, z.B.:• multiple-input gates: and, nand, nor, or, xnor <strong>und</strong> xor• multiple-output gates: buf, not• tristate gates: bufif0, bufif1, notif0, notif1• (c)mos gates, bidirectional gates, pullup, -down gatesnot #4 U1 (NotSel0, Sel0);not #4 U2 (NotSel1, Sel1);and #5 U3 (Y0, A, NotSel0, NotSel1);and #5 U4 (Y1, B, NotSel0, Sel1);and #5 U5 (Y2, C, Sel0, NotSel1);and #5 U6 (Y3, D, Sel0, Sel1);or #5 U7 (Out, Y0, Y1, Y2, Y3);endmoduleSignal-Verzögerung5 Zeiteinheiten• Einer Instanz einer Gatter-Primitive könnenzusätzliche Informationen beigefügt werden, z.B.Treiber-Stärke, Signal-Verzögerung, Instanz-Name <strong>und</strong>eine Bereichsangabe für Felder (arrays) von Instanzen• Treiber-Stärke <strong>und</strong> Signal-Verzögerung nichtsynthetisierbareKonstrukteDST SS2003 - Hardware Description LanguagesSuS@TI, Seite 24


User-Defined Primitives (UDP)• Erweiterung des Konzepts der Gatter-Primitivedurch User-Defined Primitives (UDP)• Sowohl kombinatorische als auchsequentielle Logik kann spezifiziert werden• UDPs sind nicht synthetisierbar!• Für jede mögliche Belegung derEingangssignale wird der Wert des Ausgangsin einer Tabelle spezifiziert• Ist eine Belegung nicht aufgelistet wird derAusgang auf ‘x’ gelegtprimitive UDP_name (port_list) ;Port-DeklarationNur ein Ausgangerlaubt, keineVektorenImplementierteBoole’sche Funktionals TabellespezifiziertUDP InitialisierungWahrheits- oder ZustandstabelleBei sequentiellerLogik: Wert desAusgangs zuBeginnendprimitiveDST SS2003 - Hardware Description LanguagesSuS@TI, Seite 25


User-Defined Primitives (Beispiele)2 zu 1MultiplexerToggle-Flipflopmit ‘clear’primitive MUX (Z,Sel, A, B);input A, B, Sel;output Z;Reihenfolge derEingänge wie inder Port-Listeprimitive TFF (Q, Clk, Clr);input Clk, Clr;output Q;reg Q;GegenwärtigerWert des Ausgangstable// Sel A B : Z0 0 ? : 0;0 1 ? : 1;1 ? 0 : 0;1 ? 1 : 1;x ? ? : x;endtableendprimitive? steht für0, 1 oder xr = steigendeTaktflankef = fallendeTaktflankeinitialQ = 0;table// Clk Clr : Q : Q+? 1 : ? : 0;r 0 : 0 : 1;r 0 : 1 : 0;f 0 : ? : -;? f : ? : 0;endtableNächster Wertdes AusgangsMinus-Zeichen:Keine ÄnderungendprimitiveDST SS2003 - Hardware Description LanguagesSuS@TI, Seite 26


Datenflussbasierte Beschreibungmodule MUX (A,B,C,D,Sel0,Sel1,Z);input A,B,C,D,Sel0,Sel1;output Z;wire NotSel0, NotSel1;wire Y0, Y1, Y2, Y3;assign Z = (~Sel0 & ~Sel1 & A) |(~Sel0 & Sel1 & B) |(Sel0 & ~Sel1 & C) |(Sel0 & Sel1 & D);endmodule• Einem Signal wird ein (neuer) Wert zugewiesen(assignment)• Dieser Wert ergibt sich aus der Transformationeines oder mehrerer Operanden durch einenOperatorOperand 1 Operand 2assign #3 Out = A & B;delayErgebnisOperator• Einfachste Form Operanden: vom Typ wire oder reg• Typ des Ergebnis immer vom Typ wire• Weiterhin: Konstanten, Vektoren <strong>und</strong>Funktionsaufrufe• Modellierung der Verzögerung (delay) nichtsynthetisierbar!DST SS2003 - Hardware Description LanguagesSuS@TI, Seite 27


OperandenEinige ausgewählte Beispiele für Operanden:wire signal1;wire [3:0] bus1;real temperatur;reg [7:0] data;signal1temperaturdata[7:4]data[0]{ signal1, bus1[2:1], bus1[3] }1141.2e74‘b0101‘hFFCToF(temperatur)Einfache Referenz auf ein NetzEinfache Referenz auf ein Register vom Typ real„Part-select“ Operand, Teil des Vektors data„Bit-select“ Operand, ein Bit des Vektors dataKonkatenationKonstante ohne Basis, <strong>Verilog</strong> nimmt Dezimalzahl anKonstante vom Typ real in wissenschaftl. NotationKonstante der Größe 4 BitKonstante der Größe 32 Bit in HexadezimalFunktionsaufrufDST SS2003 - Hardware Description LanguagesSuS@TI, Seite 28


OperatorenArithmetische Operatorena + ba - ba * ba / ba % ba plus ba minus ba mal ba geteilt durch ba modulo b• Division bei Integer liefert Integer, Nachkommastellenwerden abgeschnitten• Modulo nur bei Integer erlaubt• x oder z in einem Operanden führt zu x als ErgebnisRelationale Operatorena < b a kleiner ba > b a größer b• x oder z in einem Operanden führt zu x als Ergebnis• Ist ein Operand kleiner als der andere, wird er vonlinks mit Nullen gefüllta = ba kleiner od. gleich ba größer od. gleich bGleichheits-Operatorena === b a gleich b, einschl. x <strong>und</strong> za !== b a ungleich b, einschl. x u. za == b a gleich b, kann x lieferna != b a ungleich b, kann x liefern• In den ersten beiden Fällen werden auch x <strong>und</strong> z mit0, 1, x <strong>und</strong> z verglichen• 1xz0 === 1xz0 liefert also 1• Bei den anderen beiden liefert x <strong>und</strong> z im Operandenimmer x• 1xz0 == 1xz0 liefert also xDST SS2003 - Hardware Description LanguagesSuS@TI, Seite 29


Operatoren (Forts.)Bitweise Logik-Operatoren& bitweises UND| bitweises ODER^ bitweises XOR~^ bitweises XNOR• Bitweise logische Verknüpfung• Ist ein Operand kürzer als der andere, wird er mitNullen gefüllt• Ergebnis hat immer dieselbe Größe wie der größteOperand~ bitweises NOTLogische Operatoren&& logisches UND|| logisches ODER! logisches NICHT• Ist ein Operand Null, wird FALSCH angenommen• Ist ein Operand ungleich Null, wird WAHRangenommen• Liefern immer Ergebnis der Größe eins, 0, 1 oder xa > bShift-OperatorenVerschiebe Vektor aum b Positionen nach linksVerschiebe Vektor aum b Positionen nach rechts• Der rechte Operand wird immer als Zahl vom Typunsigned integer behandelt• Leere Stellen werden mit Nullen aufgefüllt• x oder z im rechten Operanden führt zu xDST SS2003 - Hardware Description LanguagesSuS@TI, Seite 30


Verhaltensbasierte Beschreibungmodule MUX (A,B,C,D,Sel0,Sel1,Z);input A,B,C,D,Sel0,Sel1;output Z;reg Z;ABCZalways @(A or B or C or D or Sel0 or Sel1)begincase ({Sel1, Sel0})2’b00 : Z = A;2’b01 : Z = B;2’b10 : Z = C;2’b11 : Z = D;default : Z = 1’bx;endcaseendendmoduleDSel0Sel1• Modellierung des Verhaltens durch eineBeschreibung nahe am Algorithmus• Worin unterscheiden sich Algorithmen inSoftware zu Algorithmen für Hardware?• Antwort: Durch spezielle HDL-Konstrukte<strong>und</strong> sog. Coding-StylesDST SS2003 - Hardware Description LanguagesSuS@TI, Seite 31


ParameterParameter-Konstantenparameter Name = Konstante;parameter BusWidth = 8;• Parameter dienen zur Definition vonelementaren Konstanten, wie z.B.Verzögerungen (delays), Busbreiten <strong>und</strong>Schleifendurchläufe• Werden zwei oder mehr Konstantendeklariert, müssen die einzelnen Name-Werte-Paare mit Kommas getrennt werdenreg [BusWidth-1:0] DataBus;parameter Iterations = 5;for (k=0; k


RegisterNetze (wires) in Hardware:• Der Wert eines Signals in digitalenSchaltkreisen werden bestimmt vomTreiber des Netzes• Ist der Treiber abgeschaltet, befindet sichdas Netz im Zustand „high impedance“Variablen in einem Algorithmus:• Der Wert einer Variablen inProgrammiersprachen wird nicht einem Treiberzugewiesen, sondern direkt einem Wert• Dieser Wert wird gespeichert solange er nichtverändert wirdRegister in <strong>Verilog</strong>:• Register in <strong>Verilog</strong> als Modell von Variablen in Programmiersprachen• Für logische Werte vom Typ reg, für Zahlen vom Typ integer oder real (time, realtime)• Output-Ports vom Typ „reg“ werden in sequentiellen Schaltkreisen verwendet• Damit wird sichergestellt, dass der Wert des Signals bis zum nächsten Taktzyklusgehalten wird, statt in den Zustand „High Impedance“ zu wechseln• Register in <strong>Verilog</strong> sind nicht equivalent mit Flip-Flops in Hardware!DST SS2003 - Hardware Description LanguagesSuS@TI, Seite 33


„initial“- <strong>und</strong> „always“-Blöcke• Alle verhaltensbasierten Beschreibungen müssen in sog. „initial“- oder „always“-Blöcken eingebettet sein• Jeder dieser Blöcke innerhalb eines Modules werden nebenläufig ausgeführt• Jedes Modul kann beliebig viele Blöcke beinhalten• Blöcke können nicht verschachtelt werden• Anweisungen innerhalb eines Blocks werden mit „begin“ <strong>und</strong> „end“ gruppiert• Die Anweisungen zwischen „begin“ <strong>und</strong> „end“ werden sequentiell ausgeführt„initial“-Blöcke• Werden nur zu Beginn (Zeitpunkt 0)ausgeführt• Werden hauptsächlich benutzt, umRegister zu initialisieren• Nicht synthetisierbar„always“-Blöcke• Starten ebenfalls zum Zeitpunkt 0,werden jedoch immer wieder ausgeführt• Sie dienen zur Modellierung des „immeran“-Verhalten digitaler Schaltkreise• SynthetisierbarDST SS2003 - Hardware Description LanguagesSuS@TI, Seite 34


Variablen <strong>und</strong> Verhalten• Bei verhaltensbasierten Beschreibungen ist das Ziel einer Variablenzuweisungimmer ein Register, kein Netz (wire)• Das Schlüsselwort „assign“ entfällt• Die Zuweisung muss innerhalb eines „initial“ oder „always“-Blockes geschehen• Modellierung sequentieller Zuweisungen: sog. „blocking assignments“• Modellierung nebenläufiger Zuweisungen: sog. „non-blocking assignments“blocking assignment• Sequentielle Ausführung• Zuweisung durch das Symbol „=“• Die Variable ändert ihren Wert zum Zeitpunkt derAusführung der Zuweisungsoperation innerhalbder Sequenz von Anweisungen in einem Block• Bei Delays: Spezifizieren die Zeit zwischen denAnweisungennon-blocking assignment• Nebenläufige Ausführung• Zuweisung durch das Symbol „


Hochsprachenkonstruktex oder z als Ausdruck wirdals falsch interpretiertx oder Bei z mehr als Ausdruck als einer wirdAnweisung: als falsch begin interpretiert <strong>und</strong> endBedingungenif (Ausdruck) wahr_teil; else falsch_teil;Schleifenrepeat (Ausdruck) Anweisung(en);while (Ausdruck) Anweisung(en);for (A1 ; A2 ; A3) Anweisung(en);Initialisierungdes ZählersAbbruchbedingungModifikationdes ZählersDST SS2003 - Hardware Description LanguagesSuS@TI, Seite 36


Hochsprachenkonstrukte (Forts.)case, casex, casezFallunterscheidungencase(x,z) (Ausdruck)Belegung1 : Anweisung1;...BelegungN : AnweisungN;default Anweisung;endcase• case: Alle vier Logikwerte (0, 1, x, z)werden berücksichtigt• casez: z (high impedance) wird alsdon´t care interpretiert• casex: x <strong>und</strong> z werden als don´t careinterpretiert1xxx1000➼➻xx1xzz1z➼➻1xxx1000➼➻xx1xzz1z➼➼1xxx1000➼➼xx1xzz1z➼➼case ({D0, D1, D2, D3})4’b1xxx : Z = 0;4’bx1xx : Z = flag;4’bxx1x : Z = interrupt;4’bxxx1 : Z = 1;default Z = 0;endcasecasez ({D0, D1, D2, D3})4’b1xxx : Z = 0;4’bx1xx : Z = flag;4’bxx1x : Z = interrupt;4’bxxx1 : Z = 1;default Z = 0;endcasecasex ({D0, D1, D2, D3})4’b1xxx : Z = 0;4’bx1xx : Z = flag;4’bxx1x : Z = interrupt;4’bxxx1 : Z = 1;default Z = 0;endcaseDST SS2003 - Hardware Description LanguagesSuS@TI, Seite 37


ProzedurenProzedurentask Prozedurname;input Signal1;output Signal2;inout Signal3;beginAnweisung1;...AnweisungN;endendtaskDefinition derArgumente,Anzahl beliebig• Konzept ähnlich den Programmiersprachen: Mehrfachnutzungdes Codes (design re-use)• Aufruf der Prozedur: Prozedurname(Liste der Argumente);• Argumente werden gemäß ihrer Reihenfolge bei der Definitionin der Prozedur interpretiert• Werden zu dem Zeitpunkt des Aufrufs ausgeführtDST SS2003 - Hardware Description LanguagesSuS@TI, Seite 38


FunktionenFalls Vektor als Rückgabewert:Definition der VektorgrößeFunktionenfunction Funktionsname;input Signal;beginAnweisung1;...AnweisungN;endendfunctionKeine Definitionvon Ausgängen(output, inout)erlaubt• Funktionen liefern nur einen Wert zurück• Falls nicht anders spezifiziert, ist Rückgabewert ein 1-Bit Register (reg)• Keine Definition von Ausgängen (output, inout) erlaubt• Rückgabe geschieht durch Zuweisung an die durch den Funktionsnamengegebene lokale Variable• Kein Spezifikation von delays <strong>und</strong> keine Ereigniskontrolle in Funktionen erlaubt• Funktionen werden in einer Zeiteinheit der Simulation ausgeführtDST SS2003 - Hardware Description LanguagesSuS@TI, Seite 39


Die „sensitivity list“ <strong>und</strong> „events“• Neben Spezifikation von „delays“ zur zeitlichenKontrolle der Ausführung: „Events“• Events sind Änderungen in einem Netz oder Register• Events können an denselben Stellen verwendetwerden wie delays• Events werden mit dem @-Zeichen spezifiziert• Es gibt 3 Arten von Events@ (posedge Signal) Anweisung@ (negedge Signal) Anweisung@ (Signal) Anweisung• Wird eine Anweisung durch mehrere Signaleaktiviert, sprich man von einer „sensitivity list“• Die einzelnen Signale werden durch dasSchlüsselwort „or“ getrennt• Sensitivity lists werden hauptsächlich in always-Blöcken verwendet, um die unendlicheIteration anzuhalten bzw. fortzusetzenEventSTOPalways @(posedge reset or posedge clk)beginif (reset) Q = 1´b0;else if (posedge clk) Q = D;endDST SS2003 - Hardware Description LanguagesSuS@TI, Seite 40


Simulation <strong>und</strong> SyntheseSynthetisierbareKonstrukteSimulierbareKonstrukte• Die meisten der vorgestellten Konstrukte sindsynthetisierbar• Nicht synthetisierbar sind initial-Anweisungen,UDPs, delays <strong>und</strong> einige weitere Konstrukte• Die Menge der synthetisierbaren Sprachelementestellt eine Untermenge der simulierbaren <strong>Verilog</strong>-Konstrukte dar• Synthetisierbare Logik kann auf mehrere Arten ineiner HDL beschrieben werden• Sie unterscheiden sich jedoch i.d.R. durch ihreEffizienz bei der Implementierung• Deshalb: Verwendung eines sog. „coding style“, derbestimmten Sprachkonstrukten eine festeHardware-Implementierung zuordnet• Achtung: coding styles sind teilweise Synthese-Toolabhängig!DST SS2003 - Hardware Description LanguagesSuS@TI, Seite 41


Synthese von Flip-Flopsreg X, Y;always @(A or B or C)beginX


Achtung: Latchesalwaysbeginendif (Flag)elsebeginendErzeugt LatchesZ = A & B;if (!Sel)elsebeginendbeginendX = A; Y = B;X = B; Y = A;Keine Aussageüber X <strong>und</strong> YKeine Aussageüber ZKeine Aussageüber Zalwaysbeginendif (Flag)elseFrei von LatchesbeginendZ = A & B; X = 0; Y = 0;if (!Sel)elsebeginendbeginendX = A; Y = B; Z = 0;X = B; Y = A; Z = 0;Zuweisung anX <strong>und</strong> YZuweisungan ZZuweisungan ZDST SS2003 - Hardware Description LanguagesSuS@TI, Seite 43


Beispielmodule counter (data, clk, clrn, ena, ld, count);input [7:0] data;input clk, clrn, ena, ld;output [7:0] count;reg [7:0] count_tmp;always @(posedge clk or posedge clrn)beginif (clrn)count_tmp = 'b0;else if (ld)count_tmp = data;else if (ena)count_tmp = count_tmp + 'b1;endassign count = count_tmp;endmoduleDST SS2003 - Hardware Description LanguagesSuS@TI, Seite 44

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!