rand angepasst

This commit is contained in:
solmazal74684 2025-11-25 10:15:33 +01:00
parent c90753aa23
commit 1c6c6a26d9

View File

@ -25,8 +25,28 @@ architecture rtl of rand is
signal current_task_state : work.task.State; signal current_task_state : work.task.State;
signal next_task_state : work.task.State; signal next_task_state : work.task.State;
signal index : integer range 0 to work.task.STREAM_LEN; signal index : integer range 0 to work.task.STREAM_LEN;
signal f_start : std_logic := '0';
signal f_done : std_logic := '0';
signal f_A : std_logic_vector(31 downto 0) := (others => '0');
signal f_B : std_logic_vector(31 downto 0) := (others => '0');
signal f_sum : std_logic_vector(31 downto 0) := (others => '0');
begin begin
----------------------------------------------------------------------------------------------------------------------------------------------------------
u_float_rand : entity work.float_rand --Zugriff auf die Float_ datei
port map (
clk => clk,
reset => reset,
start => f_start,
done => f_done,
A => f_A,
B => f_B,
sum => f_sum
);
--------------------------------------------------------------------------------------------------------------------------
task_state_transitions : process ( current_task_state, task_start, index ) is task_state_transitions : process ( current_task_state, task_start, index ) is
begin begin
next_task_state <= current_task_state; next_task_state <= current_task_state;
@ -36,7 +56,7 @@ begin
next_task_state <= work.task.TASK_RUNNING; next_task_state <= work.task.TASK_RUNNING;
end if; end if;
when work.task.TASK_RUNNING => when work.task.TASK_RUNNING =>
if ( index = work.task.STREAM_LEN - 1 ) then if ( index = work.task.STREAM_LEN ) then
next_task_state <= work.task.TASK_DONE; next_task_state <= work.task.TASK_DONE;
end if; end if;
when work.task.TASK_DONE => when work.task.TASK_DONE =>
@ -45,22 +65,58 @@ begin
end if; end if;
end case; end case;
end process task_state_transitions; end process task_state_transitions;
-----------------------------------------------------------------------------------------------------------------------------------------------------
sync : process ( clk, reset ) is sync : process ( clk, reset ) is
begin begin
if ( reset = '1' ) then if ( reset = '1' ) then
current_task_state <= work.task.TASK_IDLE; current_task_state <= work.task.TASK_IDLE;
index <= 0; index <= 0;
f_start <= '0';
signal_a_read <= '0';
signal_b_read <= '0';
signal_write <= '0';
f_A <= (others => '0');
f_B <= (others => '0');
elsif ( rising_edge( clk ) ) then elsif ( rising_edge( clk ) ) then
current_task_state <= next_task_state; current_task_state <= next_task_state;
case next_task_state is case next_task_state is
when work.task.TASK_IDLE => when work.task.TASK_IDLE =>
index <= 0; index <= 0;
signal_a_read <= '0';
signal_b_read <= '0';
f_start <= '0';
signal_write <= '0'; signal_write <= '0';
signal_writedata <= (others => '0');
when work.task.TASK_RUNNING => when work.task.TASK_RUNNING =>
index <= index + 1; if f_start = '0' and f_done = '0' then
signal_write <= '1'; --FIFO lesen
signal_writedata <= ( others => '0' ); signal_a_read <= '1';
signal_b_read <= '1';
f_A <= signal_a_readdata;
f_B <= signal_b_readdata;
f_start <= '1';
signal_write <= '0';
elsif f_start = '1' and f_done = '0' then
--Startet nur einen tAKT
signal_a_read <= '0';
signal_b_read <= '0';
elsif f_start ='1' and f_done = '1' then
--Ergebnisse speiecern
f_start <= '0';
signal_write <= '1';
signal_writedata <= f_sum;
--signal_write <= '0';
--signal_writedata <= ( others => '0' );
--Index erhöhen
--if index < work.task.STREAM_LEN -1 then
index <= index + 1;
--end if;
else signal_write <= '0';
end if;
--index <= index + 1;
-- signal_write <= '1';
-- signal_writedata <= ( others => '0' );
when work.task.TASK_DONE => when work.task.TASK_DONE =>
index <= 0; index <= 0;
signal_write <= '0'; signal_write <= '0';