entity und is port (
X1,X2: in STD_LOGIC;
Y: out STD_LOGIC);
end und;
architecture logic of und is
begin
Y <= X1 and X2;
end;
VHDL Beschreibung
Steuerwörter:
Entity, is, port, end, architecture, of, begin, <=, and, end
Trennungszeichen
Strichpunkt ;
Programmierung durch Kopieren und Verändern.
Struktur
Entity: Schnittstelle: Eingänge und Ausgänge
architecture: Verbindung und Funktionen
VHDL Beschreibung
entity und is port (
X1,X2: in STD_LOGIC;
Y: out STD_LOGIC);
end und;
architecture logic of und is
begin
Y <= X1 and X2;
end;
Entwicklungsumgebung (IDE)
Xilinx Vivado
Integrated development environment (IDE).
Entwicklungsumgebungen sehen alle sehr ähnlich aus und sind folgendermaßen aufgebaut:
Links gibt es den "Flow Navigator" der die Schritte Entwurf("IP Integrator"), Simulation und
Hardware Konfiguration ("RTL Analysis", "Synthesis", "Implementation") bereitstellt.
Entwurf: Zusammenstellung von Schaltungen durch VHDL, Verilog oder vordefinierten Blöcken (IP-Catalog).
Simulation: Eine logische Schaltung wird mit geeigneten Stimuli (Eingangssignalen) simuliert.
Mit Hilfe der Simulation erzeugt man eine Wahrheitstabelle um die Schaltung zu verifizieren.
Hardware Konfiguration: Aus einer textuellen Beschreibung soll eine Konfigurationsdatei für einen Logikschaltkreis erzeugt werden.
Diese Punkte entsprechen dem Kompilieren und Debuggen einer Programmierumgebung.
In Abhängigkeit des Schrittes ändern sich die rechts daneben gezeigten Fenster.
Rechts ist der Texteditor mit Syntaxhighlighting.
Schlüsselwörter werden farbig hervorgehoben.
In der Mitte ist der Baum mit allen verwendeten Dateien.
Im unteren Bereich sieht man Statusmeldungen (Fehler).
Beispiel: Logikfunktion
entity ANDX is
Port ( X : in STD_LOGIC_VECTOR (3 downto 0);
y : out STD_LOGIC);
end ANDX;
architecture Behavioral of ANDX is
signal H1:STD_LOGIC;
begin
h1 <= x(1) and x(2);
y<= (h1 or x(0)) and x(3);
end Behavioral;
Hier wird das Steuerwort 'signal' verwendet.
Test (1)
ENTITY ANDX_test IS
END ANDX_test;
ARCHITECTURE behavior OF ANDX_test IS
-- Component Declaration for the Unit Under Test (UUT)
COMPONENT ANDX
PORT(
X : IN std_logic_vector(3 downto 0);
y : OUT std_logic
);
END COMPONENT;
--Inputs
signal X : std_logic_vector(3 downto 0); -- := (others => '0');
--Outputs
signal y : std_logic;
Die entity ANDX_test hat keine Eingänge oder Ausgänge.
In der Architecture findet man erst die verwendeten Komponenten (COMPONENT)
und dann die Leitungen oder Register (signal).
Test (2)
BEGIN
-- Instantiate the Unit Under Test (UUT)
uut: ANDX PORT MAP (
X => X,
y => y
);
Als erstes wird die zu testende Schaltung (unit under test, uut) implementiert
und verbunden (PORT MAP).
Da die Schaltung ANDX mehrmals verwendet werden kann, wird dieser Instanz
der name uut zugeordnet.
Test (3)
-- Stimulus process
stim_proc: process
begin
-- hold reset state for 100 ns.
wait for 100 ns;
-- insert stimulus here
x <= (others => '0'); wait for 100 ns;
x <= "1000"; wait for 100 ns;
x(1) <='1'; wait for 100 ns;
x(2) <='1'; wait for 200 ns;
x(3 downto 2) <= "00"; wait for 100 ns;
x <= "1001"; wait for 100 ns;
wait;
end process;
END;
Mit der Anweisung 'process' kann man eine Abfolge definieren.
Die 'wait' Anweisungen bestimmen das zeitliche Verhalten.
Die Anweisungen werden nacheinander von oben nach unten abgearbeitet.
Nur bei einer expliziten Zuweisung kann sich ein Signal ändern.
Die Entwicklungsumgebung generiert ein Template (leere Hülle) zum Test einer Schaltung.
Man muss nur die zeitliche Abfolge der Signale einfügen.
Ein Multiplexer in VHDL
Entity
Input
Output
Std_logic
Std_logic_vector
Bus
Architecture
When Anweisung (Statement)
entity Multiplexer_VHDL is
port (
a, b, c, d: in std_logic;
Sel : in std_logic_vector(1 downto 0);
Y : out std_logic
);
end entity Multiplexer_VHDL;
architecture Behavioral of Multiplexer_VHDL is
begin
with Sel select
Y <= a when "00",
b when "01",
c when "10",
d when others;
end architecture Behavioral;
Die Konzentration von n Leitungen auf eine Leitung: Multiplexer
Die Verteilung von einer Leitung auf n Leitungen: Demultiplexer
Multiplexer:
Eingänge:
n Signale: D0..Dn-1
i = ld(n) Auswahlsignale: A0..Ai
Ausgang: Y
Anwendung
Vermittlung von Telefongesprächen, Internetverbindungen
Parallel-Serien- und Serien-Parallel-Umsetzung
Mikroprozessor zur Auswahl der Verarbeitungsoperation
Speicherglieder
2-1 Multiplexer
2 Eingänge n = 2; D0,D1
Steuervariable: log22 = 1; A
Y = (/A·D0)+(A·D1)
Wahrheitstabelle
Nr
A
D1
D0
Y
0
0
0
0
0; D0
1
0
0
1
1; D0
2
0
1
0
0; D0
3
0
1
1
1; D0
4
1
0
0
0; D1
5
1
0
1
0; D1
6
1
1
0
1; D1
7
1
1
1
1; D1
Nr
A
Y
0
0
D0
1
1
D1
Modulo N Zähler
Zähler sind die einfachsten und meist verwendeten Zustandsmaschinen
Zustände (Anzahl N) einer Zustandsmaschine können gezählt werden.
Jedem Zustand (Zählerstand) werden Ausgangssignalzustände ("0"/"1") zugeordnet.
Die Abfolge der Zustände kann durch Änderung des Zählerstands modifiziert werden
Der Zählerstand bleibt Null bis ein Startbit kommt.
Modulo5: VHDL code
Als Basis dient der Code des D-Flip-Flops und der Code für eine Wahrheitstabelle.
entity MODULO5 is
port (
RESET,CLK : in STD_LOGIC;
B: out STD_LOGIC_VECTOR(2 downto 0));
end MODULO5;
architecture VERHALTEN of MODULO5 is
signal BINT: STD_LOGIC_VECTOR(2 downto 0);
Modulo 5 VHDL code (2)
begin
SYN_COUNT:process (CLK, RESET)
begin
if RESET = '1' then
BINT <= "000";
elsif CLK='1' and CLK'event then
case BINT is
when "000" => BINT <= "001";
when "001" => BINT <= "010";
when "010" => BINT <= "011";
when "011" => BINT <= "100";
when "100" => BINT <= "000";
when others => BINT <= "000";
end case;
end if;
end process SYN_COUNT;
B <= BINT;
end VERHALTEN;
RESET Signal wurde eingeführt.
Sicherer Zustand "000" für den Fall others.
Ein Test benötigt nur die CLK. Diese wird meist automatisch erzeugt.
Kommentare zum VHDL Code
Synchron versus Asynchron
Busse: BINT: std_logic_vector(2 downto 0)
Busse und einzelne Leitungen:
A <= BINT(3);
Q (1 downto 0) <= BINT(2 downto 1);
Ziel Quelle
Signalfluss: Quelle zum Ziel
Process
Man kann mit dem Zähler auch eine Zustandsmaschine mit 5 Zuständen bauen
Man kann mit dem Zähler auch 5 Testvektoren nacheinander ausgeben
Sequentielle Abarbeitung
Vorteil: Lesbarkeit
Nachteil: Implizite Register, Speicherzellen
If, case Anweisung
Test Modulo5: VHDL code
entity Modulo5Test is
-- Port ( );
end Modulo5Test;
architecture Behavioral of Modulo5Test is
COMPONENT MODULO5
port (
RESET,CLK : in STD_LOGIC;
B: out STD_LOGIC_VECTOR(2 downto 0)
);
end COMPONENT;
-- Inputs
signal RESET,CLK : STD_LOGIC;
-- Ouputs
signal B: STD_LOGIC_VECTOR(2 downto 0);
Test Modulo5: VHDL code (2)
begin
uut: MODULO5 PORT MAP( RESET => RESET, CLK => CLK,
B => B );
clk_proc: process -- Clock process
begin
CLK <= '0'; wait for 5 ns;
CLK <= '1'; wait for 5 ns;
end process;
stim_proc: process -- Stimulus process
begin
reset <= '1'; wait for 10 ns;
reset <= '0'; wait for 10 ns;
wait;
end process;
end Behavioral;
Modulo 5 simulation output
Modulo 5 Zähler als SERDES
Wie muss man den Modulo 5 Zähler für einen 2 Bit parallel-seriell Wandler modifizieren?
Wie muss man den Modulo 5 Zähler für einen 2 Bit seriell-parallel Wandler modifizieren?
Die 2 Bit Daten beginnen und enden immer mit einer "0".
Ansonsten ist die seriell Leitung "Z".
Welche Eingänge und ausgänge benötigt man.
Rezept für Digitaltechnik
Lege eine Dokumentation an und erfasse jeden Schritt
Identifiziere Eingänge, Zustände und Ausgänge im Text
Identifiziere unvollständige oder fehlende Informationen
Vergebe Namen und Zuordnungen: Button B, '1' An, '0' Aus
Evtl: Zerlege das Problem in Teilprobleme und starte zur Bearbeitung von Teilproblemen neu
Erstelle eine Zustandstabelle:
Zustandsgleichungen, Zustandsdiagramm
Erstelle einen Schaltplan und Eingangssignale und simuliere.
Alle Zustandskombinationen und Eingangskombinationen müssen getestet werden.
Erstelle VHDL code für die Zustandstabelle und Eingangssignale und simuliere
Überprüfe die korrekte Funktion
Reflektiere 'lessons learned' in einer Zusammenfassung
Gratulation zum Ergebnis
Asynchrone serielle Übertragung
Punkt zu Punkt
Möglichst wenige Leitungen -> Hohe Datenrate, Taktfrequenz
Parallel Seriell Wandler
Seriell Parallel Wandler
Schicht 1: UART
Universal, asynchronous receiver and transmitter
Beispiel Übertragung des Zeichens "G"
Zustand, logische Information, Bit,Pegel
Sender
Ein Modulo 12 Zähler kann verwendet werden.
Ein Multiplexer kann das richtige Bit am Ausgang ausgeben.
Empfänger
Mit einer hohen Frequenz wird das Eingangssignal abgetastet.
Bei einer erkannten "0" (Mehrmals 0) wird der Zähler für die nächsten Bits gestartet
und demultiplexed die Signale an ein Register.
VHDL Serial Communication
The UART source code from Chu is used in EEBench.vhd
Start changing this code or look for better SPI, I2C VHDL code with test