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