diff --git a/fsm_add.vhd b/fsm_add.vhd new file mode 100644 index 0000000..9509f4c --- /dev/null +++ b/fsm_add.vhd @@ -0,0 +1,96 @@ + + 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;