Ablauf des Entwurfs
golden golden specificationspecification
SpezifikationSpezifikation Funktionale SimulationFunktionale Simulation TestbenchTestbench
LogiksyntheseLogiksynthese
ScanpathScanpath Place and Route
Place and Route
Gate-Level SimulationGate-Level Simulation
Formale VerifikationFormale Verifikation
Schrittweise Verfeinerungn Top-down-Entwurfsprozessn Kreations-Phase
n Erstellen der Modelle
n Verifikations-Phasen Überprüfen der Korrektheitn Simulation n formale Methoden
n Modelle und Abstraktionn Hierarchische Darstellungn Unterscheide: Verifikation und Test
Komplexität (log)
Zeit
design gap
Integrationsdichte
Synthesewerkzeuge
Beschreibungssprachen für Software und Hardware
main () {a=func1(b)
func1 (a) {...
func2 (a) {...
...
...
Funktions-einheit A
Funktions-einheit B
Funktionseinheit C
GegenüberstellungProzeduraleProgrammiersprache
Hardware-Schaltung bzw.-beschreibungsprache
Sequentielle Abarbeitungaller Befehlszeilen
Sequentiell innerhalb der FE,sonst parallel möglich
Aktivierung durchProzeduraufruf
Neuberechung der Ausgängefalls Änderung an Eingängen
Parameterübergabe Informationsaustausch durchSignale und Zustände
Variablen verschiedenenTyps
Verschiedene Typen inBeschreibung, aber nicht inRealisierung
Schaltungsbeschreibung durch VHDLn Steht für VHSIC Hardware Description
Language
n Entwicklungn VHSIC (Very High Speed Integrated Circuit) Projektn Projektträger US Regierung (1980)n IEEE Standard 1076.1 für VHDL (1987)n IEEE Standard 1076.1 updated (1993)
Gründe
n Standard/Portabilitätn einheitliche Schnittstelle zwischen
Werkzeugen und Firmenn Entwürfe können durch verschiedene
Synthesewerkzeuge optimiert und durch verschiedene Analysewerkzeuge simuliert werden
n Technologie- und Firmenunabhängigkeit n Wechsel des Technologiepartners möglich
Eigenschaften von VHDL
n Unterstützung durch DOD (US Department of Defense)
n Starke Modellierungsmöglichkeitenn Entwurf parametrisierter Schaltungen
möglichn z.B. Prozessor mit Bitbreite n
n Wiederverwendbarkeit!
Struktur
n Aufbau einer Beschreibungn Baustein bzw. Schaltung besteht aus
n Entityn Spezifikation des Interface
n mehreren Architekturenn alternative Realisierungenn auf 2 verschiedenen Abstraktionsebenen
n strukturellen verhaltensorientierte
Struktur
use Bereitstellung von Bibliotheken
configuration entity ↔ architecture
entity Schnittstellenbeschreibung
architecture Implementierung der Entity
Anwendung von VHDL
Anwendung Verwendung Adressat
Dokumentation Spezifikation Leser
Simulation Funktionale Beschreibung
Simulator
Synthese Funktionale Beschreibung, die in Hardware übersetzt werden kann
Synthesewerkzeug
Entity
n PORT-Anweisungn spezifiziert die Ein- und Ausgänge, also
die Ports, der Entity
n Entity kann man sich vorstellen als „Symbol einer Komponente“
ENTITY half_adder ISPORT (x, y, enable: IN bit;
carry, result: OUT bit);END half_adder;
Port
n Es gibt 5 Port Modesn IN: der Port ist ein Eingangsportn OUT: der Port ist ein Ausgangsportn INOUT: bidirektionaler Portn BUFFER: bidirektionaler Port; zu jedem
Zeitpunkt von höchstens einer Quelle getriebenn LINKAGE: unbekannt, ob Eingang oder
Ausgang
Architekturn Architekturen geben das Verhalten einer
Komponente ann Beispiel:
ARCHITECTURE behavior1 OF half_adder ISBEGIN
PROCESS (enable, x, y)BEGIN
IF (enable = ´1‘) THENresult <= x XOR y;carry <= x AND y;
ELSEcarry <= ´0‘;result <= ´0‘;
END IFEND PROCESS
END behavior1;
IF enable= 1 THENresult=x XOR ycarry=x AND y
elseresult=0carry=0
Zusammenhang von Architektur und Entityn Architekturen
n Beschreibungen der Entityn strukturelln verhaltensorientiert
n Schaltung wird spezifiziertn Subkomponenten (Gatter, etc.)n Verdrahtung
n Mehrere Architekturen für eine Entityn verschiedene Realisierungen
n Optimieren nach verschiedenen Kriterienn Fläche, Leistung, Verzögerungszeit, ...
Architektur - strukturelle Beschreibung
n Netzlistenbeschreibungn Hardware-Komponentenn Instanziierung der
Komponenten
entity NANDXOR isPORT ( A,B, C : IN bit;
D : OUT bit );end NANDXOR;
architecture NETLIST of NANDXOR is component NAND
PORT ( X,Y : IN bit ;Z : OUT bit);
end component ;component XOR
PORT ( X,Y : IN bit ;Z : OUT bit);
signal T : std_logic;begin
U1 : NANDPORT MAP (A,B,T);
U2 : XORPORT MAP (T,C,D);
end NETLIST;
Architektur - verhaltensorientierte Beschreibung
n Konkurrierende Anweisungenn Signalzuweisungen werden parallel ausgewertetn Neuberechnung der Zuweisungen bei Signaländerung
n Symbol für Signalzuweisung <= z.B.: a <= bn Sequentielle Verhaltensbeschreibung
n Beschreibung analog zu typischen Programmiersprachenn Abarbeitung der Anweisungen sequentiell
(Zeile für Zeile)n Prozesse und Variablenn Sensitivitätsliste
Implizierte Sensitivitätsliste
Beispiel – verhaltensorientierteBeschreibung
entity NANDXOR isPORT ( A,B, C : IN bit;
D : OUT bit );end NANDXOR;
architecture BEHAVE of NANDXOR issignal T : std_logic ;
beginT <= A nand B after 5 ns;D <= T xor C after 5 ns;
end BEHAVE;
• Konkurrierende Anweisungen
Architektur - sequentielle Beschreibung
n Konkurrierende Anweisungenn Signalzuweisungen werden parallel ausgewertetn Neuberechnung der Zuweisungen bei
Signaländerung
Symbol für Signalzuweisung <= z.B. a <= b
Implizierte Sensitivitätsliste
Architektur - sequentielle Beschreibung
n Sequentielle Verhaltensbeschreibungn Beschreibung analog zu typischen
Programmiersprachenn Abarbeitung der Anweisungen sequentiell
(Zeile für Zeile)n Prozesse und Variablenn Sensitivitätslisten Kontrollstrukturen
Beispiel - sequentielle Beschreibung
entity NANDXOR isPORT ( A,B, C : IN bit;
D : OUT bit );end NANDXOR;
architecture SEQ2 of NANDXOR issignal T : std_logic;
beginp0 : T <= A nand B after 5 ns;p1 : process (T,C);begin
D <= T xor C after 10 ns;end process p1;
end SEQ2;
architecture SEQ1 of NANDXOR isbegin
process (A, B, C)begin
if (C='0') thenD <= A nand B after 5 ns;
elseD <= A and B after 10 ns;
end if;end process;
end SEQ1;
Instanziierung der Entity -Konfiguration
n 4 verschiedene Architekturen für die gleiche Entityn Welche benutzt wird, muss bei der Instanziierung
von NANDXOR festgelegt werdenn Auswahl einer Architektur nach bestimmten
Kriterienn Konfiguration weist der Entity eine Architektur zun Benutzte Komponenten werden angegeben
Instanziierung der Entity -Konfiguration
Beispiel:configuration NANDXORCON of NANDXOR is
for netlistfor U1 : NAND use entity WORK.mynand(version1) ;for U2 : XOR use entity WORK.mynand(version1) ;
end for ;end NANDXORCON ;
Konstanten
n Konstanten n Wert einer Konstante kann nicht verändert
werdenn Beispiele
n constant PERIOD : time := 100 ns;n constant PI : real := 3.1415n constant DEFAULT :bit_vector(0 to 3) :="1001“
Variablen
n Variablen n unterscheiden sich nicht von Variablen anderer
höherer Programmiersprachenn kein Gegenstück in der Hardware Prozessen werden für Zwischenrechnungen verwendet n Beispiele
n variable ROW, COLUMN : integer range 0 to 31;n variable SUM : natural := 0;n variable FELD : TWO_DIM (0 to 15, 0 to 31);
Signale
n Sind in anderen Programmiersprachen nicht zu finden
n Kann man als verbindende physikalische Leitung ansehen
n Beispiele n signal CLK, RESETn : bit;n signal COUNTER : integer range 0 to 31;n signal RAM : TWO_DIM (0 to 15, 0 to 31);
Variablen contra Signale
n Verschiedene Syntax für Zuweisungenn variable_assignment ::=
target := expressionn signal_assignment ::=
target <= [ transport ] waveform_element { , waveform_element }
n waveform_element ::= value_expression [ after time_expression ] |null [ after time_expression ]
Verzögerungsarten Bei Signalen
n VHDL unterscheidet zwischen 2 Arten der Verzögerung
n Träge Verzögerung (inertial delay)n defaultn Benutzer spezifiziert Verzögerungszeit eines Gatters oder
einer Operationn absorbiert Eingangspulse, die kürzer als spezifizierte
Verzögerungszeit sind
n Nichtträge Verzögerung (transport delay)n gibt alle Eingangspulse weiter
Beispiele VerzögerungsartenB
BUFDELAY = 20
A
B
A10
Träge Verzögerung
BUFDELAY = 20
A
10A Nichtträge Verzögerung
B20
Anwendung
n Deklarationn Variablen werden in Prozessen bzw.
Unterprogrammen deklariert und sind auch nur da sichtbar
n Signale können nicht in Prozessen bzw. Unterprogrammen deklariert werden
n Verwendungn Variablen werden zum Abspeichern temporärer
Werte benutztn Signale stehen üblicherweise für Verbindungen in
der Hardware
Wertzuweisung
n Erfolgt sofort bei Variablen, wenn Variablenzuweisung ausgeführt wird
z.B. x := x+1;
n Erfolgt nicht sofort bei Signalen, wenn Signalzuweisung ausgeführt wird
z.B. x <= y ;
n Signalzuweisung aktualisiert den Signaltreibern Signaltreiber gibt Information an die Signale erst
an das Signal weiter, wenn Prozess angehalten hat
Attribute von Signalen (1)
n SIG'delayed(T)n ist vom gleichen Typ wie SIG; liefert das um Zeit
T verzögerte Signaln SIG'stable(T)
n ist vom Typ Boolean; ist TRUE, wenn Wert von SIG sich in der letzten Zeit T nicht verändert hat
n SIG'event n ist vom Typ Boolean; ist TRUE, wenn in
aktuellem Simulationszyklus Änderung auf SIG erfolgt
Attribute von Signalen (2)
n SIG'transactionn ist ein Signal vom Typ Bit; ändert bei jeder
Zuweisung an SIG seinen Wert
n SIG'last_eventn ist vom Typ TIME und gibt die Zeit seit der
letzten Änderung auf SIG an
n SIG'last_valuen ist vom gleichen Typ wie SIG; gibt Wert von SIG
vor letzter Änderung an
Integern Garantierter Bereich bei jeder VHDL Implementierung:
-2.147.483.647 bis +2.147.483.647
n BeispielARCHITECTURE test_int OF test IS
BEGIN PROCESS (X)VARIABLE a: INTEGER;BEGIN
a := 1; -- OKa := -1; -- OKa := 1.0; -- bad...
END PROCESS;END test;
Realn Garantierter Bereich 1.0e38 bis +1.0e38
mit wenigstens 6 Dezimalstellen Genauigkeitn Beispiel
ARCHITECTURE test_real OF test ISBEGIN PROCESS (X)
VARIABLE a: REAL;BEGIN
a := 1.3; -- OKa := -7.5; -- OKa := 1; -- bada := 5.3 ns; -- bad...END PROCESS;
END test;
Aufzählungstypen
n Bereich wird vom Nutzer angegeben
n BeispielTYPE binary IS ( ON, OFF );ARCHITECTURE test_enum OF test ISBEGINPROCESS (X)VARIABLE a: binary;
BEGINa := ON; -- OK...
END PROCESS;END test;
Physikalische Typenn Bereich
n kann vom Benutzer angegeben werdenn den Werten sind Einheiten zugeordnetn Beispiel
TYPE widerstand IS RANGE 0 TO 1000000;UNITS
ohm;Kohm = 1000 ohm;Mohm = 1000 kohm;
END UNITS;
variable a: widerstand;a := 1; --bada := 1 Mohm; --OK
Datentyp TIME
n Vordefiniert in VHDL ist nur der Typ TIMEn type TIME is range
-9223372036854775807 to +9223372036854775807units
fs; -- femtosecondps = 1000 fs; -- picosecondns = 1000 ps; -- nanosecondus = 1000 ns; -- microsecondms = 1000 us; -- millisecondsec = 1000 ms; -- secondmin = 60 sec; -- minutehr = 60 min; -- hour
end units;
Paket ‚standard‘ (1)n Vordefinierte Typen und Funktionen des
Package ‚standard‘ (außer TIME)package STANDARD is
type BOOLEAN is (FALSE, TRUE);type BIT is ('0', '1');type CHARACTER is (NUL, SH, STX, EOT, ENQ, ACK,
BEL,...., 'x', 'y', 'z', '{', '|', '}', '~', DEL );type SEVERITY_LEVEL is (NOTE, WARNING,
ERROR, FAILURE);type INTEGER is range -2147483648 to +2147483647;type REAL is range-0.1797693134862e+309 to +0.1797693134862e+309;
Paket ‚standard‘ (2)
function NOW return TIME;
subtype NATURAL is INTEGER range 0 to INTEGER'HIGH;
subtype POSITIVE is INTEGER range 1 to INTEGER'HIGH;
type STRING is array ( POSITIVE range <> ) of CHARACTER;
type BIT_VECTOR is array ( NATURAL range <> ) of BIT;end STANDARD
n Realisierung der Standard-Paketes ist versteckt (hiding information)
n IEEE Bibliothek setzt auf ‚standard‘ auf
Zusammengesetzte Datentypen - Array
n Arrayn zum Bündeln von Variablen gleichen Typsn Unterscheidung
n Feldern mit vorgegebenen Grenzenn type wort is array (0 to 31) of bit;n type controller_zustand is (initial,idle,active,error);n type history is array (idle to error) of natural;
-- falls eindeutign type history is array (contoller_zustand range idle to error) of natural;
n Feldern mit nicht vorgegebenen Grenzen n type RAM is array (natural range <>, natural range <>) of wort;
n Grenzen werden bei der Deklaration festgelegtn variable kleiner_speicher: RAM(1 to 16, 1 to 16);n subtype small_RAM is RAM(1 to 16, 1 to 16);
Attribute von Feldernn A'left(D), A'right(D)
n liefert die linke, rechte Grenze des D-ten Indexes des Feldes A
n A'low(D), A'high(D)n liefert die kleinste, größte Grenze des D-ten Indexes des
Feldes A
n A'length(D)n liefert die Größe des D-ten Indexraumes des Feldes A
n A'range(D), A'reverse_range(D)n liefert den (gespiegelten) Indexraum
Attribute von Feldern
n Beispielevariable speicher: RAM(1 to 16, 1 to 15);
-- speicher'reverse_range(2) ist 15 to 1-- speicher'right(1) ist 16,-- speicher'low(2) ist 1;
Zusammengesetzte Datentypen - Recordn Record
n Bündeln von Variablen verschiedenen Typsn können von jedem VHDL Datentyp seinn Record-Elemente werden über den Record-Namen
zugegriffen
n BeispielTYPE binary IS ( ON, OFF );
TYPE switch_info ISRECORD
status : binary;IDnumber: integer;
END RECORD;VARIABLE switch : switch_info;switch.status := ON;switch.IDnumber := 30;
Datentyp ACCESS
n Variablen dieses Typs sind ZeigerTYPE value_cell;
TYPE value_ptr IS ACCESS value_cell;
TYPE value_cell IS RECORDvalue : bit_vector(0 TO 3);
next_cell : value_ptr;END RECORD;
VARIABLE value_list: value_ptr;
value_list := NEW value_cell‘(B“1000“,value_list);
value_list := NEW value_cell‘(B“0010“,value_list);
WHILE value_list /= NULL LOOPcell_to_be_deleted := value_list;
value_list := value_list.next_cell;DEALLOCATE(cell_to_be_deleted);
END LOOP;
Sub-Typenn Definieren Teilmengen eines existierenden
Typsn Einschränkung eines Typs
Beispiel:
subtype NATURAL isINTEGER range 0 to +2147483647 ;
Pakete
n Benutzung des Package‘s von IEEE n library- und use-Anweisung:
n library IEEE;n use IEEE.std_logic_1164.all;n use IEEE.std_logic_misc.all;n use IEEE.std_logic_arith.all;n use IEEE.std_logic_components.all;
Das Paket IEEE.std_logic_1164
n Die Bibliothek IEEE enthält das Paket std_logic_1164, in dem gebräuchliche Typen und Funktionen vordefiniert sindPACKAGE std_logic_1164 IS -- logic state system
TYPE std_ulogic IS ('U', -- Uninitialized'X', -- Forcing Unknown'0', -- Forcing 0'1', -- Forcing 1'Z', -- High Impedance'W', -- Weak Unknown'L', -- Weak 0'H', -- Weak 1'-' ); -- Don't care
ATTRIBUTE ENUM_ENCODING OF std_ulogic: TYPE IS "U D 0 1 Z D 0 1 D";TYPE std_ulogic_vector IS ARRAY (natural RANGE <>) OF std_ulogic;
n Funktionen wie and, or, xor, ...
VHDL ‚Basics‘n Identifiers
n Reservierte Worte (reserved words)
n Literale (literals)
n Operatoren
n Kontrollstrukturen
Identifiersn Werden für Namen und reservierte Wörter
benutzt
n Syntaxn identifier ::= letter { [ underline ] letter_or_digit }
letter_or_digit ::= letter | digit
n Beispielen carry_OUT und Count7SUB_2_goX
n Beispiele ungültiger Wörtern 7AB und @B
Reservierte Wörter (´87)abs access after alias alland architecture array assert attributebegin block body buffer buscase component configuration constant disconnectdownto else elsif end entityexit file for function generategeneric guarded if in inoutis label library linkage loopmap mod nand new nextnor not null of onopen or others out packageport procedure process range recordregister rem report return selectseverity signal subtype then totransport type units until usevariable wait when while withxor
Reservierte Wörter (´93)
group impureinertial literalpostponed purereject rolror sharedsla sllsra srlunaffected xnor
Kommentare
n Beginnen mit "--" und enden mit dem Zeilenende
n BeispielA <= B; -- Weise dem Signal A das Signal B zu
-- in der folgenden Anweisung wird ....
Literal
n Literal kann seinn eine Zahl, n ein Zeichen, n ein String n ein Bitstring
n Zahl darf über beliebigen Basis dargestellt werden.
Beispieleinteger: 21, 0, 1E2, 3e4, 123_000real: 11.0, 0.0, 0.468, 3.141_592_6real mit Exponent: 1.23E-11,
1.0E+4, 3.024E+23, 1000E-1
Beispieleinteger 252: 2#1111_1100#,
16#FC#, 7#510#real mit Exponent: 254.0: 16#F.E#E+1, 2#1.1111_110#E7
Zeichen und Zeichenketten
n Zeichen n wird dargestellt durch einen durch zwei Apostrophe
eingeschlossenes Maschinenalphabetszeichenn Beispiele: 'A', 'a' , '%', ''', ' ‘
n String n ist eine durch Quotation (") eingeschlossene Folge von
Maschinenalphabetszeichen.n Beispiele: "Setup time violation", "", " ", """“
n Bitstring n ist eine Folge von Bits, die binär, oktal oder hexadezimal
dargestellt werden kannn Beispiel: X"FFF", X"F_FF", O"7777", B"111_111_111_111"
Attribute
n Zuordnung zu Typen, Feldern und Signalen
n Zum (Sub-) Typ T vordefinierte Attribute n T'left, T'right: liefert bei Aufzählungstyp T den in der
Definition von T links, rechts stehenden Wertn T'low, T'high liefert den kleinsten, den größten Wert aus Tn T'base liefert den Basistyp zurück
n Verwendungsbeispiel: T'base'low
n T'pos(X) liefert die Position des Wertes X im Typ T zurückn T'val(X) liefert den Wert der Position X im Typ T zurück
Operatoren
n Logische Operatoren: and, or, nand, nor, xor(Beispiel: A and B and C beschreibt 3-Input AND-Gatter)
n Relationale Operatoren: =, /=, <, <=, >, >=n Addition und Konkatenation: +, -, &n Vorzeichen: +, -n Multiplikation: *, /, mod, remn Exponent, Absolutbetrag, Komplement: **,
abs, not
Kontrollstrukturenn Nur in Prozessen zur sequentiellen
Modellierung möglichn Kontrollstrukturen sind
n IFn CASEn LOOPn ASSERTn WAIT
n Beschreibung im Bachus-Naur Format
Kontrollstruktur IF
n Syntaxn if_statement ::=
if condition then sequence_of_statements { elsif condition then sequence_of_statements }[ else sequence_of_statements ]end if;
architecture SEQ1 of NANDXOR isbegin
process (A, B, C)begin
if (C='0') thenD <= A nand B after 5
ns;else
D <= A and B after 10 ns;
end if;end process;
end SEQ1;
Kontrollstruktur CASEn Syntax
case_statement ::= case expression is when choice =>sequence_of_statements[ when choice =>
sequence_of_statements ]end case; architecture SEQ3 of NANDXOR is
beginprocess (A, B, C)begin
case C iswhen 0 => D <= A nand B after 5 ns;when 1 => D <= A and B after 10 ns;
end case ;end process;
end SEQ3;
Kontrollstruktur loopn Syntax
n loop_statement ::= [ loop_label : ] [ whilecondition | for identifier in range ] loop
sequence_of_statements end loop [ loop_label ]
n Laufvariablen der FOR-Schleifen Können innerhalb des Schleifenblocks nicht
verändert werdenn Sind außerhalb nicht bekanntn Dürfen nicht deklariert werden
Beispiele LOOPWHILE-Schleife
while (day = weekday) loopday := get_next_day(day) ;
end loop ;
FOR-Schleifefor i in 1 to 10 loop
i_squared(i) := i*i ;end loop ;
Kontrollstruktur ASSERT
n Syntaxn assertion_statement ::= assert condition [ report
expression ] [ severity expression];
n Semantik und Verwendungn prüft die Bedingung condition ab
n Fehlerausgabe, falls Bedingung nicht erfüllt ist
n falls Bedingung nicht erfüllt ist, wirdn das Argument von report als Meldung ausgegebenn der Fehlerstatus auf das Argument von severity gesetzt
assert (x)report ‘‘setup violation“severity WARNING ;
Beispiel:
Kontrollstruktur WAITn Syntax
n wait_statement ::= wait [sensitivity_clause][condition_clause] [time_out_clause];
n sensitivity_clause ::= on sensitivity_listn conditional_clause ::= until boolean_expressionn time_out_clause ::= for time_expression
n Beispiel: wait on A, B until (C or D) = '0' for 100 ns ;n erfolgt ein Event auf A oder B, so wird die Bedingung
ausgewertet und gewartet, bis diese erfüllt istn nach spätestens 100 ns geht es weiter
n Dynamisches Ändern der Sensitivitätslisten Deadlocks vermeiden!
Weitere Kontrollstrukturenn NEXT
n beendet Ausführung der momentanen Iteration (z.B. FOR)
n nächste Iteration wird ausgeführtn EXIT
n ermöglicht Verlassen einer Schleife (LOOP)n springt zu END LOOP n nachfolgende Anweisung wird ausgeführt
Dies und das ...n Weiterhin wird durch VHDL folgendes
unterstützt:
n Hierarchische Beschreibungen
n Reguläre Beschreibungen
n Parametrisierter Entwurf
a3 a2 a1 a0b3 b2 b1 b0
OV-test
overflow
Komplexität
• Laufzeit ist gleich c⋅n für eine Konstante c≥ 1• Gatteranzahl ist ebenfalls in O(n)
VAc3
s3
VAc2
s2
VAc1
s1
VA cinc0
s0
Carry-Ripple Addierer (Zweierkomplementdarstellung)
Schulmethode der Addition
Carry-Ripple Addierer
VHDL-Beschreibung
architecture verhalten of carry_ripple_adder iscomponent VA port (a, b, c_in: in std_logic;
sum, c_out: out std_logic);end component;component OV_testport ( a, b, c_in: in std_logic;
overflow: out std_logic);end component;signal c: std_logic_vector(n-1 downto 0);
beginlsb: VA
port map(a(0),b(0),c_in,s(0),c(0));other_bits: for i in 1 to n-1 generate
adder_cell: VAport map(a(i),b(i),c(i-1),s(i),c(i));
end generate;overflow_test: OV_test
port map (a(n-1),b(n-1),c(n-1),overflow));end;
Addition von Ladner & Fischer
n Berechnung der Übertragsbits macht die Addition langsam, da si=ai⊕ bi ⊕ ci-1
n Versuche die Übertragsberechnung zu beschleunigen
n Können die Überträge cn-1,..., c0 in Zeit T(n) berechnet werden, so kann die Addition in Zeit T(n)+O(1) ausgeführt werden.
an-1 an-2 . . . aj . . . ak . . . a1 a0bn-1 bn-2 . . . bj . . . bk . . . b1 b0
Ist der Block [j:k] generierend?absorbierend?propagierend?
generierend : unabhängig von dem Wert ck-1wird cj immer 1 sein
absorbierend : unabhängig von dem Wert ck-1wird cj immer 0 sein
propagierend : cj erhält den Wert von ck-1
Berechne das Attribut flag(i:0) für jeden Block [i:0] Lemma Für cin=0: ci=1 ⇔ flag(i:0)=G.
Für cin=1: ci=1 ⇔ flag(i:0)=P | G
Additionsprinzip
AGP-Flagsn Arbeite im folgenden mit den Symbolen A, P
und Gn Implementiere hierfür ein entsprechendes
VHDL-Packagelibrary ieee;use ieee.std_logic_1164.all;package agp_arithmetic is
type agp is ( A, G, P );type agp_vector is array ( natural range <> ) of agp;function "+" (agp1, agp2: in agp) return agp;function convert_std_agp (op1, op2: in std_logic) return agp;
end;