From 546ebfb345e7ae4c3f5c4d68e7e4b2eb61aad3ff Mon Sep 17 00:00:00 2001 From: Ingo Froehlich Date: Wed, 28 Feb 2018 19:27:45 +0100 Subject: [PATCH] added number of pakets, IF --- media_interfaces/sync/rx_control.vhd | 7 ++++--- media_interfaces/sync/tb/med_sync_tb.vhd | 26 ++++++++++++++---------- media_interfaces/sync/tx_control.vhd | 1 + 3 files changed, 20 insertions(+), 14 deletions(-) diff --git a/media_interfaces/sync/rx_control.vhd b/media_interfaces/sync/rx_control.vhd index 7345eb8..8c9c0e6 100644 --- a/media_interfaces/sync/rx_control.vhd +++ b/media_interfaces/sync/rx_control.vhd @@ -94,7 +94,7 @@ signal pulse_good_100 : std_logic; signal pulse_bad_100 : std_logic; signal waiting_for_retr : std_logic := '0'; signal good_pos_counter : unsigned(7 downto 0) := (others => '0'); - +signal num_pakets : unsigned(3 downto 0) := (others => '0'); begin @@ -250,16 +250,16 @@ PROC_RX_FSM : process begin rx_data(16) <= next_sop; rx_data(17) <= '0'; ct_fifo_write <= '1'; + num_pakets <= num_pakets+1; rx_state <= FIRST; else rx_state <= SLEEP; end if; when GET_CRC => --TODO: mitzaehlen, of CRC nach 5 16-Bit-Paketen kommt - -- alles wegwerfen bis neue retransmission kommt crc_reset <= '1'; rx_state <= FIRST; - if (crc_q = reg_rx_data_in and waiting_for_retr = '0') then -- CRC match + if (crc_q = reg_rx_data_in and waiting_for_retr = '0' and num_pakets = 5) then -- CRC match pulse_good <= '1'; else pulse_bad <= '1'; @@ -268,6 +268,7 @@ PROC_RX_FSM : process begin waiting_for_retr <= '1'; end if; end if; + num_pakets <= (others => '0'); when GET_RETR => rx_state <= FIRST; diff --git a/media_interfaces/sync/tb/med_sync_tb.vhd b/media_interfaces/sync/tb/med_sync_tb.vhd index 663c72a..408d924 100644 --- a/media_interfaces/sync/tb/med_sync_tb.vhd +++ b/media_interfaces/sync/tb/med_sync_tb.vhd @@ -121,25 +121,25 @@ process begin wait for 30 us; -- generate good packages to test the RAM overflow - GEN_GOOD: for i in 0 to 60 loop + GEN_GOOD: for i in 0 to 3 loop wait until rising_edge(clk_100_m); wait for 1 ns; - int2med_m.data <= x"affe"; + int2med_m.data <= x"0001"; int2med_m.packet_num <= "100"; int2med_m.dataready <= '1'; wait until rising_edge(clk_100_m); wait for 1 ns; - int2med_m.data <= x"affe"; + int2med_m.data <= x"0002"; int2med_m.packet_num <= "000"; int2med_m.dataready <= '1'; wait until rising_edge(clk_100_m); wait for 1 ns; - int2med_m.data <= x"affe"; + int2med_m.data <= x"0003"; int2med_m.packet_num <= "001"; int2med_m.dataready <= '1'; wait until rising_edge(clk_100_m); wait for 1 ns; - int2med_m.data <= x"affe"; + int2med_m.data <= x"0004"; int2med_m.packet_num <= "010"; int2med_m.dataready <= '1'; wait until rising_edge(clk_100_m); wait for 1 ns; - int2med_m.data <= x"affe"; + int2med_m.data <= x"0005"; int2med_m.packet_num <= "011"; int2med_m.dataready <= '1'; wait until rising_edge(clk_100_m); wait for 1 ns; @@ -173,26 +173,30 @@ process begin int2med_m.dataready <= '0'; wait until rising_edge(clk_100_m); wait for 1 ns; wait until rising_edge(clk_100_m); wait for 1 ns; + wait until rising_edge(clk_100_m); wait for 1 ns; + wait until rising_edge(clk_100_m); wait for 1 ns; + wait until rising_edge(clk_100_m); wait for 1 ns; + wait until rising_edge(clk_100_m); wait for 1 ns; --good package which should be thrown away wait until rising_edge(clk_100_m); wait for 1 ns; - int2med_m.data <= x"dead"; + int2med_m.data <= x"ff01"; int2med_m.packet_num <= "100"; int2med_m.dataready <= '1'; wait until rising_edge(clk_100_m); wait for 1 ns; - int2med_m.data <= x"dead"; + int2med_m.data <= x"ff02"; int2med_m.packet_num <= "000"; int2med_m.dataready <= '1'; wait until rising_edge(clk_100_m); wait for 1 ns; - int2med_m.data <= x"dead"; + int2med_m.data <= x"ff03"; int2med_m.packet_num <= "001"; int2med_m.dataready <= '1'; wait until rising_edge(clk_100_m); wait for 1 ns; - int2med_m.data <= x"dead"; + int2med_m.data <= x"ff04"; int2med_m.packet_num <= "010"; int2med_m.dataready <= '1'; wait until rising_edge(clk_100_m); wait for 1 ns; - int2med_m.data <= x"dead"; + int2med_m.data <= x"ff05"; int2med_m.packet_num <= "011"; int2med_m.dataready <= '1'; wait until rising_edge(clk_100_m); wait for 1 ns; diff --git a/media_interfaces/sync/tx_control.vhd b/media_interfaces/sync/tx_control.vhd index 3e05dcf..553517d 100644 --- a/media_interfaces/sync/tx_control.vhd +++ b/media_interfaces/sync/tx_control.vhd @@ -249,6 +249,7 @@ begin TX_K_OUT <= '1'; current_state <= SEND_IDLE_H; first_idle <= first_idle; + load_eop <= '0'; when SEND_IDLE_H => if rx_allow_qtx = '1' or toggle_idle = '1' then -- 2.43.0