73
Einführung in den HDL- gestützten Schaltungsentwurf Einführung in VHDL

Einführung in den HDL- gestützten Schaltungsentwurf · n VHDL unterscheidet zwischen 2 Arten der Verzögerung n Träge Verzögerung (inertial delay) n default n Benutzer spezifiziert

  • Upload
    buinhan

  • View
    224

  • Download
    0

Embed Size (px)

Citation preview

Einführung in den HDL-gestützten Schaltungsentwurf

Einführung in VHDL

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

Datentypen in VHDL

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

Datentypen in VHDL

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;