Skip to content
Snippets Groups Projects

Clarify g_nof_destinations_max design revision parameter and package constants...

Merged Eric Kooistra requested to merge L2SDP-964 into master
1 file
+ 127
20
Compare changes
  • Side-by-side
  • Inline
@@ -50,6 +50,9 @@ library IEEE, common_lib, mm_lib;
use work.sdp_bdo_pkg.all;
entity sdp_bdo_destinations_reg is
generic (
g_nof_destinations_max : natural
);
port (
-- Clocks and reset
mm_clk : in std_logic;
@@ -67,11 +70,27 @@ end sdp_bdo_destinations_reg;
architecture str of sdp_bdo_destinations_reg is
constant c_field_arr : t_common_field_arr(c_sdp_bdo_destinations_info_nof_hdr_fields - 1 downto 0) :=
( (field_name_pad("nof_blocks_per_packet_act"), "RO", 8, field_default(c_sdp_cep_nof_blocks_per_packet)),
(field_name_pad("nof_destinations_max"), "RO", 8, field_default(1)),
( (field_name_pad("nof_blocks_per_packet"), "RO", 8, field_default(c_sdp_cep_nof_blocks_per_packet)),
(field_name_pad("nof_destinations_max"), "RO", 8, field_default(g_nof_destinations_max)),
(field_name_pad("nof_destinations_act"), "RO", 8, field_default(1)),
(field_name_pad("nof_destinations"), "RW", 8, field_default(1)),
(field_name_pad("udp_destination_port_31"), "RW", 16, field_default(0)),
(field_name_pad("udp_destination_port_30"), "RW", 16, field_default(0)),
(field_name_pad("udp_destination_port_29"), "RW", 16, field_default(0)),
(field_name_pad("udp_destination_port_28"), "RW", 16, field_default(0)),
(field_name_pad("udp_destination_port_27"), "RW", 16, field_default(0)),
(field_name_pad("udp_destination_port_26"), "RW", 16, field_default(0)),
(field_name_pad("udp_destination_port_25"), "RW", 16, field_default(0)),
(field_name_pad("udp_destination_port_24"), "RW", 16, field_default(0)),
(field_name_pad("udp_destination_port_23"), "RW", 16, field_default(0)),
(field_name_pad("udp_destination_port_22"), "RW", 16, field_default(0)),
(field_name_pad("udp_destination_port_21"), "RW", 16, field_default(0)),
(field_name_pad("udp_destination_port_20"), "RW", 16, field_default(0)),
(field_name_pad("udp_destination_port_19"), "RW", 16, field_default(0)),
(field_name_pad("udp_destination_port_18"), "RW", 16, field_default(0)),
(field_name_pad("udp_destination_port_17"), "RW", 16, field_default(0)),
(field_name_pad("udp_destination_port_16"), "RW", 16, field_default(0)),
(field_name_pad("udp_destination_port_15"), "RW", 16, field_default(0)),
(field_name_pad("udp_destination_port_14"), "RW", 16, field_default(0)),
(field_name_pad("udp_destination_port_13"), "RW", 16, field_default(0)),
@@ -89,6 +108,22 @@ architecture str of sdp_bdo_destinations_reg is
(field_name_pad("udp_destination_port_1"), "RW", 16, field_default(0)),
(field_name_pad("udp_destination_port_0"), "RW", 16, field_default(0)),
(field_name_pad("ip_destination_address_31"), "RW", 32, field_default(0)),
(field_name_pad("ip_destination_address_30"), "RW", 32, field_default(0)),
(field_name_pad("ip_destination_address_29"), "RW", 32, field_default(0)),
(field_name_pad("ip_destination_address_28"), "RW", 32, field_default(0)),
(field_name_pad("ip_destination_address_27"), "RW", 32, field_default(0)),
(field_name_pad("ip_destination_address_26"), "RW", 32, field_default(0)),
(field_name_pad("ip_destination_address_25"), "RW", 32, field_default(0)),
(field_name_pad("ip_destination_address_24"), "RW", 32, field_default(0)),
(field_name_pad("ip_destination_address_23"), "RW", 32, field_default(0)),
(field_name_pad("ip_destination_address_22"), "RW", 32, field_default(0)),
(field_name_pad("ip_destination_address_21"), "RW", 32, field_default(0)),
(field_name_pad("ip_destination_address_20"), "RW", 32, field_default(0)),
(field_name_pad("ip_destination_address_19"), "RW", 32, field_default(0)),
(field_name_pad("ip_destination_address_18"), "RW", 32, field_default(0)),
(field_name_pad("ip_destination_address_17"), "RW", 32, field_default(0)),
(field_name_pad("ip_destination_address_16"), "RW", 32, field_default(0)),
(field_name_pad("ip_destination_address_15"), "RW", 32, field_default(0)),
(field_name_pad("ip_destination_address_14"), "RW", 32, field_default(0)),
(field_name_pad("ip_destination_address_13"), "RW", 32, field_default(0)),
@@ -106,6 +141,22 @@ architecture str of sdp_bdo_destinations_reg is
(field_name_pad("ip_destination_address_1"), "RW", 32, field_default(0)),
(field_name_pad("ip_destination_address_0"), "RW", 32, field_default(0)),
(field_name_pad("eth_destination_mac_31"), "RW", 48, field_default(0)),
(field_name_pad("eth_destination_mac_30"), "RW", 48, field_default(0)),
(field_name_pad("eth_destination_mac_29"), "RW", 48, field_default(0)),
(field_name_pad("eth_destination_mac_28"), "RW", 48, field_default(0)),
(field_name_pad("eth_destination_mac_27"), "RW", 48, field_default(0)),
(field_name_pad("eth_destination_mac_26"), "RW", 48, field_default(0)),
(field_name_pad("eth_destination_mac_25"), "RW", 48, field_default(0)),
(field_name_pad("eth_destination_mac_24"), "RW", 48, field_default(0)),
(field_name_pad("eth_destination_mac_23"), "RW", 48, field_default(0)),
(field_name_pad("eth_destination_mac_22"), "RW", 48, field_default(0)),
(field_name_pad("eth_destination_mac_21"), "RW", 48, field_default(0)),
(field_name_pad("eth_destination_mac_20"), "RW", 48, field_default(0)),
(field_name_pad("eth_destination_mac_19"), "RW", 48, field_default(0)),
(field_name_pad("eth_destination_mac_18"), "RW", 48, field_default(0)),
(field_name_pad("eth_destination_mac_17"), "RW", 48, field_default(0)),
(field_name_pad("eth_destination_mac_16"), "RW", 48, field_default(0)),
(field_name_pad("eth_destination_mac_15"), "RW", 48, field_default(0)),
(field_name_pad("eth_destination_mac_14"), "RW", 48, field_default(0)),
(field_name_pad("eth_destination_mac_13"), "RW", 48, field_default(0)),
@@ -126,25 +177,33 @@ architecture str of sdp_bdo_destinations_reg is
signal mm_fields_in : std_logic_vector(field_slv_in_len(c_field_arr) - 1 downto 0);
signal mm_fields_out : std_logic_vector(field_slv_out_len(c_field_arr) - 1 downto 0);
signal destinations_info_rd : t_sdp_bdo_destinations_info;
signal destinations_info_wr : t_sdp_bdo_destinations_info;
signal destinations_info_rd : t_sdp_bdo_destinations_info := c_sdp_bdo_destinations_info_rst;
signal destinations_info_wr : t_sdp_bdo_destinations_info := c_sdp_bdo_destinations_info_rst;
signal nof_destinations_act : natural := 1;
signal nof_blocks_per_packet_act : natural := c_sdp_cep_nof_blocks_per_packet;
signal nof_destinations_act : natural := 1;
signal nof_blocks_per_packet : natural := c_sdp_cep_nof_blocks_per_packet;
begin
destinations_info <= destinations_info_rd;
p_destinations_info_rd : process(destinations_info_wr,
nof_destinations_act,
nof_blocks_per_packet_act)
nof_blocks_per_packet)
begin
-- default write assign all fields
destinations_info_rd <= destinations_info_wr;
-- read/write fields
for DI in 0 to g_nof_destinations_max - 1 loop
-- Default only read/write connect the available fields. Leave unused
-- write fields open and read fields at rst value, so they will be
-- optimized away by synthesis.
destinations_info_rd.eth_destination_mac_arr(DI) <= destinations_info_wr.eth_destination_mac_arr(DI);
destinations_info_rd.ip_destination_address_arr(DI) <= destinations_info_wr.ip_destination_address_arr(DI);
destinations_info_rd.udp_destination_port_arr(DI) <= destinations_info_wr.udp_destination_port_arr(DI);
end loop;
destinations_info_rd.nof_destinations <= destinations_info_wr.nof_destinations;
-- overrule the read only fields
destinations_info_rd.nof_destinations_act <= nof_destinations_act;
destinations_info_rd.nof_destinations_max <= c_sdp_bdo_nof_destinations_max;
destinations_info_rd.nof_blocks_per_packet_act <= nof_blocks_per_packet_act;
-- read only fields
destinations_info_rd.nof_destinations_act <= nof_destinations_act;
destinations_info_rd.nof_destinations_max <= g_nof_destinations_max;
destinations_info_rd.nof_blocks_per_packet <= nof_blocks_per_packet;
end process;
u_mm_fields: entity mm_lib.mm_fields
@@ -169,9 +228,9 @@ begin
);
-- add "RO" fields to mm_fields
mm_fields_in(field_hi(c_field_arr, "nof_destinations_act") downto field_lo(c_field_arr, "nof_destinations_act")) <= to_uvec(destinations_info_rd.nof_destinations_act, 8);
mm_fields_in(field_hi(c_field_arr, "nof_destinations_max") downto field_lo(c_field_arr, "nof_destinations_max")) <= to_uvec(destinations_info_rd.nof_destinations_max, 8);
mm_fields_in(field_hi(c_field_arr, "nof_blocks_per_packet_act") downto field_lo(c_field_arr, "nof_blocks_per_packet_act")) <= to_uvec(destinations_info_rd.nof_blocks_per_packet_act, 8);
mm_fields_in(field_hi(c_field_arr, "nof_destinations_act") downto field_lo(c_field_arr, "nof_destinations_act")) <= to_uvec(destinations_info_rd.nof_destinations_act, 8);
mm_fields_in(field_hi(c_field_arr, "nof_destinations_max") downto field_lo(c_field_arr, "nof_destinations_max")) <= to_uvec(destinations_info_rd.nof_destinations_max, 8);
mm_fields_in(field_hi(c_field_arr, "nof_blocks_per_packet") downto field_lo(c_field_arr, "nof_blocks_per_packet")) <= to_uvec(destinations_info_rd.nof_blocks_per_packet, 8);
-- get "RW" fields from mm_fields
destinations_info_wr.eth_destination_mac_arr(0) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_0") downto field_lo(c_field_arr, "eth_destination_mac_0"));
@@ -190,6 +249,22 @@ begin
destinations_info_wr.eth_destination_mac_arr(13) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_13") downto field_lo(c_field_arr, "eth_destination_mac_13"));
destinations_info_wr.eth_destination_mac_arr(14) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_14") downto field_lo(c_field_arr, "eth_destination_mac_14"));
destinations_info_wr.eth_destination_mac_arr(15) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_15") downto field_lo(c_field_arr, "eth_destination_mac_15"));
destinations_info_wr.eth_destination_mac_arr(16) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_16") downto field_lo(c_field_arr, "eth_destination_mac_16"));
destinations_info_wr.eth_destination_mac_arr(17) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_17") downto field_lo(c_field_arr, "eth_destination_mac_17"));
destinations_info_wr.eth_destination_mac_arr(18) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_18") downto field_lo(c_field_arr, "eth_destination_mac_18"));
destinations_info_wr.eth_destination_mac_arr(19) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_19") downto field_lo(c_field_arr, "eth_destination_mac_19"));
destinations_info_wr.eth_destination_mac_arr(20) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_20") downto field_lo(c_field_arr, "eth_destination_mac_20"));
destinations_info_wr.eth_destination_mac_arr(21) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_21") downto field_lo(c_field_arr, "eth_destination_mac_21"));
destinations_info_wr.eth_destination_mac_arr(22) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_22") downto field_lo(c_field_arr, "eth_destination_mac_22"));
destinations_info_wr.eth_destination_mac_arr(23) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_23") downto field_lo(c_field_arr, "eth_destination_mac_23"));
destinations_info_wr.eth_destination_mac_arr(24) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_24") downto field_lo(c_field_arr, "eth_destination_mac_24"));
destinations_info_wr.eth_destination_mac_arr(25) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_25") downto field_lo(c_field_arr, "eth_destination_mac_25"));
destinations_info_wr.eth_destination_mac_arr(26) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_26") downto field_lo(c_field_arr, "eth_destination_mac_26"));
destinations_info_wr.eth_destination_mac_arr(27) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_27") downto field_lo(c_field_arr, "eth_destination_mac_27"));
destinations_info_wr.eth_destination_mac_arr(28) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_28") downto field_lo(c_field_arr, "eth_destination_mac_28"));
destinations_info_wr.eth_destination_mac_arr(29) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_29") downto field_lo(c_field_arr, "eth_destination_mac_29"));
destinations_info_wr.eth_destination_mac_arr(30) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_30") downto field_lo(c_field_arr, "eth_destination_mac_30"));
destinations_info_wr.eth_destination_mac_arr(31) <= mm_fields_out(field_hi(c_field_arr, "eth_destination_mac_31") downto field_lo(c_field_arr, "eth_destination_mac_31"));
destinations_info_wr.ip_destination_address_arr(0) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_0") downto field_lo(c_field_arr, "ip_destination_address_0"));
destinations_info_wr.ip_destination_address_arr(1) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_1") downto field_lo(c_field_arr, "ip_destination_address_1"));
@@ -207,6 +282,22 @@ begin
destinations_info_wr.ip_destination_address_arr(13) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_13") downto field_lo(c_field_arr, "ip_destination_address_13"));
destinations_info_wr.ip_destination_address_arr(14) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_14") downto field_lo(c_field_arr, "ip_destination_address_14"));
destinations_info_wr.ip_destination_address_arr(15) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_15") downto field_lo(c_field_arr, "ip_destination_address_15"));
destinations_info_wr.ip_destination_address_arr(16) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_16") downto field_lo(c_field_arr, "ip_destination_address_16"));
destinations_info_wr.ip_destination_address_arr(17) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_17") downto field_lo(c_field_arr, "ip_destination_address_17"));
destinations_info_wr.ip_destination_address_arr(18) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_18") downto field_lo(c_field_arr, "ip_destination_address_18"));
destinations_info_wr.ip_destination_address_arr(19) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_19") downto field_lo(c_field_arr, "ip_destination_address_19"));
destinations_info_wr.ip_destination_address_arr(20) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_20") downto field_lo(c_field_arr, "ip_destination_address_20"));
destinations_info_wr.ip_destination_address_arr(21) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_21") downto field_lo(c_field_arr, "ip_destination_address_21"));
destinations_info_wr.ip_destination_address_arr(22) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_22") downto field_lo(c_field_arr, "ip_destination_address_22"));
destinations_info_wr.ip_destination_address_arr(23) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_23") downto field_lo(c_field_arr, "ip_destination_address_23"));
destinations_info_wr.ip_destination_address_arr(24) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_24") downto field_lo(c_field_arr, "ip_destination_address_24"));
destinations_info_wr.ip_destination_address_arr(25) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_25") downto field_lo(c_field_arr, "ip_destination_address_25"));
destinations_info_wr.ip_destination_address_arr(26) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_26") downto field_lo(c_field_arr, "ip_destination_address_26"));
destinations_info_wr.ip_destination_address_arr(27) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_27") downto field_lo(c_field_arr, "ip_destination_address_27"));
destinations_info_wr.ip_destination_address_arr(28) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_28") downto field_lo(c_field_arr, "ip_destination_address_28"));
destinations_info_wr.ip_destination_address_arr(29) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_29") downto field_lo(c_field_arr, "ip_destination_address_29"));
destinations_info_wr.ip_destination_address_arr(30) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_30") downto field_lo(c_field_arr, "ip_destination_address_30"));
destinations_info_wr.ip_destination_address_arr(31) <= mm_fields_out(field_hi(c_field_arr, "ip_destination_address_31") downto field_lo(c_field_arr, "ip_destination_address_31"));
destinations_info_wr.udp_destination_port_arr(0) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_0") downto field_lo(c_field_arr, "udp_destination_port_0"));
destinations_info_wr.udp_destination_port_arr(1) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_1") downto field_lo(c_field_arr, "udp_destination_port_1"));
@@ -224,17 +315,33 @@ begin
destinations_info_wr.udp_destination_port_arr(13) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_13") downto field_lo(c_field_arr, "udp_destination_port_13"));
destinations_info_wr.udp_destination_port_arr(14) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_14") downto field_lo(c_field_arr, "udp_destination_port_14"));
destinations_info_wr.udp_destination_port_arr(15) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_15") downto field_lo(c_field_arr, "udp_destination_port_15"));
destinations_info_wr.udp_destination_port_arr(16) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_16") downto field_lo(c_field_arr, "udp_destination_port_16"));
destinations_info_wr.udp_destination_port_arr(17) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_17") downto field_lo(c_field_arr, "udp_destination_port_17"));
destinations_info_wr.udp_destination_port_arr(18) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_18") downto field_lo(c_field_arr, "udp_destination_port_18"));
destinations_info_wr.udp_destination_port_arr(19) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_19") downto field_lo(c_field_arr, "udp_destination_port_19"));
destinations_info_wr.udp_destination_port_arr(20) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_20") downto field_lo(c_field_arr, "udp_destination_port_20"));
destinations_info_wr.udp_destination_port_arr(21) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_21") downto field_lo(c_field_arr, "udp_destination_port_21"));
destinations_info_wr.udp_destination_port_arr(22) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_22") downto field_lo(c_field_arr, "udp_destination_port_22"));
destinations_info_wr.udp_destination_port_arr(23) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_23") downto field_lo(c_field_arr, "udp_destination_port_23"));
destinations_info_wr.udp_destination_port_arr(24) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_24") downto field_lo(c_field_arr, "udp_destination_port_24"));
destinations_info_wr.udp_destination_port_arr(25) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_25") downto field_lo(c_field_arr, "udp_destination_port_25"));
destinations_info_wr.udp_destination_port_arr(26) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_26") downto field_lo(c_field_arr, "udp_destination_port_26"));
destinations_info_wr.udp_destination_port_arr(27) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_27") downto field_lo(c_field_arr, "udp_destination_port_27"));
destinations_info_wr.udp_destination_port_arr(28) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_28") downto field_lo(c_field_arr, "udp_destination_port_28"));
destinations_info_wr.udp_destination_port_arr(29) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_29") downto field_lo(c_field_arr, "udp_destination_port_29"));
destinations_info_wr.udp_destination_port_arr(30) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_30") downto field_lo(c_field_arr, "udp_destination_port_30"));
destinations_info_wr.udp_destination_port_arr(31) <= mm_fields_out(field_hi(c_field_arr, "udp_destination_port_31") downto field_lo(c_field_arr, "udp_destination_port_31"));
destinations_info_wr.nof_destinations <= to_uint(mm_fields_out(field_hi(c_field_arr, "nof_destinations") downto field_lo(c_field_arr, "nof_destinations")));
-- Register the read only actual values, to ease timing closure
p_dp_clk : process(dp_clk)
constant c_nof_blocks_per_packet_arr : t_natural_arr(1 to c_sdp_bdo_nof_destinations_max) :=
func_sdp_bdo_nof_blocks_per_packet_look_up_table;
constant c_nof_blocks_per_packet_arr : t_natural_arr(1 to g_nof_destinations_max) :=
func_sdp_bdo_reorder_nof_blocks_look_up_table(g_nof_destinations_max);
begin
if rising_edge(dp_clk) then
nof_destinations_act <= func_sdp_bdo_parse_nof_destinations(destinations_info_wr.nof_destinations);
nof_blocks_per_packet_act <= c_nof_blocks_per_packet_arr(nof_destinations_act);
nof_destinations_act <= func_sdp_bdo_parse_nof_destinations(destinations_info_wr.nof_destinations, g_nof_destinations_max);
nof_blocks_per_packet <= c_nof_blocks_per_packet_arr(nof_destinations_act);
end if;
end process;
end str;
Loading