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"; ext_control_input.cmd <= "00";
wait until int_control_input.active_driver(0) = '0'; wait until int_control_input.active_driver(0) = '0';
wait for CLK_PERIOD; wait for CLK_PERIOD;
ext_control_input.seq_mem_access_count <= 2;
report "Task completed in driver, sending next task..."; report "Task completed in driver, sending next task...";
ext_control_input.address <= x"FA0FA0FA"; ext_control_input.address <= x"FA0FA0FA";
ext_control_input.cmd <= "10"; ext_control_input.cmd <= "10";
@ -149,6 +148,10 @@ begin
wait until int_control_input.active_driver(0) = '0'; wait until int_control_input.active_driver(0) = '0';
wait for CLK_PERIOD; wait for CLK_PERIOD;
report "Task completed in driver, ending simulation stimulus"; 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; wait;
end process stimulus_proc; end process stimulus_proc;
@ -160,6 +163,7 @@ begin
end process external_stimulus_signal; end process external_stimulus_signal;
external_stimulus: process external_stimulus: process
variable input : positive := 1;
begin begin
wait for CLK_PERIOD / 1000; wait for CLK_PERIOD / 1000;
curr_word <= "00000000"; curr_word <= "00000000";
@ -176,15 +180,26 @@ begin
curr_word <= "00000000"; curr_word <= "00000000";
wait for CLK_PERIOD * 140; wait for CLK_PERIOD * 140;
curr_word <= "00101001"; 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; wait for CLK_PERIOD;
curr_word <= "00000000"; 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; wait;
end process external_stimulus; end process external_stimulus;

View File

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

View File

@ -189,9 +189,6 @@ begin
expected_out <= "00000000"; expected_out <= "00000000";
check_next_state(RX_RESPONSE); check_next_state(RX_RESPONSE);
wait for CLK_PERIOD; 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); check_next_state(RX_BODY);
wait for CLK_PERIOD; wait for CLK_PERIOD;
check_next_state(RX_BODY); check_next_state(RX_BODY);
@ -219,9 +216,6 @@ begin
expected_out <= "00000000"; expected_out <= "00000000";
check_next_state(RX_RESPONSE); check_next_state(RX_RESPONSE);
wait for CLK_PERIOD; 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); check_next_state(RX_BODY);
wait for CLK_PERIOD; wait for CLK_PERIOD;
check_next_state(RX_BODY); check_next_state(RX_BODY);

View File

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