Commit 846342c9 authored by Maciej Lipinski's avatar Maciej Lipinski

swcore[new mpm]: re-doing sel handling (design flaw identified) in the swcore

parent e8328f7f
...@@ -56,6 +56,7 @@ entity swc_core is ...@@ -56,6 +56,7 @@ entity swc_core is
generic( generic(
g_prio_num : integer ;--:= c_swc_output_prio_num; g_prio_num : integer ;--:= c_swc_output_prio_num;
g_max_pck_size : integer ;--:= 2^c_swc_max_pck_size g_max_pck_size : integer ;--:= 2^c_swc_max_pck_size
g_max_oob_size : integer ;
g_num_ports : integer ;--:= c_swc_num_ports g_num_ports : integer ;--:= c_swc_num_ports
g_pck_pg_free_fifo_size : integer ; --:= c_swc_freeing_fifo_size (in pck_pg_free_module.vhd) g_pck_pg_free_fifo_size : integer ; --:= c_swc_freeing_fifo_size (in pck_pg_free_module.vhd)
g_input_block_cannot_accept_data : string ;--:= "drop_pck"; --"stall_o", "rty_o" -- (xswc_input_block) Don't CHANGE ! g_input_block_cannot_accept_data : string ;--:= "drop_pck"; --"stall_o", "rty_o" -- (xswc_input_block) Don't CHANGE !
...@@ -134,6 +135,7 @@ architecture rtl of swc_core is ...@@ -134,6 +135,7 @@ architecture rtl of swc_core is
generic map( generic map(
g_prio_num => g_prio_num, g_prio_num => g_prio_num,
g_max_pck_size => g_max_pck_size, g_max_pck_size => g_max_pck_size,
g_max_oob_size => g_max_oob_size,
g_num_ports => g_num_ports, g_num_ports => g_num_ports,
g_pck_pg_free_fifo_size => g_pck_pg_free_fifo_size, g_pck_pg_free_fifo_size => g_pck_pg_free_fifo_size,
g_input_block_cannot_accept_data => g_input_block_cannot_accept_data, g_input_block_cannot_accept_data => g_input_block_cannot_accept_data,
......
...@@ -166,6 +166,7 @@ package swc_swcore_pkg is ...@@ -166,6 +166,7 @@ package swc_swcore_pkg is
g_num_ports : integer ;--:= c_swc_num_ports g_num_ports : integer ;--:= c_swc_num_ports
g_prio_width : integer ;--:= c_swc_prio_width; g_prio_width : integer ;--:= c_swc_prio_width;
g_max_pck_size_width : integer ;--:= c_swc_max_pck_size_width g_max_pck_size_width : integer ;--:= c_swc_max_pck_size_width
g_max_oob_size : integer ;
g_usecount_width : integer ;--:= c_swc_usecount_width g_usecount_width : integer ;--:= c_swc_usecount_width
g_input_block_cannot_accept_data : string ;--:= "drop_pck"; --"stall_o", "rty_o" -- Don't CHANGE ! g_input_block_cannot_accept_data : string ;--:= "drop_pck"; --"stall_o", "rty_o" -- Don't CHANGE !
...@@ -208,7 +209,7 @@ package swc_swcore_pkg is ...@@ -208,7 +209,7 @@ package swc_swcore_pkg is
mpm_dreq_i : in std_logic; mpm_dreq_i : in std_logic;
ll_addr_o : out std_logic_vector(g_page_addr_width -1 downto 0); ll_addr_o : out std_logic_vector(g_page_addr_width -1 downto 0);
ll_data_o : out std_logic_vector(g_page_addr_width + 1 downto 0); ll_data_o : out std_logic_vector(g_ll_data_width-1 downto 0);
ll_next_addr_o : out std_logic_vector(g_page_addr_width -1 downto 0); ll_next_addr_o : out std_logic_vector(g_page_addr_width -1 downto 0);
ll_next_addr_valid_o : out std_logic; ll_next_addr_valid_o : out std_logic;
ll_wr_req_o : out std_logic; ll_wr_req_o : out std_logic;
...@@ -465,6 +466,7 @@ component swc_multiport_pck_pg_free_module is ...@@ -465,6 +466,7 @@ component swc_multiport_pck_pg_free_module is
generic( generic(
g_prio_num : integer ;--:= c_swc_output_prio_num; g_prio_num : integer ;--:= c_swc_output_prio_num;
g_max_pck_size : integer ;--:= c_swc_max_pck_size g_max_pck_size : integer ;--:= c_swc_max_pck_size
g_max_oob_size : integer ;
g_num_ports : integer ;--:= c_swc_num_ports g_num_ports : integer ;--:= c_swc_num_ports
g_pck_pg_free_fifo_size : integer ; --:= c_swc_freeing_fifo_size (in pck_pg_free_module.vhd) g_pck_pg_free_fifo_size : integer ; --:= c_swc_freeing_fifo_size (in pck_pg_free_module.vhd)
g_input_block_cannot_accept_data : string ;--:= "drop_pck"; --"stall_o", "rty_o" -- (xswc_input_block) Don't CHANGE ! g_input_block_cannot_accept_data : string ;--:= "drop_pck"; --"stall_o", "rty_o" -- (xswc_input_block) Don't CHANGE !
...@@ -524,8 +526,40 @@ component swc_multiport_pck_pg_free_module is ...@@ -524,8 +526,40 @@ component swc_multiport_pck_pg_free_module is
); );
end component; end component;
function f_sel2partialSel(sel : std_logic_vector; partialSelWidth: integer) return std_logic_vector;
function f_partialSel2sel(partialSel: std_logic_vector; selWidth : integer) return std_logic_vector;
end swc_swcore_pkg; end swc_swcore_pkg;
package body swc_swcore_pkg is package body swc_swcore_pkg is
function f_sel2partialSel(sel : std_logic_vector; partialSelWidth: integer) return std_logic_vector is
variable tmp : std_logic_vector(partialSelWidth -1 downto 0);
variable ones: std_logic_vector(sel'length -1 downto 0);
begin
-- this function needs proper implementation
ones := (others =>'1');
if(sel = ones) then
tmp := (others =>'1');
else
tmp := (others =>'0');
end if;
return tmp;
end function;
function f_partialSel2sel(partialSel: std_logic_vector; selWidth : integer) return std_logic_vector is
variable tmp : std_logic_vector(selWidth -1 downto 0);
variable ones : std_logic_vector(partialSel'length -1 downto 0);
begin
-- this function needs proper implementation
ones := (others =>'1');
if(partialSel = ones) then
tmp := (others =>'1');
else
tmp(selWidth-1) := '1';
tmp(selWidth-2 downto 0) := (others =>'0');
end if;
return tmp;
end function;
end swc_swcore_pkg; end swc_swcore_pkg;
...@@ -58,6 +58,7 @@ entity xswc_core is ...@@ -58,6 +58,7 @@ entity xswc_core is
g_prio_num : integer ;--:= c_swc_output_prio_num; [works only for value of 8, output_block-causes problem] g_prio_num : integer ;--:= c_swc_output_prio_num; [works only for value of 8, output_block-causes problem]
g_max_pck_size : integer ;--:= c_swc_max_pck_size g_max_pck_size : integer ;--:= c_swc_max_pck_size
g_max_oob_size : integer ;
g_num_ports : integer ;--:= c_swc_num_ports g_num_ports : integer ;--:= c_swc_num_ports
g_pck_pg_free_fifo_size : integer ; --:= c_swc_freeing_fifo_size (in pck_pg_free_module.vhd) g_pck_pg_free_fifo_size : integer ; --:= c_swc_freeing_fifo_size (in pck_pg_free_module.vhd)
g_input_block_cannot_accept_data : string ;--:= "drop_pck"; --"stall_o", "rty_o" -- (xswc_input_block) Don't CHANGE ! g_input_block_cannot_accept_data : string ;--:= "drop_pck"; --"stall_o", "rty_o" -- (xswc_input_block) Don't CHANGE !
...@@ -107,6 +108,7 @@ architecture rtl of xswc_core is ...@@ -107,6 +108,7 @@ architecture rtl of xswc_core is
constant c_usecount_width : integer := integer(CEIL(LOG2(real(g_num_ports+1)))); constant c_usecount_width : integer := integer(CEIL(LOG2(real(g_num_ports+1))));
constant c_prio_width : integer := integer(CEIL(LOG2(real(g_prio_num-1)))); -- g_prio_width constant c_prio_width : integer := integer(CEIL(LOG2(real(g_prio_num-1)))); -- g_prio_width
constant c_max_pck_size_width : integer := integer(CEIL(LOG2(real(g_max_pck_size-1)))); -- c_swc_max_pck_size_width constant c_max_pck_size_width : integer := integer(CEIL(LOG2(real(g_max_pck_size-1)))); -- c_swc_max_pck_size_width
constant c_max_oob_size_width : integer := integer(CEIL(LOG2(real(g_max_oob_size + 1))));
constant c_mpm_page_num : integer := integer(CEIL(real(g_mpm_mem_size / g_mpm_page_size))); -- 65536/64 = 1024 -- c_swc_packet_mem_num_pages constant c_mpm_page_num : integer := integer(CEIL(real(g_mpm_mem_size / g_mpm_page_size))); -- 65536/64 = 1024 -- c_swc_packet_mem_num_pages
constant c_mpm_page_addr_width : integer := integer(CEIL(LOG2(real(c_mpm_page_num-1)))); --c_swc_page_addr_width constant c_mpm_page_addr_width : integer := integer(CEIL(LOG2(real(c_mpm_page_num-1)))); --c_swc_page_addr_width
...@@ -114,8 +116,10 @@ architecture rtl of xswc_core is ...@@ -114,8 +116,10 @@ architecture rtl of xswc_core is
constant c_mpm_partial_sel_width : integer := integer(g_wb_sel_width-1); constant c_mpm_partial_sel_width : integer := integer(g_wb_sel_width-1);
constant c_mpm_page_size_width : integer := integer(CEIL(LOG2(real(g_mpm_page_size-1)))); constant c_mpm_page_size_width : integer := integer(CEIL(LOG2(real(g_mpm_page_size-1))));
constant c_ll_addr_width : integer := c_mpm_page_addr_width; constant c_ll_addr_width : integer := c_mpm_page_addr_width;
constant c_ll_data_width : integer := c_mpm_page_addr_width + 2; constant c_ll_data_width : integer := c_mpm_page_addr_width + c_max_oob_size_width + 3;
---------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------
-- signals connecting >>Input Block<< with >>Memory Management Unit<< -- signals connecting >>Input Block<< with >>Memory Management Unit<<
---------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------
...@@ -274,6 +278,7 @@ architecture rtl of xswc_core is ...@@ -274,6 +278,7 @@ architecture rtl of xswc_core is
g_num_ports => g_num_ports, g_num_ports => g_num_ports,
g_prio_width => c_prio_width, g_prio_width => c_prio_width,
g_max_pck_size_width => c_max_pck_size_width, g_max_pck_size_width => c_max_pck_size_width,
g_max_oob_size => g_max_oob_size,
g_usecount_width => c_usecount_width, g_usecount_width => c_usecount_width,
g_input_block_cannot_accept_data => g_input_block_cannot_accept_data, g_input_block_cannot_accept_data => g_input_block_cannot_accept_data,
--new --new
...@@ -536,7 +541,9 @@ architecture rtl of xswc_core is ...@@ -536,7 +541,9 @@ architecture rtl of xswc_core is
g_fifo_size => g_mpm_fifo_size, g_fifo_size => g_mpm_fifo_size,
g_page_addr_width => c_mpm_page_addr_width, g_page_addr_width => c_mpm_page_addr_width,
g_partial_select_width => c_mpm_partial_sel_width, g_partial_select_width => c_mpm_partial_sel_width,
g_max_packet_size => g_max_pck_size g_max_oob_size => g_max_oob_size,
g_max_packet_size => g_max_pck_size,
g_ll_data_width => c_ll_data_width
) )
port map( port map(
clk_io_i => clk_i, clk_io_i => clk_i,
......
This diff is collapsed.
...@@ -253,6 +253,7 @@ U_xswc_core: xswc_core ...@@ -253,6 +253,7 @@ U_xswc_core: xswc_core
generic map( generic map(
g_prio_num => 8, g_prio_num => 8,
g_max_pck_size => 10 * 1024, g_max_pck_size => 10 * 1024,
g_max_oob_size => 3,
g_num_ports => 7, g_num_ports => 7,
g_pck_pg_free_fifo_size => ((65536/64)/2) , g_pck_pg_free_fifo_size => ((65536/64)/2) ,
g_input_block_cannot_accept_data => "drop_pck", g_input_block_cannot_accept_data => "drop_pck",
......
...@@ -59,6 +59,7 @@ module swc_core_wrapper_generic ...@@ -59,6 +59,7 @@ module swc_core_wrapper_generic
#( #(
.g_prio_num (`c_prio_num), .g_prio_num (`c_prio_num),
.g_max_pck_size (`c_max_pck_size), .g_max_pck_size (`c_max_pck_size),
.g_max_oob_size (`c_max_oob_size),
.g_num_ports (`c_num_ports), .g_num_ports (`c_num_ports),
.g_pck_pg_free_fifo_size (`c_pck_pg_free_fifo_size), .g_pck_pg_free_fifo_size (`c_pck_pg_free_fifo_size),
.g_input_block_cannot_accept_data (`c_input_block_cannot_accept_data), .g_input_block_cannot_accept_data (`c_input_block_cannot_accept_data),
......
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
`define c_prio_num 8 // c_swc_output_prio_num, [does not work, output block] `define c_prio_num 8 // c_swc_output_prio_num, [does not work, output block]
`define c_max_pck_size 10 * 1024 // 10kB -- c_swc_max_pck_size, `define c_max_pck_size 10 * 1024 // 10kB -- c_swc_max_pck_size,
`define c_max_oob_size 3 // max size of OOB or USER data
`define c_mpm_mem_size 65536 //c_swc_packet_mem_size, `define c_mpm_mem_size 65536 //c_swc_packet_mem_size,
`define c_mpm_page_size 64 //c_swc_page_size, `define c_mpm_page_size 64 //c_swc_page_size,
......
...@@ -504,7 +504,8 @@ begin ...@@ -504,7 +504,8 @@ begin
generic map generic map
( (
g_prio_num => 8, g_prio_num => 8,
g_max_pck_size => 10 * 1024, g_max_pck_size => 10 * 1024,
g_max_oob_size => 3,
g_num_ports => 7, g_num_ports => 7,
g_pck_pg_free_fifo_size => ((65536/64)/2), g_pck_pg_free_fifo_size => ((65536/64)/2),
g_input_block_cannot_accept_data => "drop_pck", g_input_block_cannot_accept_data => "drop_pck",
......
...@@ -209,6 +209,7 @@ package wrsw_components_pkg is ...@@ -209,6 +209,7 @@ package wrsw_components_pkg is
generic( generic(
g_prio_num : integer ; g_prio_num : integer ;
g_max_pck_size : integer ; g_max_pck_size : integer ;
g_max_oob_size : integer ;
g_num_ports : integer ; g_num_ports : integer ;
g_pck_pg_free_fifo_size : integer ; g_pck_pg_free_fifo_size : integer ;
g_input_block_cannot_accept_data : string ; g_input_block_cannot_accept_data : string ;
......
...@@ -252,6 +252,7 @@ package wrsw_top_pkg is ...@@ -252,6 +252,7 @@ package wrsw_top_pkg is
generic( generic(
g_prio_num : integer ; g_prio_num : integer ;
g_max_pck_size : integer ; g_max_pck_size : integer ;
g_max_oob_size : integer ;
g_num_ports : integer ; g_num_ports : integer ;
g_pck_pg_free_fifo_size : integer ; g_pck_pg_free_fifo_size : integer ;
g_input_block_cannot_accept_data : string ; g_input_block_cannot_accept_data : string ;
......
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