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;