tested, fixed and verified multimessage packet reads

This commit is contained in:
Erik Örtenberg 2025-03-11 15:34:39 +01:00
parent c96300f6fc
commit 9979b7b6dd
4 changed files with 24 additions and 18 deletions

View File

@ -137,7 +137,6 @@ begin
ext_control_input.cmd <= "00";
wait until int_control_input.active_driver(0) = '0';
wait for CLK_PERIOD;
ext_control_input.seq_mem_access_count <= 2;
report "Task completed in driver, sending next task...";
ext_control_input.address <= x"FA0FA0FA";
ext_control_input.cmd <= "10";
@ -149,6 +148,10 @@ begin
wait until int_control_input.active_driver(0) = '0';
wait for CLK_PERIOD;
report "Task completed in driver, ending simulation stimulus";
ext_control_input.address <= (others => '0');
ext_control_input.cmd <= "00";
ext_control_input.driver_id <= "0";
ext_control_input.seq_mem_access_count <= 0;
wait;
end process stimulus_proc;
@ -160,6 +163,7 @@ begin
end process external_stimulus_signal;
external_stimulus: process
variable input : positive := 1;
begin
wait for CLK_PERIOD / 1000;
curr_word <= "00000000";
@ -176,15 +180,26 @@ begin
curr_word <= "00000000";
wait for CLK_PERIOD * 140;
curr_word <= "00101001";
wait for CLK_PERIOD*20;
curr_word <= "01100001";
wait for CLK_PERIOD;
curr_word <= "00100000";
wait for CLK_PERIOD;
curr_word <= "00010000";
wait for CLK_PERIOD;
curr_word <= "00000000";
wait for CLK_PERIOD * 20;
curr_word <= "01100111";
wait for CLK_PERIOD;
for x in 0 to 127 loop
curr_word <= std_logic_vector(to_unsigned(input, 8));
input := input + 1 mod 256;
wait for CLK_PERIOD;
end loop;
curr_word <= "00000000";
wait for CLK_PERIOD * 140;
wait for CLK_PERIOD * 20;
curr_word <= "01100111";
wait for CLK_PERIOD;
for x in 0 to 127 loop
curr_word <= std_logic_vector(to_unsigned(input, 8));
input := input + 1 mod 256;
wait for CLK_PERIOD;
end loop;
wait;
end process external_stimulus;

View File

@ -170,8 +170,6 @@ begin
else
next_state <= RX_RESPONSE;
end if;
when RX_BODY_NO_OUT =>
next_state <= RX_BODY;
when RX_BODY =>
-- Here we want to stay in RX_BODY for the duration of a packet.
if st.read_stage = 0 then
@ -227,7 +225,6 @@ begin
ext_out_data_cmd := st.curr_addr(7 downto 0);
end if;
when RX_RESPONSE =>
when RX_BODY_NO_OUT =>
when RX_BODY =>
int_out.payload <= st.ext_in_reg.data;
int_out.write_enable_in <= '1';

View File

@ -189,9 +189,6 @@ begin
expected_out <= "00000000";
check_next_state(RX_RESPONSE);
wait for CLK_PERIOD;
wait for CLK_PERIOD / 4;
check_next_state(RX_BODY_NO_OUT);
wait for CLK_PERIOD * 3 /4;
check_next_state(RX_BODY);
wait for CLK_PERIOD;
check_next_state(RX_BODY);
@ -219,9 +216,6 @@ begin
expected_out <= "00000000";
check_next_state(RX_RESPONSE);
wait for CLK_PERIOD;
wait for CLK_PERIOD / 4;
check_next_state(RX_BODY_NO_OUT);
wait for CLK_PERIOD * 3 /4;
check_next_state(RX_BODY);
wait for CLK_PERIOD;
check_next_state(RX_BODY);

View File

@ -18,7 +18,7 @@ package socbridge_driver_tb_pkg is
type state_t is
(IDLE, ADDR1, ADDR2, ADDR3, ADDR4,
TX_HEADER, TX_BODY, TX_ACK,
RX_HEADER, RX_RESPONSE, RX_BODY_NO_OUT, RX_BODY);
RX_HEADER, RX_RESPONSE, RX_BODY);
--- TRANSLATOR ---
type translator_state_t is (IDLE, SEND, SEND_ACCEPTED, AWAIT);