Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.
Klausur 2011
hallo zusammen,
wäre dankbar wenn mir jemand sagen könnte ob das unten richtig ist (Aufgabe 3 aus Klausur 2011)
--Aufgabe 3 (Klausur 27.April 2011)
--a)
Ausgabe Multiplexer
Ausgabe Decoder
--b)
entity zssteuerung
port (
i_clk: in std_logic;
i_equ: in std_logic;
i_plus: in std_logic;
i_minus: in std_logic;
i_zero: in std_logic;
i_one: in std_logic;
o_eo1: out std_logic;
o_eo2: out std_logic;
o_ae: out std_logic);
end entity;
--c)
architecture zssteu of zssteuerung is
type statetype is (eo1, eo2, ae);
signal state : statetype;
zssteuer: process (i_clk)
begin
if rising_edge(i_clk) then
case state is
when eo1 =>
if (i_plus = '1' or i_minus = '1') then
state <= eo2;
else
state <= eo1;
end if;
when eo2 =>
if(i_plus = '1' or i_minus = '1' or i_equ = '1') then
state <= ae;
else
state <= eo2;
end if;
when ae =>
if(i_zero = '1' or i_one = '1') then
state <= eo1;
else
state <= ae;
end if;
when others =>
end case;
end if;
if(state = eo1) then
o_eo1 <= '1';
o_eo2 <= '0';
o_ae <= '0';
else if (state = eo2)
o_eo1 <= '0';
o_eo2 <= '1';
o_ae <= '0';
else
o_eo1 <= '0';
o_eo2 <= '0';
o_ae <= '1';
end if;
end process zssteuer;
end architecture zssteu;
--d)
entity alu
port(
i_or1: in std_logic_vector(16 downto 0);
i_or2: in std_logic_vector(16 downto 0);
i_or: in std_logic;
o_output: out std_logic_vector(16 downto 0)
);
end entity;
--e)
architecture addorsubt of alu is
s_or: in std_logic;
s_or1: in std_logic_vector(16 downto 0);
s_or2: in std_logic_vector(16 downto 0);
s_output: out std_logic_vector(16 downto 0)
aluop: process (i_or)
begin
s_or1 <= i_or1;
s_or2 <= i_or2;
s_or <= i_or;
if(s_or = '1') then
s_output <= s_or1 + s_or2;
else
s_output <= s_or1 - s_or2;
end if
o_output <= s_output;
end process;
end architecture;
--f)
von | signalname | nach
Zustandssteuerung | state | AusgabeMultiplexer
Operand 1 Register | s_or1 | AusgabeMultiplexer
Operand 2 Register | s_or2 | AusgabeMultiplexer
Ausgabe Register | s_ae | AusgabeMultiplexer
--g)
architecture ausgabe of AusgabeMultiplexer is
s_state: in std_logic;
s_or1: in std_logic_vector(16 downto 0);
s_or2: in std_logic_vector(16 downto 0);
s_ae: in std_logic_vector(16 downto 0);
s_output: out std_logic_vector(16 downto 0)
multiplex: process (i_or1, i_or2, i_ae)
s_or1 <= ior1;
s_or2 <= ior2;
s_ae <= i_ae;
begin
case state is
when eo1 =>
s_output <= s_or1;
when eo2 =>
s_output <= s_or2;
when ae =>
s_output <= s_ae;
end case;
o_output <= s_output;
end process;
end architecture;
ich schrieb in einem anderen thread schonmal ungefähr folgendes:
mit aufgabenstellung könnte ich / andere leute die nicht gerade gti lernen und alle altklausuren da haben sogar versuchen, dir zu helfen. kompilieren zum syntaxcheck kannst du selber
Die Musterlösung und die Besprechung kannst du hier finden.
Generell als Tipp: Den else-Block in Abfragen der Form
when eo2 =>
if(i_plus = '1' or i_minus = '1' or i_equ = '1') then
state <= ae;
else
state <= eo2;
end if;
kann man auch weglassen, da dort im Prinzip nichts passiert.
Die VHDL Aufgabe war schon mal Übungsaufgabe. Hier gibts ne mögliche Lösung zum Abgleichen: https://wwwcip.informatik.uni-erlangen.de/~ej39evyx/GTI/SS12/uebung11/uebung11_loesung.pdf
Ich hätte Allerdings auch noch eine Frage. Vorgegeben ist folgendes Bild:
Man soll jetzt die Entity zur Einheit Zustandssteuerung angeben. Ich habe folgende blaue Lösung:
[color=blue]entity zustandssteuerung is
port(
BTN_1 : in std_logic;
BTN_0 : in std_logic;
BTN_minus : in std_logic;
BTN_plus : in std_logic;
BTN_istgleich : in std_logic;
CLK : in std_logic;
STATE_eo1 : out std_logic;
STATE_eo2 : out std_logic;
STATE_ae : out std_logic
);
end zustandssteuerung;[/color]
Und laut dem oben verlinkten Übungsblatt fehlt aber das Rote:
[color=blue]entity zustandssteuerung is
port(
BTN_1 : in std_logic;
BTN_0 : in std_logic;
BTN_minus : in std_logic;
BTN_plus : in std_logic;
BTN_istgleich : in std_logic;
CLK : in std_logic;[/color]
[color=crimson] EDGEDETECT : in std_logic;
RESET : in std_logic;[/color]
[color=blue] STATE_eo1 : out std_logic;
STATE_eo2 : out std_logic;
STATE_ae : out std_logic
);
end zustandssteuerung;[/color]
Meine Frage nun: Dass edgedetect fehlt seh ich ja noch ein, immerhin heißt der Eingang ja eigentlich auch “Flankenerkennung” und nicht “Clock”. Aber woher wissen wir, dass wir ein Reset brauchen? Angegeben ist ja keins und ich fang nicht an in der Klausur drüber nachzudenken welche weiteren Eingänge in der realen, praktischen Umsetzung möglicherweise noch von Nutzen wären. Danke!
also ich seh das genauso
Ich meine mich erinnern zu können, dass mal einer der Tutoren meinte, dass VHDL mittlerweile nicht mehr in dem Umfang dran kommt,
wie das früher mal der Fall war. Ist das richtig? Ich hoffe es, denn VHDL ist meine große Schwäche (im Moment).
das war schon letztes Mal so.