vhdl_einfuehrung_u2/fsm_add.vhd
2025-11-10 21:52:14 +01:00

97 lines
4.1 KiB
VHDL

library IEEE;
use IEEE.STD_LOGIC_1164.ALL; -- Bibliothek für std_logic und std_logic_vector
use IEEE.NUMERIC_STD.ALL; -- Bibliothek für signed und unsigned Datentypen
entity fsm_add is
port (
clk : in std_logic; -- Eingangssignal fuer den Takt
reset : in std_logic; -- Eingangssignal zum Zuruecksetzen des Zaehlers
run_calc : in std_logic; -- Eingangssignal welches die Berechnungen startet
calc_cnt: out std_logic_vector( 3 downto 0 ); -- Ausgang welcher die Anzahl der Berechnungen anzeigt
signal_a_read : out std_logic; -- Ausgang um Daten aus den FIFO A anzufordern
signal_a_readdata : in std_logic_vector( 31 downto 0 ); -- Eingang der zuletzt gelesenen Daten aus dem FIFO A
signal_b_read : out std_logic; -- Ausgang um Daten aus den FIFO B anzufordern
signal_b_readdata : in std_logic_vector( 31 downto 0 ); -- Eingang der zuletzt gelesenen Daten aus dem FIFO B
signal_write : out std_logic; -- Ausgang um Daten in den Ausgangsfifo zu schreiben
signal_writedata : out std_logic_vector( 31 downto 0 ) -- Ausgang die Daten welche in den Ausgangsfifo geschrieben werden sollen
);
end entity fsm_add;
architecture rtl of fsm_add is
-- Es soll eine type AddState angelegt werden mit den Zuständen ADD_IDLE, ADD_READ_FIFO, ADD_CALC und ADD_STORE_RESULT
-- Es soll Signal current_add_state des oben angelegten Types AddState deklariert werden
-- Es soll Signal next_add_state des oben angelegten Types AddState deklariert werden
-- Es soll Signal start_calc als std_logic angelegt werden
-- Es soll Signal done als std_logic angelegt werden
-- Es soll Signal calc_cnt_int als Integer mit Bereich 0 bis 15 angelegt werden
-- Legen Sie ein signal result_sum als std_logic_vector mit Laenge 32 Bit an
begin
-- Instanzieren Sie direkt die float_add Komponente
-- Als Takt und Reset sollen die jeweiligen Eingaenge der top_entity uebergeben werden
-- Es sollen der Eingang
-- Das Additonsergebnis soll dem Signal result_sum gespeichert werden
u_float_add : entity work.float_add
port map(
-- Eingangssignal fuer den Takt
clk => ,
-- Eingangssignal zum Zuruecksetzen des Zaehlers
reset => ,
-- Eingang um die Berechnung zu starten
start => ,
-- Ausgang der anzeigt, dass die Berechnung fertig ist
done => ,
-- Gelesene Daten aus den FIFO A
A => ,
-- Gelesene Daten aus den FIFO B
B => ,
-- Ergebnis der Addition in floating point
sum =>
);
-- Der kombinatiorische Prozess add_state_transitions soll das Uebergangsschaltnezt steuern
--
-- Es soll der naechste Zustand next_add_state entsprechend der Zustandsmaschine angesteuert werden
--
add_state_transitions : process ( all ) is
begin
end process add_state_transitions;
-- Der Prozess sync soll den Zustandsspeicher und das Ausgangsschaltnetz steuern
-- Alle gesteuerten Signale sollen bei Reset sinnvoll vorbelegt werden
-- Es soll ein getakter Prozess welcher auf eine steigende Flanke reagiert genutzt werden
--
-- Folgende Signale sollen hier gesteuert werden
-- current_add_state (Zusatandsspeicher)
-- signal_a_read (Steuersignal um Daten aus den FIFO A zu lesen)
-- signal_b_read (Steuersignal um Daten aus den FIFO B zu lesen)
-- signal_write (Steuersignal um Daten in den Ausgangsfifo zu schreiben)
-- calc_cnt_int (Zaehler welcher die Anzahl der berechneten Werrte abbilden soll)
-- signal_writedata (Werte welcher in den Ausgangsfifo geschrieben werden soll = letzter berechneter Wert result_sum)
--
-- Die Signale sollen entsprechend der Zustandsmaschine angesteuert werden
--
sync : process ( clk, reset ) is
begin
end process sync;
-- Weisen Sie dem Ausgang calc_cnt das signal calc_cnt_int zu (Datentypen beachten Konvertierung noetig)
end architecture rtl;