From 9979b7b6dd182baa99039f9978ef1f8c10076c4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erik=20=C3=96rtenberg?= Date: Tue, 11 Mar 2025 15:34:39 +0100 Subject: [PATCH] tested, fixed and verified multimessage packet reads --- .../control_socbridge_tb.vhd | 31 ++++++++++++++----- src/socbridge/socbridge_driver.vhd | 3 -- src/socbridge/socbridge_driver_tb.vhd | 6 ---- src/socbridge/socbridge_driver_tb_pkg.vhd | 2 +- 4 files changed, 24 insertions(+), 18 deletions(-) diff --git a/src/control_socbridge_merge/control_socbridge_tb.vhd b/src/control_socbridge_merge/control_socbridge_tb.vhd index e8ad87d..d3dc4e2 100644 --- a/src/control_socbridge_merge/control_socbridge_tb.vhd +++ b/src/control_socbridge_merge/control_socbridge_tb.vhd @@ -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; diff --git a/src/socbridge/socbridge_driver.vhd b/src/socbridge/socbridge_driver.vhd index 86b4f9d..0d8fb57 100644 --- a/src/socbridge/socbridge_driver.vhd +++ b/src/socbridge/socbridge_driver.vhd @@ -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'; diff --git a/src/socbridge/socbridge_driver_tb.vhd b/src/socbridge/socbridge_driver_tb.vhd index 75bd29c..8ac24a5 100644 --- a/src/socbridge/socbridge_driver_tb.vhd +++ b/src/socbridge/socbridge_driver_tb.vhd @@ -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); diff --git a/src/socbridge/socbridge_driver_tb_pkg.vhd b/src/socbridge/socbridge_driver_tb_pkg.vhd index f5febce..1c4bc46 100644 --- a/src/socbridge/socbridge_driver_tb_pkg.vhd +++ b/src/socbridge/socbridge_driver_tb_pkg.vhd @@ -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);