11
1 VHDL-Synthese digitaler Systeme Lösungen zu den Übungsaufgaben Aufgabe 1 -- Aufgabe 1 -- 8 zu 1 Decoder entity DECODER1X8 is port( S: in bit_vector(2 downto 0); Y: out bit_vector(7 downto 0)); end DECODER1X8; architecture VERHALTEN of DECODER1X8 is begin with S select Y <= "00000001" when "000", "00000010" when "001", "00000100" when "010", "00001000" when "011", "00010000" when "100", "00100000" when "101", "01000000" when "110", "10000000" when "111"; end VERHALTEN; Aufgabe 2 -- Aufgabe 2 -- Kombinatorische Logik entity LOGIK is port( E1, E2, E3: in bit; Y1, Y2: out bit); end LOGIK; architecture VERHALTEN of LOGIK is begin Y1 <= (E1 and E2) or E3; Y2 <= (E1 or E2) and E3; end VERHALTEN; Aufgabe 3 -- Aufgabe 3 -- programmierbare kombinatorische Logik -- Wird mit der DIO-Lib als Antivalenzgatter synthetisiert entity LOGIK1 is port( E, S: in bit; Y: out bit); end LOGIK1; architecture VERHALTEN of LOGIK1 is begin with S select Y <= E when '0', not E when '1'; end VERHALTEN;

VHDL-Synthese digitaler Systeme Lösungen zu den ...users.etech.haw-hamburg.de/users/schubert/di1/VHDL-Loesungen.pdf · 1 VHDL-Synthese digitaler Systeme Lösungen zu den Übungsaufgaben

Embed Size (px)

Citation preview

Page 1: VHDL-Synthese digitaler Systeme Lösungen zu den ...users.etech.haw-hamburg.de/users/schubert/di1/VHDL-Loesungen.pdf · 1 VHDL-Synthese digitaler Systeme Lösungen zu den Übungsaufgaben

1

VHDL-Synthese digitaler SystemeLösungen zu den Übungsaufgaben

Aufgabe 1

-- Aufgabe 1-- 8 zu 1 Decoder

entity DECODER1X8 isport( S: in bit_vector(2 downto 0); Y: out bit_vector(7 downto 0));

end DECODER1X8;

architecture VERHALTEN of DECODER1X8 isbegin

with S selectY <= "00000001" when "000", "00000010" when "001", "00000100" when "010", "00001000" when "011", "00010000" when "100", "00100000" when "101", "01000000" when "110", "10000000" when "111";

end VERHALTEN;

Aufgabe 2

-- Aufgabe 2-- Kombinatorische Logik

entity LOGIK isport( E1, E2, E3: in bit; Y1, Y2: out bit);

end LOGIK;

architecture VERHALTEN of LOGIK isbegin

Y1 <= (E1 and E2) or E3;Y2 <= (E1 or E2) and E3;

end VERHALTEN;

Aufgabe 3

-- Aufgabe 3-- programmierbare kombinatorische Logik-- Wird mit der DIO-Lib als Antivalenzgatter synthetisiert

entity LOGIK1 isport( E, S: in bit; Y: out bit);

end LOGIK1;

architecture VERHALTEN of LOGIK1 isbegin

with S selectY <= E when '0', not E when '1';

end VERHALTEN;

Page 2: VHDL-Synthese digitaler Systeme Lösungen zu den ...users.etech.haw-hamburg.de/users/schubert/di1/VHDL-Loesungen.pdf · 1 VHDL-Synthese digitaler Systeme Lösungen zu den Übungsaufgaben

2

Aufgabe 4

-- Aufgabe 4-- Halbsubtrahierer mit Wahrheitstabelle

-- B A I Y COUT---------I--------- 0 0 I 0 0-- 0 1 I 1 0-- 1 0 I 1 1-- 1 1 I 0 0-----------------entity HALBSUB is

port( B, A: in bit; Y, Dieser_Bezeichner_ist_lang_aber_ist_er_auch_gueltig: out bit);

end HALBSUB;

architecture TABELLE of HALBSUB issignal TEMP_IN, TEMP_OUT: bit_vector(1 downto 0); -- Temp-Signalbegin

TEMP_IN <= B & A; -- Temporaere EingangsvarY <= TEMP_OUT(1); -- AusgangsvarDieser_Bezeichner_ist_lang_aber_ist_er_auch_gueltig <= TEMP_OUT(0);

-- Ausgangsvarwith TEMP_IN selectTEMP_OUT <= "00" when "00", "10" when "01", "11" when "10", "00" when "11";

end TABELLE;

Aufgabe 5Welche der folgenden VHDL-Bezeichner sind korrekt?

a) Hilfe Korrektb) help Korrektc) 2ter_Versuch Falsch: Ziffer am Anfangd) Case Falsch: VHDL Schlüsselworte) Zweiter_Versuch Korrektf) Dieser_Bezeichner_ist_lang_aber_ist_er_auch_gueltig Korrekt, wird aber bei der Synthese abgeschnitten

Aufgabe 6Die Sprache VHDL verlangt, daß alle Bezeichner innerhalb einerEntwurfseinheit unterschiedlich sind. Für welche der folgendenBezeichnerpaare trifft dies nicht zu?

a) Mein_Name , MeinName Korrektb) nummer , NUMMER Nicht unterschiedlichc) Nummer , Nummern Korrektd) two , too Korrekt

Page 3: VHDL-Synthese digitaler Systeme Lösungen zu den ...users.etech.haw-hamburg.de/users/schubert/di1/VHDL-Loesungen.pdf · 1 VHDL-Synthese digitaler Systeme Lösungen zu den Übungsaufgaben

3

Aufgabe 7Welche der folgenden Bit-String Größen sind korrekt? Bestimmen Sie bei jedemgültigen Bit-String dessen Länge und dezimalen Wert.

a) B"1010_0101_1001" Länge: 12, Wert: C59\h=3161b) B"1001-0011" Falsch: Enthält Minuszeichenc) b"1111_000" Länge 7, Wert: 78\h = 120d) "11110000" Länge 8, Wert: F0\h = 240e) x"B5_CD" Länge 16 Wert: B5CD\h = 46541f) X"3HA4" Falsch: Enthält Zeichen "H"g) o"123" Länge 9, Wert: 53\h = 83h) O"123_678" Falsch: Zeichen "8" ist keine erlaubte

Oktalzahl

Aufgabe 8

-- Aufgabe 8-- Look-Up

entity LUT isport( S: in bit_vector(1 downto 0); A, B: in bit; Y: out bit);

end LUT;

architecture VERHALTEN of LUT isbegin

Y <= A and B when S="00"else A or B when S="01"else A nand B when S="10"else A nor B;

end VERHALTEN;

Aufgabe 9

-- Aufgabe 9-- Code Umsetzer in den Aiken Code

library ieee;use ieee.std_logic_1164.all;

entity AIKEN isport( E: in std_ulogic_vector(3 downto 0); Y: out std_ulogic_vector(3 downto 0));

end AIKEN;

architecture VERHALTEN of AIKEN isbegin

with E selectY <= x"0" when x"0",

x"1" when x"1",x"2" when x"2",x"3" when x"3",x"4" when x"4","1011" when x"5","1100" when x"6","1101" when x"7","1110" when x"8","1111" when x"9","----" when others;

end VERHALTEN;

Page 4: VHDL-Synthese digitaler Systeme Lösungen zu den ...users.etech.haw-hamburg.de/users/schubert/di1/VHDL-Loesungen.pdf · 1 VHDL-Synthese digitaler Systeme Lösungen zu den Übungsaufgaben

4

Aufgabe 10

-- Aufgabe 10-- Tristate Logik

library ieee;use ieee.std_logic_1164.all;

entity TS_LOGIK isport( EN, A, B, C : in bit; Y : out std_ulogic);

end TS_LOGIK;

architecture VERHALTEN of TS_LOGIK isbegin

with EN selectY <= to_stdulogic(( A and B and C) or (A or B or not C)) when '0', 'Z' when '1';

end VERHALTEN;

Die Synthese mit der Viewlogic-Bibliothek DIO (DataIO) erfordert drei Gattersowie einen Tri-State-Treiber

Aufgabe 11

-- Aufgabe 11-- Betragsbildung einer 5-Bit-Zahl

entity BETRAG isport( E: in integer range -16 to 15; Y: out natural range 0 to 15);

end BETRAG;

architecture VERHALTEN of BETRAG isbegin

Y <= abs(E);end VERHALTEN;

Syntheseergebnisse:Viewlogic (DIO) synthetisiert einen 5-Bit Subtrahierer sowie 16 diskreteGatter mit jeweils 2 Eingängen.

PeakVHDL synthetisiert eine UND-ODER Logik: mit drei internen Signalenals ODER-Verknüpfungen der Eingangsbits sowie 8 weiteren Produkttermen(davon zwei als Antivalenzgatter).

Page 5: VHDL-Synthese digitaler Systeme Lösungen zu den ...users.etech.haw-hamburg.de/users/schubert/di1/VHDL-Loesungen.pdf · 1 VHDL-Synthese digitaler Systeme Lösungen zu den Übungsaufgaben

5

Aufgabe 12

-- Aufgabe 12-- Multiplikation zweier 3 Bit integer Zahlen

entity MULT isport( A, B: in natural range 0 to 7; Y: out natural range 0 to 49);

end MULT;

architecture ALGO of MULT isbegin

Y <= A * B;end ALGO;

Syntheseergebnisse:Viewlogic inferriert einen 3x3 Bit Multiplizierer Funktionsblock

PeakVHDL generiert ebenfalls ein 3x3 Multiplizierer Schaltnetz

Aufgabe 13

-- Aufgabe 13-- 3-Bit Addierer mit Carry Lookahead Generator-- vgl. z.B. P.Pernards, Digitaltechnik, Huethig Verlag

entity CARRYLOOK isport( A, B: in bit_vector(2 downto 0); CI: in bit; SUM: out bit_vector(3 downto 0));

end CARRYL0OK;

architecture STRUKTUR of CARRYLOOK issignal C, G, P: bit_vector(2 downto 0); -- Lokale Signalebegin

G <= A and B after 10 ns; -- Generate VektorP <= A xor B after 10 ns; -- Propagate VektorC(0) <= G(0) or (P(0) and CI) after 10 ns; -- Carry LookaheadC(1) <= G(1) or (P(1) and G(0))

or (P(1) and (P(0) and CI) after 10 ns;C(2) <= G(2) or (P(2) and G(1)) or (P(2) and P(1) and G(0))

or (P(2) and (P(1) and P(0) and CI) after 10 ns;SUM(0) <= P(0) xor CI after 10 ns; -- SummationSUM(1) <= P(1) xor C(0) after 10 ns; -- mit Carry LookaheadSUM(2) <= P(2) xor C(1) after 10 ns; -- SignalenSUM(3) <= C(2); -- Carry Out

end STRUKTUR;

Das Simulationsergebnis zeigt bei der Summation 1 + 7 die typischeEigenschaft des Addierers mit Lookahead Struktur: Die Carry-Signale C2, Clund CO werden gleichzeitig erzeugt, wenn die Generate- und Propagate-SignaleG und P zur Verfügung stehen.

Page 6: VHDL-Synthese digitaler Systeme Lösungen zu den ...users.etech.haw-hamburg.de/users/schubert/di1/VHDL-Loesungen.pdf · 1 VHDL-Synthese digitaler Systeme Lösungen zu den Übungsaufgaben

6

Aufgabe 14a) 199 Korrektb) 8#AFFE# Falsch, da HEX-Konstanten bei oktaler Basisc) 2#1011_1010# Korrektd) 16#ABCD# Korrekte) 5#224_33# Korrekt

Aufgabe 15

-- Aufgabe 15-- 4-Bit ALU mit unsigned Datentyp

library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all; -- Viewlogic / Synopsys-- use ieee.numeric_std.all; -- IEEE1O76.3/ PeakVHDL

entity ALU isport( A, B: in unsigned (3 downto 0); -- 4-Bit Operanden OPCODE: in bit_vector(1 downto 0); -- 2-Bit OPCODE RESULT: out unsigned (3 downto 0); -- 4-Bit Ergebnis CFLAG, ZFLAG: out std_logic); -- Carry/Zero Flag

end ALU;

architecture ALGO of ALU issignal TEMP_RESULT, TEMPA, TEMPB: unsigned (4 downto 0);-- 5-Bit Temp Sig.signal TEMPA1, TEMPB1: std_logic_vector(4 downto 0); -- 5-Bit std_logicbegin

TEMPA <= '0'&A;TEMPB <= '0'&B;TEMPA1 <= std_logic_vector(TEMPA);TEMPB1 <= std_logic_vector(TEMPB);TEMP_RESULT <= TEMPA + TEMPB when OPCODE="00" else

TEMPA – TEMPB when OPCODE="01" elseunsigned(TEMPA1 or TEMPB1)

when OPCODE="10" elseunsigned(TEMPA1 and TEMPB1);

RESULT <= unsigned(TEMP_RESULT(3 downto 0));CFLAG <= '1' when ((TEMP_RESULT(4)='1') and OPCODE="00") or

((B>A) and OPCODE="01") else'0';

ZFLAG <= '1' when TEMP_RESULT=0 else '0';end ALGO;

Page 7: VHDL-Synthese digitaler Systeme Lösungen zu den ...users.etech.haw-hamburg.de/users/schubert/di1/VHDL-Loesungen.pdf · 1 VHDL-Synthese digitaler Systeme Lösungen zu den Übungsaufgaben

7

Aufgabe 16Der Prozess wird aktiviert sofern sich eins der Eingangssignale ändert. Eswerden zunächst alle Signale hochohmig gesetzt. In einer doppelten if-Schleife wird zunächst das Freigabesignal abgefragt. Wenn dieses aktiv ist,so wird der zum Wert des Signals SEL gehörige Ausgang mit dem Eingang DINverbunden und somit der Z-Wert überschrieben.

-- Aufgabe 16-- 1 zu 4 Demultiplexer

library ieee;use ieee.std_logic_1164.all;

entity DEMUX isport( DIN, EN: in std_ulogic; SEL: in bit_vector(1 downto 0); DOUT0, DOUT1, DOUT2, DOUT3: out std_ulogic);

end DEMUX;

architecture VERHALTEN of DEMUX isbeginP1: process(SEL, DIN, EN)

beginDOUT0<='Z'; DOUT1<='Z'; DOUT2<='Z'; DOUT3<='Z';-- Alle Zif EN = '0' then -- Nur falls Enable

if SEL = "00" then -- jeweiligenDOUT0 <= DIN; -- Ausgang

elsif SEL = "01" then -- durchschaltenDOUT1 <= DIN;

elsif SEL = "10" thenDOUT2 <= DIN;

elseDOUT3 <= DIN;

end if;end if;

end process P1;end VERHALTEN;

Page 8: VHDL-Synthese digitaler Systeme Lösungen zu den ...users.etech.haw-hamburg.de/users/schubert/di1/VHDL-Loesungen.pdf · 1 VHDL-Synthese digitaler Systeme Lösungen zu den Übungsaufgaben

8

Aufgabe 17

-- Aufgabe 17-- 4-Bit Schieberegister mit Parallelausgang

entity SREG4BIT isport( DIN, CLK, RESET: in bit; DOUT: buffer bit_vector(3 downto 0));

end SREG4BIT;

architecture VERHALTEN of SREG4BIT isbeginP1: process(CLK, RESET)

beginif RESET='1' then

DOUT <="0000"; -- Loeschenelsif CLK='1' and CLK'event then -- Schieben

DOUT(3) <= DOUT(2);DOUT(2) <= DOUT(1);DOUT(1) <= DOUT(0);DOUT(0) <= DIN;

end if;end process P1;

end VERHALTEN;

Aufgabe 18

-- Aufgabe 18-- 4-Bit Vorwärts-Rückwärtszähler

entity VRZLR4B isgeneric( N: natural:=4);port( CLK, RESET, UND: in bit; Q: buffer integer range 0 to 2**N-1);

end VRZLR4B;

architecture VERHALTEN of VRZLR4B isbeginP1: process(CLK, RESET)

beginif RESET='1' then -- Asynchron

Q <= 0; -- Loeschenelsif CLK='1' and CLK'event then -- Synchron zaehlen

if UND ='1' thenQ <= (Q+1) mod 2**N; -- Aufwaerts

elseQ <= (Q-1) mod 2**N; -- Abwaerts

end if;end if;

end process P1;end VERHALTEN;

Durch Verlagerung der RESET Abfrage in den durch elsif CLK='1' and CLK'eventgekennzeichneten Zweig wird aus dem asynchronen RESET ein synchroner RESET.

Page 9: VHDL-Synthese digitaler Systeme Lösungen zu den ...users.etech.haw-hamburg.de/users/schubert/di1/VHDL-Loesungen.pdf · 1 VHDL-Synthese digitaler Systeme Lösungen zu den Übungsaufgaben

9

Aufgabe 19

-- Aufgabe 19-- programmierbarer Taktteiler ( max 5 Bit)

entity TEILER isport( CLK: in bit; N: in integer range 0 to 31; TC: out bit);

end TEILER;

architecture VERHALTEN of TEILER isbeginZLR: process (CLK)

variable QVAR: integer range 0 to 31;begin

if CLK='1' and CLK'event then -- Synchron zaehlenQVAR := QVAR + 1;if QVAR = N then -- Endwert pruefen

TC <= '1'; -- Terminal Count SetzenQVAR := 0; -- Zaehler Loesechen

elseTC <= '0'; -- Terminal Count zuruecksetzen

end if;end if;

end process ZLR;end VERHALTEN;

Aufgabe 20

-- Aufgabe 20-- Ladbarer N-Bit Zaehler mit Freigabeeingang

entity LD_ZLR isgeneric( N: natural:=4);port( CLK, ENABLE, RESET, LOAD: in bit;LOAD_VAL: in integer range 0 to 2*N-1;Q: buffer integer range 0 to 2**N-1);

end LD_ZLR;

architecture VERHALTEN of LD_ZLR isbeginP1: process(CLK, RESET)

beginif RESET='1' then -- Asynchron

Q <= 0; -- Loeschenelsif CLK='1' and CLK'event then -- Synchron

if ENABLE ='1' then -- Nur bei Freigabeif LOAD ='1' then

Q <= LOAD_VAL; -- Ladenelse

Q <= (Q+1) mod 2**N; -- Zaehlenend if;

end if;end if;

end process P1;end VERHALTEN;

Page 10: VHDL-Synthese digitaler Systeme Lösungen zu den ...users.etech.haw-hamburg.de/users/schubert/di1/VHDL-Loesungen.pdf · 1 VHDL-Synthese digitaler Systeme Lösungen zu den Übungsaufgaben

10

Aufgabe 21

-- Aufgabe 21-- 1 zu 4 Demultiplexer mit case-Anweisung

library ieee;use ieee.std_logic_1164.all;

entity DEMUX isport( DIN, EN: in std_ulogic; SEL: in bit_vector(1 downto 0); DOUT0, DOUT1, DOUT2, DOUT3: out std_ulogic);

end DEMUX;

architecture VERHALTEN of DEMUX isbeginP1: process(SEL, DIN, EN)

beginDOUT0<='Z'; DOUT1<='Z'; DOUT2<='Z'; DOUT3<='Z'; -- Alle Z

if EN='1' thencase SEL is

when "00" => DOUT0 <= DIN;when "01" => DOUT1 <= DIN;when "10" => DOUT2 <= DIN;when "11" => DOUT3 <= DIN;

end case;end if;

end process P1;end VERHALTEN;

Page 11: VHDL-Synthese digitaler Systeme Lösungen zu den ...users.etech.haw-hamburg.de/users/schubert/di1/VHDL-Loesungen.pdf · 1 VHDL-Synthese digitaler Systeme Lösungen zu den Übungsaufgaben

11

Aufgabe 22

-- Aufgabe 22-- Paritaetschecker fuer gerade Paritaet

library ieee;use ieee.std_logic 1164.all;

entity PAR_CHECK isgeneric( N : integer :=4);port( D: in bit_vector(N downto 0); OK: out bit);

end PAR_CHECK;

architecture VERHALTEN of PAR_CHECK issignal GERADE: bit;beginPARGEN: process( D )

variable PAR: boolean; begin

PAR:= false; -- Var. initialisierenfor I in N-1 downto 0 loop -- Alle Bits ausser MSB

if D(I) = '1' then -- Falls '1'PAR := not PAR; -- Toggeln

end if;end loop;if ((PAR and D(N) = '1') or

(not PAR and D(N) = '0')) -- Mit MSB vergleichenthen OK <= '1';else OK <= '0';

end if;end process PARGEN;

end VERHALTEN;