69 lines
2.7 KiB
VHDL
69 lines
2.7 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 top_entity_float_add is
|
|
port (
|
|
clk : in std_logic; -- Eingangssignal Systemtakt
|
|
reset : in std_logic; -- Eingangssignal Reset zum Setzen der Default Werte
|
|
run_calc: in std_logic; -- Eingangssignal wenn aktiv soll gerechnet werden
|
|
operand_a : in STD_LOGIC_VECTOR(31 downto 0); -- Erster Operand in 32-bit float
|
|
operand_b : in STD_LOGIC_VECTOR(31 downto 0); -- Zweiter Operand in 32-bit float
|
|
result : out std_logic_vector(31 downto 0); -- Endergebnis Berechnung Addition (im slv ist ein 32-bit float gespeichert)
|
|
calc_complete : out std_logic -- Flag das anzeiugt wann die Berechnung fertig ist (bei 1=high)
|
|
);
|
|
end top_entity_float_add;
|
|
|
|
architecture Behavioral of top_entity_float_add is
|
|
|
|
-- Legen Sie ein signal result_sum als std_logic_vector mit Laenge 32 Bit an
|
|
|
|
-- Legen Sie ein signal start als std_logic
|
|
|
|
-- Legen Sie ein signal done als std_logic
|
|
|
|
begin
|
|
|
|
-- Instanziieren Sie direkt die float_add Komponente
|
|
-- Als Takt und Reset sollen die jeweiligen Eingaenge der top_entity_float_add uebergeben werden
|
|
-- An den anderen Ports die jeweiligen zugehoerigen Signale (welche oben angelegt worden sind)
|
|
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 => ,
|
|
-- floating point operand a
|
|
A => ,
|
|
-- floating point operand b
|
|
B => ,
|
|
-- Ergebnis der Addition in floating point
|
|
sum =>
|
|
);
|
|
|
|
-- Realisieren Sie einen getakteten Prozess control mit folgenden Verhalten
|
|
--
|
|
-- Initialisierung der Signale bei Reset aktiv (reset=1):
|
|
-- result soll=0 sein
|
|
-- start soll=0 sein
|
|
-- calc_complete soll=0 sein
|
|
--
|
|
-- bei steigende Flanke:
|
|
-- Nur wenn run_calc gleich 1 ist:
|
|
-- dann soll wenn done=1 und start=1 ist
|
|
-- start=0, calc_complete=1 und result_sum dem Ausgang result zugewiesen werden
|
|
-- ansonsten soll
|
|
-- start=1, calc_complete=0 sein
|
|
--
|
|
control : process(reset,clk)
|
|
begin
|
|
|
|
end process control;
|
|
|
|
end Behavioral;
|