Grundlagen der Technischen Informatik Kapitel 10, VHDL, Teil 1 Dr.-Ing. Stefan Wildermann Lehrstuhl für Hardware-Software-Co-Design Grundlagen der Technischen Informatik VHSIC Hardware Description Language Zur Entwicklung von VHDL • VHSIC (Very High Speed Integrated Circuit) Projekt, Projektträger US-Regierung (1980) • VHDL: VHSIC Hardware Description Language • IEEE Standard 1076.1 für VHDL (1987) … • IEEE Standard 1076-2008 (release 2009) Grundlagen der Technischen Informatik 2 Vorteile von VHDL • Standard einheitliche Schnittstelle zwischen Werkzeugen und Firmen Portabilität Entwürfe können durch verschiedene Synthesewerkzeuge optimiert und durch verschiedene Analysewerkzeuge simuliert werden Technologie- und Firmenunabhängigkeit Wechsel des Technologiepartners leicht möglich • Unterstützung durch DOD (US Department of Defense) große Überlebenswahrscheinlichkeit • Starke Modellierungsmöglichkeiten: – Entwurf parametrisierter Schaltungen möglich, z.B. Prozessor mit Bitbreite n, Wiederverwendbarkeit! Grundlagen der Technischen Informatik 3 Wie wird VHDL eingesetzt? • Beschreibung des gewünschten Verhaltens auf hoher Abstraktionsebene. • Modellierungssprache • Dokumentierungssprache • Simulationssprache Testen der Spezifikation durch Simulation des Modells • Synthesesprache Automatische Synthese für Zielarchitekturen wie Field-Programmable Gate Arrays (FPGAs) und Application-Specific Integrated Circuits (ASICs) Grundlagen der Technischen Informatik 4 Aufbau einer VHDL-Beschreibung use Bereitstellung von Bibliotheken entity Definition der Schnittstelle zur Umgebung architecture Implementierung der Entity, Aufbau und Funktion des Systems Grundlagen der Technischen Informatik 5 VHDL-Basics: Bezeichner Bezeichner (Identifiers) werden für Namen (von Entities, Architectures, Signalen, Variablen) benutzt Syntax identifier: letter_or_digit: letter { [ underline ] letter_or_digit } letter | digit Beispiele carry_OUT Count7SUB_2_goX Beispiele ungültiger Wörter 7AB @B PI__A Wichtig: VHDL beachtet Groß- und Kleinschreibung nicht Grundlagen der Technischen Informatik 6 VHDL-Basics: Kommentare Ein Kommentar beginnt mit "--" und endet mit dem Zeilenenende. Beispiel A <= B; -- Weise dem Signal A den Wert von Signal B zu -- Anweisungen werden mit Semikolon (;) abgeschlossen Grundlagen der Technischen Informatik 7 Aufbau einer VHDL-Beschreibung use Bereitstellung von Bibliotheken entity Definition der Schnittstelle zur Umgebung architecture Implementierung der Entity, Aufbau und Funktion des Systems Grundlagen der Technischen Informatik 8 Entities • Entity beschreibt die Schnittstelle eines Moduls • Die port_liste ist eine Liste der Ein- und Ausgänge, also der Ports der Entity, • ENTITY , IS, PORT und END sind VHDL-Schlüsselwörter und können nicht als Bezeichner verwendet werden ENTITY entity_name IS PORT( port_liste ); END [entity_name]; eckige Klammer bedeutet, die Angabe ist optional Grundlagen der Technischen Informatik 9 Entities • Schnittstellenbeschreibung eines Halbaddierers • Eine ENTITY kann man sich als „Symbol einer Komponente“ vorstellen Listenelement: ENTITY half_adder IS PORT( i_x : IN bit; i_y : IN bit; i_enable : IN bit; o_carry : OUT bit; o_result : OUT bit ); END half_adder; identifier : PORT_MODUS Datentyp Strichpunkte trennen nur die Listenelemente voneinander, und deshalb hat der letzte Eintrag keinen Strichpunkt. Grundlagen der Technischen Informatik 10 Entities: Port-Modus Es gibt 5 Port-Modi: • • • • IN OUT INOUT BUFFER • LINKAGE -- der Port ist ein Eingangsport -- der Port ist ein Ausgangsport -- bidirektionaler Port -- bidirektionaler Port; zu jedem Zeitpunkt wird der Port nur von höchstens einer Quelle getrieben -- unbekannt, ob Eingang oder Ausgang ENTITY half_adder IS PORT( i_x : IN bit; i_y : IN bit; i_enable : IN bit; o_carry : OUT bit; o_result : OUT bit ); END half_adder; Grundlagen der Technischen Informatik 11 nicht verwenden Aufbau einer VHDL-Beschreibung use Bereitstellung von Bibliotheken entity Definition der Schnittstelle zur Umgebung architecture Implementierung der Entity, Aufbau und Funktion des Systems Grundlagen der Technischen Informatik 12 Datentypen im Package Standard (1) Package Standard 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; type TIME is range -9223372036854775807 to +9223372036854775807 units fs; -- femtosecond ps = 1000 fs; -- picosecond ns = 1000 ps; -- nanosecond us = 1000 ns; -- microsecond ms = 1000 us; -- millisecond sec = 1000 ms; -- second min = 60 sec; -- minute hr = 60 min; -- hour end units; Grundlagen der Technischen Informatik 13 Datentypen im Package Standard (1) 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; • Realisierung des Standard-Paketes ist versteckt ("information hiding") • Wir benutzen die IEEE Library, die auf dem Standard-Package aufsetzt. Grundlagen der Technischen Informatik 14 IEEE- Packages • library- und use-Anweisung: library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_misc.all; use IEEE.std_logic_arith.all; use IEEE.std_logic_components.all; .all bedeutet, dass alle Teile der Bibliothek übernommen werden Grundlagen der Technischen Informatik 15 Package IEEE.std_logic_1164 Die Bibliothek IEEE • enthält das Paket std_logic_1164, in dem gebräuchliche Typen und Funktionen vordefiniert sind. package std_logic_1164 is -- logic state system type std_logic is( 'u', -- Uninitialized 'x', -- Forcing Unknown '0', -- Forcing 0 '1', -- Forcing 1 'z', -- High Impedance, hochohmiger Ausgang 'w', -- Weak Unknown 'l', -- Weak 0 'h', -- Weak 1 '-' -- Don't care ); type std_logic_vector is array (natural range<>) of std_ulogic; -- edge detection FUNCTION rising_edge (SIGNAL s : std_ulogic) RETURN BOOLEAN; FUNCTION falling_edge (SIGNAL s : std_ulogic) RETURN BOOLEAN; Grundlagen der Technischen Informatik 16 std_logic • 9-wertiges Logik-Signal std_logic, std_ulogic • Modellierung realer Signale: können neben den logischen Zuständen noch Zwischenzustände wie „Uninitialisiert“ oder „Unbekannt“ annehmen. • Heute faktisch Industrie-Standard Wert ‘U‘ ‘X‘ ‘0‘ ‘1‘ ‘Z‘ ‘W‘ ‘L‘ ‘H‘ ‘-‘ Bedeutung uninitialisiertes Signal undefiniert, da mehrere aktive Signaltreiber (Signalquellen) logische 0 logische 1 hochohmiger Ausgang (Tri-State-Ausgang) schwach unbekannt, Buskonflikt zwischen „low“ und „high“ schwache logische 0 schwache logische 1 don‘t care Grundlagen der Technischen Informatik 17 Aufbau einer VHDL-Beschreibung use Bereitstellung von Bibliotheken entity Definition der Schnittstelle zur Umgebung architecture Implementierung der Entity, Aufbau und Funktion des Systems Grundlagen der Technischen Informatik 18 Architecture • Architecture beschreibt den inneren Aufbau und die Funktion eines Moduls ARCHITECTURE architecture_name OF entity_name IS -- Deklaration nur intern genutzter Signale BEGIN -- Body aus nebenläufigen Prozessen und Anweisungen END [ARCHITECTURE] architecture_name; Grundlagen der Technischen Informatik 19 Nebenläufigkeit ARCHITECTURE … IS -- Deklaration nur intern genutzter Signale BEGIN Prozess (PROCESS) enthält sequentielle Anweisungen Prozess (PROCESS) enthält sequentielle Anweisungen nebenläufige Anweisung (concurrent statement); nebenläufige Anweisung (concurrent statement); nebenläufige Anweisung (concurrent statement); END …; Grundlagen der Technischen Informatik 20 laufen nebenläufig zueinander ab Modellierungssichtweisen • Datenflussbeschreibung • Verhaltensbeschreibung • Strukturbeschreibung Grundlagen der Technischen Informatik 21 Datenflussbeschreibung • Eignet sich für reinkombinatorische, ungetaktete Logik • Durch ausschließliche Verwendung nebenläufiger Anweisungen möglich i_enable i_y i_x o_carry o_result Grundlagen der Technischen Informatik 22 Datenflussbeschreibung • Eignet sich für reinkombinatorische, ungetaktete Logik • Durch ausschließliche Verwendung nebenläufiger Anweisungen möglich i_enable i_y i_x o_carry o_result architecture dataflow of half_adder is begin o_carry <= i_enable and i_x and i_y; Klammern setzten, um korrekte Ausführung zu gewährleisten o_result <= i_enable and (i_x xor i_y); end architecture dataflow; Grundlagen der Technischen Informatik 23 Verhaltensbeschreibung • Keine (reinen) Logikgleichungen, sondern Verhalten wird auf algorithmischer Ebene beschrieben • Im Allgemeinen übersichtlicher und weniger fehlerträchtig • Durch Verwendung von Prozessen möglich process (sensitivitaets_liste) is -- Deklaration lokaler Variablen und Signale begin -- Beschreibung des Verhaltens end process; Grundlagen der Technischen Informatik 24 VHDL-Basics: Kontrollstruktur if Syntax if_statement : if condition then sequence_of_statements { elsif condition then sequence_of_statements } [ else sequence_of_statements ] end if; Grundlagen der Technischen Informatik 25 Verhaltensbeschreibung • Sequentielle Abarbeitung der Anweisungen innerhalb eines Prozesses • Sensitivitätsliste enthält alle Signale, deren Änderung das Ergebnis des Prozesses ändern – Wichtig für die Simulation, da hier die Ausführung nur dann angestoßen wird, wenn eine entsprechende Signaländerung stattfand architecture behavior of half_adder is begin end architecture behavior; Grundlagen der Technischen Informatik 26 Sensitivitätsliste sequentielle Abarbeitung process (i_enable, i_x, i_y) is begin if i_enable = ‘1’ then o_result <= i_x xor i_y; o_carry <= i_x and i_y; else o_result <= ‘0’; o_carry <= ‘0’; end if; end process; Strukturbeschreibung • Hierarchisches Design aus Komponenten, die durch eigene VHDLModule beschrieben sind • Im Wesentlichen Umsetzung eines Schaltplans/Blockdiagramms: Instanziierung der Komponenten und „Verdrahtung“ • Beispiel: Volladdierer aus Halbaddierern a b cin i_enable c1 half_ adder cout s1 c2 half_ adder Grundlagen der Technischen Informatik 27 sum Strukturbeschreibung c1 a b architecture structure of full_adder is cin component half_adder port (i_x, i_y, i_enable: in std_logic; o_result, o_carry: out std_logic ); end component; half_ adder s1 cout c2 half_ adder sum i_enable signal c1, s1, c2 : std_logic; begin Deklaration aller HA1: half_adder port map ( und i_x => a, i_y =>b, i_enable => i_enable, o_resultKomponenten => s1, o_carry => c1); HA2: half_adder port map (s1, cin, i_enable, sum, c2); cout <= c1 or c2; end architecture structure; Grundlagen der Technischen Informatik 28 Signale, die benötigt werden Strukturbeschreibung „Verdrahtung“ aller Komponenten und Signale. Einbindung von Komponenten erfolgt mittels architecture port map():structure of full_adder is • name mapping: Zuweisung über die component half_adder PORT-Namen gemäß Entityin(siehe HA1) port (i_x, i_y, i_enable: std_logic; • positional mapping: Zuweisung über o_result, o_carry: out std_logic ); end component; Positionen in PORT-Anweisung der Entity (siehe HA2) signal c1, s1, c2 : std_logic; c1 a b cin half_ adder s1 half_ adder cout c2 sum i_enable begin HA1: half_adder port map ( i_x => a, i_y =>b, i_enable => i_enable, o_result => s1, o_carry => c1); HA2: half_adder port map (s1, cin, i_enable, sum, c2); cout <= c1 or c2; end architecture structure; Grundlagen der Technischen Informatik 29 VHDL-Basics: Rechnen in VHDL • Wie werden denn allgemein n-Bit Zahlen in VHDL addiert? • Muss ich in VHDL tatsächlich selbst Addierer bauen? • Nein! Grundlagen der Technischen Informatik 30 VHDL-Basics: Operatoren • • • • • • Logische Operatoren: and, or, nand, nor, xor Relationale Operatoren: =, /=, <, <=, >, >= Addition und Konkatenation: +, -, & Vorzeichen: +, Multiplikation: *, /, mod, rem Exponent, Absolutbetrag, Komplement: **, abs, not • Beispiele A and B and C A nand B nand C beschreibt ein 3-Input AND-Gatter beschreibt kein 3-Input NAND-Gatter! Grundlagen der Technischen Informatik 31 VHDL-Basics: Datentypen Integer • Wertebereich: -2.147.483.647 bis +2.147.483.647 (-231+1 bis 231-1) signal x : integer range 0 to 100; … x <= x + 1; Addierer wird automatisch während der Synthese erzeugt • Beschränkung auf den Wertebereich, der tatsächlich benötigt wird • Sonst werden per Default 32-Bit Wörter erzeugt Grundlagen der Technischen Informatik 32 VHDL-Basics: Arrays = Binärzahlen • Felder (arrays) dienen der Bündelung von Variablen des gleichen Typs • 3-Bit breites Wort, Big Endian: signal x bit_vector (0 to 2); signal data std_logic_vector (0 to 2); data <= “011”; data(0) <= ‘0’; data(1) <= ‘1’; data(2) <= ‘1’; • 3-Bit breites Wort, Little Endian: signal x bit_vector (2 down to 0); signal data std_logic_vector (2 down to 0); data <= “011”; data(0) <= ‘1’; data(1) <= ‘1’; data(2) <= ‘0’; Grundlagen der Technischen Informatik 33 VHDL-Basics: Rechnen auf Binärzahlen • Rechenoperationen auf std_logic_vector sind zu vermeiden, da teilweise gar nicht synthetisierbar – Ist die Zahl als vorzeichenlos oder vorzeichenbehaftet zu interpretieren? • ieee.numeric_std (ieee library package) definiert UNSIGNED und SIGNED als Arrays von std_logic sowie arithmetische Operationen: – – type SIGNED is array(NATURAL range <>) of STD_LOGIC; type UNSIGNED is array(NATURAL range <>) of STD_LOGIC; library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; … signal a, b: signed(3 downto 0); … a <= a + b; Addierer wird automatisch während der Synthese erzeugt Grundlagen der Technischen Informatik 34 Konstanten, Variablen und Signale Grundlagen der Technischen Informatik Konstanten, Variablen und Signale • Konstanten – der Wert einer Konstante kann nicht verändert werden. Beispiele: constant bus_width constant PI : integer := 8; : real := 3.1415; constant zero : std_logic_vector(3 downto 0):= “0000"; Grundlagen der Technischen Informatik 36 Konstanten, Variablen und Signale • Variablen – unterscheiden sich nicht von Variablen anderer höheren Programmiersprachen – Eine Variable hat „kein Gegenstück in der Hardware“ ! – Variablen werden im Rahmen von Zwischenrechnungen verwendet • Signale – sind in anderen Programmiersprachen nicht zu finden – Ein Signal kann man als verbindende physikalische Leitung bzw. als Register ansehen • Beispiele variable ROW, COLUMN : integer range 0 to 31; variable TEMP : std_logic_vector(3 downto 0):= “0000"; signal CLK, RESET signal COUNTER : bit; : integer range 0 to 31; Grundlagen der Technischen Informatik 37 Variablen contra Signale (Syntax) • Verschiedene Syntax für Zuweisungen: – Zuweisung einer Variable: target_variable := value_expression; – Zuweisung eines Signals: target_signal <= value_expression; • Beispiel: temp := temp + 1; output <= input + 1; -- variable temp -- signals input and output Grundlagen der Technischen Informatik 38 Variablen contra Signale (Semantik) • Deklaration – Variablen werden in Prozessen / Unterprogrammen deklariert und sind auch nur da sichtbar – Signale können nicht in Prozessen / Unterprogrammen deklariert werden. • Verwendung – Variablen werden zum Abspeichern temporärer Werte benutzt – Signale stehen üblicherweise für Verbindungen oder Register in der Hardware • Wertzuweisung – bei Variablen erfolgt sofort, wenn die Variablenzuweisung ausgeführt wird. – bei Signalen erfolgt nicht sofort, wenn die Signalzuweisung ausgeführt wird. • Die Signalzuweisung aktualisiert den Signaltreiber. • Der Signaltreiber gibt die Information an die Signale erst an das Signal weiter, wenn der Prozess angehalten hat. Grundlagen der Technischen Informatik 39 Wertzuweisung Signal • Bei Signalen erfolgt die Wertzuweisung, wenn der Prozess angehalten hat architecture behavior of watch is signal hours : integer := 0; begin … -- Stunde um eins Erhöhen process (c) is begin if c = ‘1’ then hours <= hours + 1; if hours = 24 then hours <= 0; end if; Signal: Wertzuweisung erfolgt hier end if; end process; end architecture watch; Grundlagen der Technischen Informatik 40 Wertzuweisung Signal contra Variable • Bei Signalen erfolgt die Wertzuweisung, wenn der Prozess angehalten hat architecture behavior of watch is signal hours : integer := 0; begin … -- Stunde um eins Erhöhen process (c) is begin if c = ‘1’ then hours <= hours + 1; if hours = 24 then hours <= 0; end if; end if; end process; end architecture watch; -- Stunde um eins Erhöhen process (c) is variable temp : integer := 0; begin if c = ‘1’ then temp := hours + 1; if temp = 24 then hours <= 0; else hours <= temp; end if; end if; end process; Variable: Wertzuweisung erfolgt sofort Grundlagen der Technischen Informatik 41 Wertzuweisung Signal contra Variable • Eine Variable hat „kein Gegenstück in der Hardware“ ! • Generell kann man das Verhalten auch ohne Verwendung von Variablen beschreiben if c = ‘1’ then if hours = 23 then hours <= 0; else hours <= hours + 1; end if; end if; if c = ‘1’ then hours <= hours + 1; if hours = 23 then hours <= 0; end if; end if; -- Stunde um eins Erhöhen process (c) is variable temp : integer := 0; begin if c = ‘1’ then temp := hours + 1; if temp = 24 then hours <= 0; else hours <= temp; end if; end if; end process; Signal: Die letzte Wertzuweisung wird wirksam Grundlagen der Technischen Informatik 42 Selbst VHDL schreiben und simulieren… • Viel kommerzielle Software, aber auch Gratis- und Studenten-Versionen, z.B. Xilinx Vivado HL WebPACK http://www.xilinx.com/support/download.html (GB !) • Auch Cloud-basierte Simulatoren verfügbar, z.B. EDA playground http://www.edaplayground.com/ Grundlagen der Technischen Informatik 43
© Copyright 2025 ExpyDoc