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
generic(
g_prio_num : integer ;--:= c_swc_output_prio_num;
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_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 !
......@@ -134,6 +135,7 @@ architecture rtl of swc_core is
generic map(
g_prio_num => g_prio_num,
g_max_pck_size => g_max_pck_size,
g_max_oob_size => g_max_oob_size,
g_num_ports => g_num_ports,
g_pck_pg_free_fifo_size => g_pck_pg_free_fifo_size,
g_input_block_cannot_accept_data => g_input_block_cannot_accept_data,
......
......@@ -166,6 +166,7 @@ package swc_swcore_pkg is
g_num_ports : integer ;--:= c_swc_num_ports
g_prio_width : integer ;--:= c_swc_prio_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_input_block_cannot_accept_data : string ;--:= "drop_pck"; --"stall_o", "rty_o" -- Don't CHANGE !
......@@ -208,7 +209,7 @@ package swc_swcore_pkg is
mpm_dreq_i : in std_logic;
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_valid_o : out std_logic;
ll_wr_req_o : out std_logic;
......@@ -465,6 +466,7 @@ component swc_multiport_pck_pg_free_module is
generic(
g_prio_num : integer ;--:= c_swc_output_prio_num;
g_max_pck_size : integer ;--:= c_swc_max_pck_size
g_max_oob_size : integer ;
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_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
);
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;
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;
......@@ -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_max_pck_size : integer ;--:= c_swc_max_pck_size
g_max_oob_size : integer ;
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_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
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_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_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
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_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<<
----------------------------------------------------------------------------------------------------
......@@ -274,6 +278,7 @@ architecture rtl of xswc_core is
g_num_ports => g_num_ports,
g_prio_width => c_prio_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_input_block_cannot_accept_data => g_input_block_cannot_accept_data,
--new
......@@ -536,7 +541,9 @@ architecture rtl of xswc_core is
g_fifo_size => g_mpm_fifo_size,
g_page_addr_width => c_mpm_page_addr_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(
clk_io_i => clk_i,
......
This diff is collapsed.
......@@ -253,6 +253,7 @@ U_xswc_core: xswc_core
generic map(
g_prio_num => 8,
g_max_pck_size => 10 * 1024,
g_max_oob_size => 3,
g_num_ports => 7,
g_pck_pg_free_fifo_size => ((65536/64)/2) ,
g_input_block_cannot_accept_data => "drop_pck",
......
......@@ -59,6 +59,7 @@ module swc_core_wrapper_generic
#(
.g_prio_num (`c_prio_num),
.g_max_pck_size (`c_max_pck_size),
.g_max_oob_size (`c_max_oob_size),
.g_num_ports (`c_num_ports),
.g_pck_pg_free_fifo_size (`c_pck_pg_free_fifo_size),
.g_input_block_cannot_accept_data (`c_input_block_cannot_accept_data),
......
......@@ -26,6 +26,7 @@
`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_oob_size 3 // max size of OOB or USER data
`define c_mpm_mem_size 65536 //c_swc_packet_mem_size,
`define c_mpm_page_size 64 //c_swc_page_size,
......
......@@ -504,7 +504,8 @@ begin
generic map
(
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_pck_pg_free_fifo_size => ((65536/64)/2),
g_input_block_cannot_accept_data => "drop_pck",
......
......@@ -209,6 +209,7 @@ package wrsw_components_pkg is
generic(
g_prio_num : integer ;
g_max_pck_size : integer ;
g_max_oob_size : integer ;
g_num_ports : integer ;
g_pck_pg_free_fifo_size : integer ;
g_input_block_cannot_accept_data : string ;
......
......@@ -252,6 +252,7 @@ package wrsw_top_pkg is
generic(
g_prio_num : integer ;
g_max_pck_size : integer ;
g_max_oob_size : integer ;
g_num_ports : integer ;
g_pck_pg_free_fifo_size : integer ;
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