12. VHDL-Einführung III - users.etech.haw
Transcription
12. VHDL-Einführung III - users.etech.haw
Hochschule für Angewandte Wissenschaften Hamburg Prof. Dr. J. Reichardt FACHBEREICH ELEKTROTECHNIK UND INFORMATIK Prof. Dr. B. Schwarz 12 VHDL Einführung (III) 12.1 Mehrwertige Datentypen (std_logic, std_ulogic) • Einführung zweier neuer neunwertiger Datentypen std_logic und std_ulogic (IEEE-Standard 1164) Wert 'U' 'X' '0' '1' 'Z' 'W' 'L' 'H' '-' Bedeutung Nicht initialisiert Undefiniert Starke logische '0' Starke logische '1' Hochohmig 'Z' Schwach unbekannt Schwache logische '0' Schwache logische '1' Don't-Care Verwendung Nicht initialisiertes Signal im Simulator Simulator erkennt mehr als einen aktiven Signaltreiber (Buskonflikt) entspricht '0' eines bit-Signals entspricht '1' eines bit-Signals Tri-State Ausgang Simulator erkennt Buskonflikt zwischen 'L' und 'H' Ausgang mit Pull-Down Widerstand (Open Source) Ausgang mit Pull-Up Widerstand (Open Drain) Logikzustand bedeutungslos; kann für Minimierung verwendet werden DIGITALTECHNIK 12-1 Hochschule für Angewandte Wissenschaften Hamburg Prof. Dr. J. Reichardt FACHBEREICH ELEKTROTECHNIK UND INFORMATIK Prof. Dr. B. Schwarz Welcher Unterschied besteht zwischen diesen beiden Datentypen? • Signale vom Typ std_ulogic dürfen maximal einen Signaltreiber (Prozess, bzw. nebenläufige Anweisung) besitzen (unresolved logic). • Signale vom Typ std_logic dürfen mehrere Signaltreiber besitzen. Dies entspricht dem Verbinden mehrerer Gatterausgänge. Mögliche Signalkonflikte der Treiber werden durch eine Auflösungsfunktion gelöst (resolved logic). • Beispiele: std_logic Auflösungsfunktion ♦ Konflikte zwischen '0' und 'U' 'X' '0' '1' 'Z' 'W' 'L' 'H' '-' '1' ergeben ein undefinier'U' 'U' 'U' 'U' 'U' 'U' 'U' 'U' 'U' 'U' tes Signal 'X'. 'X' 'U' 'X' 'X' 'X' 'X' 'X' 'X' 'X' 'X' ♦ Wenn EIN Signal (noch) un'0' 'U' 'X' '0' 'X' '0' '0' '0' '0' 'X' definiert ist, so ist das Ergeb'1' 'U' 'X' 'X' '1' '1' '1' '1' '1' 'X' nis der Verbindung immer 'Z' 'U' 'X' '0' '1' 'Z' 'W' 'L' 'H' 'X' undefiniert 'U'. 'W' 'U' 'X' '0' '1' 'W' 'W' 'W' 'W' 'X' ♦ Wenn EIN Signal hochohmig 'L' 'U' 'X' '0' '1' 'L' 'W' 'L' 'W' 'X' 'Z' ist, so ist das Ergebnis 'H' 'U' 'X' '0' '1' 'H' 'W' 'W' 'H' 'X' der Verknüpfung immer '-' 'U' 'X' 'X' 'X' 'X' 'X' 'X' 'X' 'X' durch den anderen Signalwert gegeben. DIGITALTECHNIK 12-2 Hochschule für Angewandte Wissenschaften Hamburg Prof. Dr. J. Reichardt FACHBEREICH ELEKTROTECHNIK UND INFORMATIK Prof. Dr. B. Schwarz 12.2 Realisierung von Tri-State Ausgangsstufen • Neben 1-Bit Signalen existieren auch die vektoriellen Signaltypen std_logic_vector und std_ulogic_vector (vgl. bit ↔ bit_vector). • Der VHDL-Code erfordert die Einbindung der IEEE-Bibliothek (library- und use-Anweisungen) vor jeder entity, in der die Datentypen std_logic oder std_ulogic verwendet werden: -- 4-Bit Tri-State Treiber -------------------------library ieee; use ieee.std_logic_1164.all; entity TSBUF is port( EN: in bit; E: in std_logic_vector(3 downto 0); Y: out std_logic_vector(3 downto 0)); end TSBUF; architecture VERHALTEN of TSBUF is begin Y <= E when EN='1' else "ZZZZ"; end VERHALTEN; DIGITALTECHNIK 12-3 Hochschule für Angewandte Wissenschaften Hamburg Prof. Dr. J. Reichardt FACHBEREICH ELEKTROTECHNIK UND INFORMATIK Prof. Dr. B. Schwarz Tri-State Treiber in komplexeren Schaltungen • D-Flipflop mit Tri-State Ausgang: library ieee; use ieee.std_logic_1164.all; entity DFF_EN is port( CLK, RESET, ENABLE: in bit; D: in std_ulogic; Q: out std_ulogic); end DFF_EN; • Ziel: Es soll EIN Flipflop mit Tri-State Treiber am Ausgang modelliert werden DIGITALTECHNIK 12-4 Hochschule für Angewandte Wissenschaften Hamburg Prof. Dr. J. Reichardt FACHBEREICH ELEKTROTECHNIK UND INFORMATIK Prof. Dr. B. Schwarz Flipflop mit Tri-State-Ausgang: 2 Architekturvarianten Tri-State Treiber im Prozess integriert architecture ARCH1 of DFF_EN is begin FLIPFLOP: process(CLK, RESET) begin if RESET = '1' then Q <= '0'; elsif CLK ='1' and CLK'event then if ENABLE='1' then Q <= D; else Q <='Z'; end if; end if; end process FLIPFLOP; end ARCH1; Tri-State Treiber als extra Prozess, Kopplung über temporäres Signal architecture ARCH2 of DFF_EN is signal TEMP: std_ulogic; begin FLIPFLOP: process(CLK, RESET) begin if RESET = '1' then TEMP <= '0'; elsif CLK ='1' and CLK'event then TEMP <= D; end if; end process FLIPFLOP; TSBUF: process(TEMP,ENABLE) begin if ENABLE='1' then Q <= TEMP; else Q <= 'Z'; end if; end process TSBUF; end ARCH2; DIGITALTECHNIK 12-5 Hochschule für Angewandte Wissenschaften Hamburg Prof. Dr. J. Reichardt FACHBEREICH ELEKTROTECHNIK UND INFORMATIK Prof. Dr. B. Schwarz Flipflop mit Tri-State-Ausgang: Syntheseergebnisse ARCH1: ARCH2: • In ARCH1 wird für das Freigabesignal ein ungewolltes Flipflop inferriert. Grund dafür ist die Codierung des Tri-State-Treibers innerhalb der Flipflop Beschreibung (elsif CLK’event). • Fazit: In komplexeren Schaltungen sollten Tri-State Treiber als unabhängiger Prozess bzw. nebenläufige Signalzuweisung eines temporären Signals formuliert werden. DIGITALTECHNIK 12-6 Hochschule für Angewandte Wissenschaften Hamburg Prof. Dr. J. Reichardt FACHBEREICH ELEKTROTECHNIK UND INFORMATIK Prof. Dr. B. Schwarz Bidirektionale Ankopplung von Busteilnehmern entity architecture BUS ENABLE Schaltnetze bzw. Schaltwerke IN_I Bustreiber I_O OUT_I Schaltplan eines 2-Bit breiten Bustreibers: DIGITALTECHNIK 12-7 Hochschule für Angewandte Wissenschaften Hamburg Prof. Dr. J. Reichardt FACHBEREICH ELEKTROTECHNIK UND INFORMATIK Prof. Dr. B. Schwarz VHDL-Code des Bustreibers --Bidirektionaler Bustreiber mit Tri-State Ausgaengen. library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity BUSTREIBER is port( ENABLE : in bit; I_O : inout std_logic_vector(1 downto 0);-- Bidirekt. Anschluss OUT_I : in std_ulogic_vector(1 downto 0); IN_I : out std_ulogic_vector(1 downto 0)); end BUSTREIBER; architecture TRI_STATE_OUT of BUSTREIBER is begin WRITE:process(ENABLE, OUT_I) -- Gesteuerter Schreibvorgang begin if ENABLE = '1' then I_O <= To_StdLogicVector(OUT_I); else I_O <= (others => 'Z'); end if; end process WRITE; READ: IN_I <= To_StdULogicVector(I_O); -- Paralleler Lesevorgang end TRI_STATE_OUT; DIGITALTECHNIK 12-8 Hochschule für Angewandte Wissenschaften Hamburg Prof. Dr. J. Reichardt FACHBEREICH ELEKTROTECHNIK UND INFORMATIK Prof. Dr. B. Schwarz Betriebs- Zeitintervalle zustand 1 0 – 100 ns 300 – 400 ns 600 – 800 ns 2 100 – 300 ns 800 – 1000 ns 3 400 – 600 ns Tri-State Treiber IO__out Hochohmiger Zustand; OUT_I wird blockiert Buszustand I_O Hochohmig; kein Sender am Bus aktiv OUT_I Pegel werden übertragen Kein externer Sender; Signalübernahme: I_O = OUT_I Simulatorstimuli als externe Sender an I_O Hochohmiger Zustand; OUT_I wird blockiert DIGITALTECHNIK Eingangssignal IN_I "ZZ" wird empfangen Signalrückführung: IN_I = OUT_I Signalübernahme: IN_I = I_O 12-9