next_INT_MASTER_DATAREADY_OUT <= sbuf_free and (fifo_to_int_read_before or not or_all(master_counter));
if APL_SEND_IN = '0' then -- terminate the transfer
update_registered_trailer <= '1';
--- next_INT_MASTER_DATAREADY_OUT <= sbuf_free;
- if fifo_to_int_empty = '1' then -- immediate stop
- if master_counter = "11" and sbuf_free = '1' then
- next_state_to_int <= SEND_TRAILER;
- end if;
+ if fifo_to_int_empty = '1' and master_counter = "11" and sbuf_free = '1' then -- immediate stop
+ next_state_to_int <= SEND_TRAILER;
else
next_state_to_int <= SHUTDOWN;
end if;
end if;
when SHUTDOWN =>
fifo_to_int_read <= not fifo_to_int_empty and sbuf_free and or_all(master_counter);
- next_INT_MASTER_DATAREADY_OUT <= sbuf_free and (fifo_to_int_read_before or not or_all(master_counter));
+ next_INT_MASTER_DATAREADY_OUT <= sbuf_free and
+ ((fifo_to_int_read_before or not or_all(master_counter)) or --write data from fifo
+ (fifo_to_int_empty and or_all(master_counter))); --fill with padding words
if master_counter = "11" and fifo_to_int_empty = '1' and sbuf_free = '1' then
- --implicit: fill with padding words
next_state_to_int <= SEND_TRAILER;
- --out_select <= TRM;
end if;
when SEND_TRAILER =>
out_select <= TRM;
next_INT_MASTER_DATAREADY_OUT <= sbuf_free;
if master_counter = "11" and sbuf_free = '1' then
next_state_to_int <= IDLE;
- --next_INT_MASTER_DATAREADY_OUT <= '0';
next_sequence_counter <= sequence_counter +1;
release_slave_running <= '1';
end if;
fifo_to_int_data_in <= APL_DATA_IN;
fifo_to_int_packet_num_in <= APL_PACKET_NUM_IN;
fifo_to_int_write <= (APL_WRITE_IN and not fifo_to_int_full);
--- when (current_state = IDLE or current_state = SEND_HEADER or current_state = RUNNING)
--- else '0';
-
APL_FIFO_FULL_OUT <= fifo_to_int_full; -- APL has to stop writing
- INT_SLAVE_READ_OUT <= reg_INT_SLAVE_READ_OUT;
-
-
-- connect receiver
fifo_to_apl_data_in <= INT_SLAVE_DATA_IN;
fifo_to_apl_packet_num_in <= INT_SLAVE_PACKET_NUM_IN;
-
+ INT_SLAVE_READ_OUT <= reg_INT_SLAVE_READ_OUT;
genAPL_RUN_OUT_0: if API_TYPE = 0 generate
APL_RUN_OUT <= slave_running;
STAT_api_control_signals(12) <= apl_to_buf_INIT_READ;
STAT_api_control_signals(19 downto 16) <= MED_INIT_DATA_OUT(3 downto 0);
STAT_api_control_signals(21 downto 20) <= MED_INIT_PACKET_NUM_OUT(1 downto 0);
+STAT_api_control_signals(22) <= MED_INIT_DATAREADY_OUT and MED_INIT_READ_IN;
--STAT_api_control_signals(30 downto 13) <= (others => '0');
STAT_api_control_signals(31) <= buf_to_apl_INIT_READ;
fifo_wr_en_a <= reg_RX_DV and not reg_RX_ER and rx_allow;
fifo_din_a <= rx_allow & reg_RX_ER & reg_RXD;
- fifo_rd_en_a <= not fifo_empty_a;
+ fifo_rd_en_a <= '1';--not fifo_empty_a;
fifo_reset <= internal_reset;
buf_MED_DATAREADY_OUT <= last_fifo_rd_en_a and not fifo_dout_a(16) and fifo_dout_a(17);
MED_ERROR_OUT <= buf_MED_ERROR_OUT;
if internal_reset = '1' then
last_fifo_rd_en_a <= '0';
else
- last_fifo_rd_en_a <= fifo_rd_en_a;
+ last_fifo_rd_en_a <= fifo_rd_en_a and not fifo_empty_a;
end if;
end if;
end process;
fifostatus_out => fifo_status_m
);
- fifo_rd_en_m <= tx_allow and not fifo_empty_m;
-
TLK_TX_ER <= '0';
TLK_TX_EN <= reg_TX_EN;
TLK_TXD <= reg_TXD;
end if;
end process;
+ fifo_rd_en_m <= tx_allow; -- and not fifo_empty_m;
process(TLK_CLK_neg)
begin
if internal_reset = '1' then
reg_TXD <= (others => '0');
--reg_TX_EN <= '0';
+ --fifo_rd_en_m <= '0';
last_fifo_rd_en_m <= '0';
else
reg_TXD <= fifo_dout_m(15 downto 0);
reg_TX_EN <= last_fifo_rd_en_m;
- last_fifo_rd_en_m <= fifo_rd_en_m;
+ last_fifo_rd_en_m <= fifo_rd_en_m and not fifo_empty_m;
end if;
end if;
end process;
);
comb_read <= '1';
- sbuf_free <= comb_next_read;
+
+ process(CLK)
+ begin
+ if rising_edge(CLK) then
+ if RESET = '1' then
+ sbuf_free <= '0';
+ else
+ sbuf_free <= comb_next_read;
+ end if;
+ end if;
+ end process;
+ --sbuf_free <= comb_next_read;
-- end generate;
-- gen_non_sbuf : if SECURE_MODE = 0 generate
-- MED_DATAREADY_OUT <= comb_dataready;
decrease_TRANSMITTED_BUFFERS <= GOT_ACK_IN;
send_ACK <= SEND_ACK_IN or reg_SEND_ACK_IN or reg_SEND_ACK_IN_2;
next_SEND_ACK_IN_2 <= (reg_SEND_ACK_IN_2 or SEND_ACK_IN) and reg_SEND_ACK_IN;
- send_DATA <= not TRANSMITTED_BUFFERS(1);--'1' when (TRANSMITTED_BUFFERS(1) = '0') else '0';
-
- --only for full obuf
+ send_DATA <= not TRANSMITTED_BUFFERS(1);
send_EOB <= '1' when (CURRENT_DATA_COUNT = max_DATA_COUNT_minus_one and saved_packet_type /= TYPE_TRM) else '0';
-
-
-- buffer registers
STAT_BUFFER(1 downto 0) <= TRANSMITTED_BUFFERS;
STAT_BUFFER(14 downto 2) <= (others => '0');