Commit 55d9f347 authored by Maciej Lipinski's avatar Maciej Lipinski

swcore: all known bugs fixed

parent 52c35760
......@@ -575,7 +575,9 @@ begin --arch
fifo_clean <= '0';
tx_dreq <= '0';
if(rtu_rsp_valid_i = '1' and rtu_drop_i = '1') then
if(rtu_rsp_valid_i = '1' and -- we've got RTU decision
(rtu_drop_i = '1' or -- RTU says DROP
rtu_dst_port_mask_i = zeros(c_swc_num_ports - 1 downto 0))) then -- mask = 0 means DROP !!!
-- if we've got RTU decision to drop, we don't give a damn about
-- anything else, just pretend to be receiving the msg
......@@ -646,14 +648,25 @@ begin --arch
tx_dreq <= '0';
elsif(rtu_rsp_valid_i = '1') then
tx_dreq <= '1';
rtu_rsp_ack <= '1';
read_state <= S_WRITE_FIFO;
--remember
read_mask <= rtu_dst_port_mask_i;
read_prio <= rtu_prio_i;
read_usecnt <= std_logic_vector(to_signed(cnt(rtu_dst_port_mask_i),read_usecnt'length));
rtu_rsp_ack <= '1';
if(rtu_drop_i = '1' or -- RTU says DROP
rtu_dst_port_mask_i = zeros(c_swc_num_ports - 1 downto 0) -- mask = 0 means DROP !!!
) then
read_state <= S_DROP_PCK;
else
read_state <= S_WRITE_FIFO;
--remember
read_mask <= rtu_dst_port_mask_i;
read_prio <= rtu_prio_i;
read_usecnt <= std_logic_vector(to_signed(cnt(rtu_dst_port_mask_i),read_usecnt'length));
end if;
end if;
......@@ -892,7 +905,8 @@ begin --arch
start_transfer <= '0';
flush_reg <= '0';
mpm_pageaddr <= (others => '1');
mpm_pagereq <= '0';
-- if another page needs to be allocated for the last chunck
-- of date, transfer only if we have spare page for that.
-- otherwise, we can end up reading pck without last piece of data !!!!
......
......@@ -182,7 +182,7 @@ begin -- syn
gen_request_vec : for i in 0 to c_swc_num_ports - 1 generate
request_vec(4 * i + 0) <= alloc_i(i) and (not (alloc_done_feedback(i) or alloc_done(i))) and (not pg_nomem);
request_vec(4 * i + 1) <= free_i(i) and (not (free_done_feedback(i) or free_done(i)));
request_vec(4 * i + 2) <= set_usecnt_i(i) and (not (set_usecnt_done_feedback(i) or set_usecnt_done(i)));
request_vec(4 * i + 2) <= set_usecnt_i(i) and (not (set_usecnt_done_feedback(i)));-- or set_usecnt_done(i)));
request_vec(4 * i + 3) <= force_free_i(i) and (not (force_free_done_feedback(i) or force_free_done(i)));
end generate gen_request_vec;
......@@ -293,7 +293,7 @@ begin -- syn
alloc_done_o <= alloc_done;
free_done_o <= free_done;
set_usecnt_done_o <= set_usecnt_done;
set_usecnt_done_o <= set_usecnt_done_feedback;--set_usecnt_done;
force_free_done_o <= force_free_done;
nomem_o <= pg_nomem;
......
......@@ -235,9 +235,13 @@ architecture syn of swc_page_allocator is
signal tmp_pgs : std_logic_vector(1023 downto 0);
signal tmp_dbg_dealloc : std_logic;
signal tmp_dbg_alloc : std_logic;
begin -- syn
tmp_dbg_dealloc <= '1' when (state = FREE_RELEASE_PAGE) else '0';
-- this guy is responsible for decoding
-- the bits of l1_bitmap register into the
-- high part of the page address
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment