mirror of
https://github.com/fpganinja/taxi.git
synced 2025-12-07 16:28:40 -08:00
axi: Dereference interface arrays in interconnect modules when extracting parameters
Signed-off-by: Alex Forencich <alex@alexforencich.com>
This commit is contained in:
@@ -56,15 +56,15 @@ module taxi_axi_interconnect_rd #
|
|||||||
);
|
);
|
||||||
|
|
||||||
// extract parameters
|
// extract parameters
|
||||||
localparam DATA_W = s_axi_rd.DATA_W;
|
localparam DATA_W = s_axi_rd[0].DATA_W;
|
||||||
localparam S_ADDR_W = s_axi_rd.ADDR_W;
|
localparam S_ADDR_W = s_axi_rd[0].ADDR_W;
|
||||||
localparam STRB_W = s_axi_rd.STRB_W;
|
localparam STRB_W = s_axi_rd[0].STRB_W;
|
||||||
localparam S_ID_W = s_axi_rd.ID_W;
|
localparam S_ID_W = s_axi_rd[0].ID_W;
|
||||||
localparam M_ID_W = m_axi_rd.ID_W;
|
localparam M_ID_W = m_axi_rd.ID_W;
|
||||||
localparam logic ARUSER_EN = s_axi_rd.ARUSER_EN && m_axi_rd.ARUSER_EN;
|
localparam logic ARUSER_EN = s_axi_rd[0].ARUSER_EN && m_axi_rd.ARUSER_EN;
|
||||||
localparam ARUSER_W = s_axi_rd.ARUSER_W;
|
localparam ARUSER_W = s_axi_rd[0].ARUSER_W;
|
||||||
localparam logic RUSER_EN = s_axi_rd.RUSER_EN && m_axi_rd.RUSER_EN;
|
localparam logic RUSER_EN = s_axi_rd[0].RUSER_EN && m_axi_rd.RUSER_EN;
|
||||||
localparam RUSER_W = s_axi_rd.RUSER_W;
|
localparam RUSER_W = s_axi_rd[0].RUSER_W;
|
||||||
|
|
||||||
localparam CL_S_COUNT = $clog2(S_COUNT);
|
localparam CL_S_COUNT = $clog2(S_COUNT);
|
||||||
localparam CL_M_COUNT = $clog2(M_COUNT);
|
localparam CL_M_COUNT = $clog2(M_COUNT);
|
||||||
@@ -102,7 +102,7 @@ endfunction
|
|||||||
localparam [M_COUNT*M_REGIONS-1:0][ADDR_W-1:0] M_BASE_ADDR_INT = M_BASE_ADDR != 0 ? (M_COUNT*M_REGIONS*ADDR_W)'(M_BASE_ADDR) : calcBaseAddrs(0);
|
localparam [M_COUNT*M_REGIONS-1:0][ADDR_W-1:0] M_BASE_ADDR_INT = M_BASE_ADDR != 0 ? (M_COUNT*M_REGIONS*ADDR_W)'(M_BASE_ADDR) : calcBaseAddrs(0);
|
||||||
|
|
||||||
// check configuration
|
// check configuration
|
||||||
if (s_axi_rd.ADDR_W != ADDR_W)
|
if (s_axi_rd[0].ADDR_W != ADDR_W)
|
||||||
$fatal(0, "Error: Interface ADDR_W parameter mismatch (instance %m)");
|
$fatal(0, "Error: Interface ADDR_W parameter mismatch (instance %m)");
|
||||||
|
|
||||||
if (m_axi_rd.DATA_W != DATA_W)
|
if (m_axi_rd.DATA_W != DATA_W)
|
||||||
@@ -111,12 +111,10 @@ if (m_axi_rd.DATA_W != DATA_W)
|
|||||||
if (m_axi_rd.STRB_W != STRB_W)
|
if (m_axi_rd.STRB_W != STRB_W)
|
||||||
$fatal(0, "Error: Interface STRB_W parameter mismatch (instance %m)");
|
$fatal(0, "Error: Interface STRB_W parameter mismatch (instance %m)");
|
||||||
|
|
||||||
initial begin
|
if (M_REGIONS < 1 || M_REGIONS > 16)
|
||||||
if (M_REGIONS < 1 || M_REGIONS > 16) begin
|
$fatal(0, "Error: M_REGIONS must be between 1 and 16 (instance %m)");
|
||||||
$error("Error: M_REGIONS must be between 1 and 16 (instance %m)");
|
|
||||||
$finish;
|
|
||||||
end
|
|
||||||
|
|
||||||
|
initial begin
|
||||||
for (integer i = 0; i < M_COUNT*M_REGIONS; i = i + 1) begin
|
for (integer i = 0; i < M_COUNT*M_REGIONS; i = i + 1) begin
|
||||||
/* verilator lint_off UNSIGNED */
|
/* verilator lint_off UNSIGNED */
|
||||||
if (M_ADDR_W_INT[i] != 0 && (M_ADDR_W_INT[i] < $clog2(STRB_W) || M_ADDR_W_INT[i] > ADDR_W)) begin
|
if (M_ADDR_W_INT[i] != 0 && (M_ADDR_W_INT[i] < $clog2(STRB_W) || M_ADDR_W_INT[i] > ADDR_W)) begin
|
||||||
|
|||||||
@@ -56,17 +56,17 @@ module taxi_axi_interconnect_wr #
|
|||||||
);
|
);
|
||||||
|
|
||||||
// extract parameters
|
// extract parameters
|
||||||
localparam DATA_W = s_axi_wr.DATA_W;
|
localparam DATA_W = s_axi_wr[0].DATA_W;
|
||||||
localparam S_ADDR_W = s_axi_wr.ADDR_W;
|
localparam S_ADDR_W = s_axi_wr[0].ADDR_W;
|
||||||
localparam STRB_W = s_axi_wr.STRB_W;
|
localparam STRB_W = s_axi_wr[0].STRB_W;
|
||||||
localparam S_ID_W = s_axi_wr.ID_W;
|
localparam S_ID_W = s_axi_wr[0].ID_W;
|
||||||
localparam M_ID_W = m_axi_wr.ID_W;
|
localparam M_ID_W = m_axi_wr[0].ID_W;
|
||||||
localparam logic AWUSER_EN = s_axi_wr.AWUSER_EN && m_axi_wr.AWUSER_EN;
|
localparam logic AWUSER_EN = s_axi_wr[0].AWUSER_EN && m_axi_wr[0].AWUSER_EN;
|
||||||
localparam AWUSER_W = s_axi_wr.AWUSER_W;
|
localparam AWUSER_W = s_axi_wr[0].AWUSER_W;
|
||||||
localparam logic WUSER_EN = s_axi_wr.WUSER_EN && m_axi_wr.WUSER_EN;
|
localparam logic WUSER_EN = s_axi_wr[0].WUSER_EN && m_axi_wr[0].WUSER_EN;
|
||||||
localparam WUSER_W = s_axi_wr.WUSER_W;
|
localparam WUSER_W = s_axi_wr[0].WUSER_W;
|
||||||
localparam logic BUSER_EN = s_axi_wr.BUSER_EN && m_axi_wr.BUSER_EN;
|
localparam logic BUSER_EN = s_axi_wr[0].BUSER_EN && m_axi_wr[0].BUSER_EN;
|
||||||
localparam BUSER_W = s_axi_wr.BUSER_W;
|
localparam BUSER_W = s_axi_wr[0].BUSER_W;
|
||||||
|
|
||||||
localparam CL_S_COUNT = $clog2(S_COUNT);
|
localparam CL_S_COUNT = $clog2(S_COUNT);
|
||||||
localparam CL_M_COUNT = $clog2(M_COUNT);
|
localparam CL_M_COUNT = $clog2(M_COUNT);
|
||||||
@@ -104,13 +104,13 @@ endfunction
|
|||||||
localparam [M_COUNT*M_REGIONS-1:0][ADDR_W-1:0] M_BASE_ADDR_INT = M_BASE_ADDR != 0 ? (M_COUNT*M_REGIONS*ADDR_W)'(M_BASE_ADDR) : calcBaseAddrs(0);
|
localparam [M_COUNT*M_REGIONS-1:0][ADDR_W-1:0] M_BASE_ADDR_INT = M_BASE_ADDR != 0 ? (M_COUNT*M_REGIONS*ADDR_W)'(M_BASE_ADDR) : calcBaseAddrs(0);
|
||||||
|
|
||||||
// check configuration
|
// check configuration
|
||||||
if (s_axi_wr.ADDR_W != ADDR_W)
|
if (s_axi_wr[0].ADDR_W != ADDR_W)
|
||||||
$fatal(0, "Error: Interface ADDR_W parameter mismatch (instance %m)");
|
$fatal(0, "Error: Interface ADDR_W parameter mismatch (instance %m)");
|
||||||
|
|
||||||
if (m_axi_wr.DATA_W != DATA_W)
|
if (m_axi_wr[0].DATA_W != DATA_W)
|
||||||
$fatal(0, "Error: Interface DATA_W parameter mismatch (instance %m)");
|
$fatal(0, "Error: Interface DATA_W parameter mismatch (instance %m)");
|
||||||
|
|
||||||
if (m_axi_wr.STRB_W != STRB_W)
|
if (m_axi_wr[0].STRB_W != STRB_W)
|
||||||
$fatal(0, "Error: Interface STRB_W parameter mismatch (instance %m)");
|
$fatal(0, "Error: Interface STRB_W parameter mismatch (instance %m)");
|
||||||
|
|
||||||
initial begin
|
initial begin
|
||||||
|
|||||||
@@ -56,13 +56,13 @@ module taxi_axil_interconnect_rd #
|
|||||||
);
|
);
|
||||||
|
|
||||||
// extract parameters
|
// extract parameters
|
||||||
localparam DATA_W = s_axil_rd.DATA_W;
|
localparam DATA_W = s_axil_rd[0].DATA_W;
|
||||||
localparam S_ADDR_W = s_axil_rd.ADDR_W;
|
localparam S_ADDR_W = s_axil_rd[0].ADDR_W;
|
||||||
localparam STRB_W = s_axil_rd.STRB_W;
|
localparam STRB_W = s_axil_rd[0].STRB_W;
|
||||||
localparam logic ARUSER_EN = s_axil_rd.ARUSER_EN && m_axil_rd.ARUSER_EN;
|
localparam logic ARUSER_EN = s_axil_rd[0].ARUSER_EN && m_axil_rd[0].ARUSER_EN;
|
||||||
localparam ARUSER_W = s_axil_rd.ARUSER_W;
|
localparam ARUSER_W = s_axil_rd[0].ARUSER_W;
|
||||||
localparam logic RUSER_EN = s_axil_rd.RUSER_EN && m_axil_rd.RUSER_EN;
|
localparam logic RUSER_EN = s_axil_rd[0].RUSER_EN && m_axil_rd[0].RUSER_EN;
|
||||||
localparam RUSER_W = s_axil_rd.RUSER_W;
|
localparam RUSER_W = s_axil_rd[0].RUSER_W;
|
||||||
|
|
||||||
localparam CL_S_COUNT = $clog2(S_COUNT);
|
localparam CL_S_COUNT = $clog2(S_COUNT);
|
||||||
localparam CL_M_COUNT = $clog2(M_COUNT);
|
localparam CL_M_COUNT = $clog2(M_COUNT);
|
||||||
@@ -100,13 +100,13 @@ endfunction
|
|||||||
localparam [M_COUNT*M_REGIONS-1:0][ADDR_W-1:0] M_BASE_ADDR_INT = M_BASE_ADDR != 0 ? (M_COUNT*M_REGIONS*ADDR_W)'(M_BASE_ADDR) : calcBaseAddrs(0);
|
localparam [M_COUNT*M_REGIONS-1:0][ADDR_W-1:0] M_BASE_ADDR_INT = M_BASE_ADDR != 0 ? (M_COUNT*M_REGIONS*ADDR_W)'(M_BASE_ADDR) : calcBaseAddrs(0);
|
||||||
|
|
||||||
// check configuration
|
// check configuration
|
||||||
if (s_axil_rd.ADDR_W != ADDR_W)
|
if (s_axil_rd[0].ADDR_W != ADDR_W)
|
||||||
$fatal(0, "Error: Interface ADDR_W parameter mismatch (instance %m)");
|
$fatal(0, "Error: Interface ADDR_W parameter mismatch (instance %m)");
|
||||||
|
|
||||||
if (m_axil_rd.DATA_W != DATA_W)
|
if (m_axil_rd[0].DATA_W != DATA_W)
|
||||||
$fatal(0, "Error: Interface DATA_W parameter mismatch (instance %m)");
|
$fatal(0, "Error: Interface DATA_W parameter mismatch (instance %m)");
|
||||||
|
|
||||||
if (m_axil_rd.STRB_W != STRB_W)
|
if (m_axil_rd[0].STRB_W != STRB_W)
|
||||||
$fatal(0, "Error: Interface STRB_W parameter mismatch (instance %m)");
|
$fatal(0, "Error: Interface STRB_W parameter mismatch (instance %m)");
|
||||||
|
|
||||||
initial begin
|
initial begin
|
||||||
|
|||||||
@@ -56,15 +56,15 @@ module taxi_axil_interconnect_wr #
|
|||||||
);
|
);
|
||||||
|
|
||||||
// extract parameters
|
// extract parameters
|
||||||
localparam DATA_W = s_axil_wr.DATA_W;
|
localparam DATA_W = s_axil_wr[0].DATA_W;
|
||||||
localparam S_ADDR_W = s_axil_wr.ADDR_W;
|
localparam S_ADDR_W = s_axil_wr[0].ADDR_W;
|
||||||
localparam STRB_W = s_axil_wr.STRB_W;
|
localparam STRB_W = s_axil_wr[0].STRB_W;
|
||||||
localparam logic AWUSER_EN = s_axil_wr.AWUSER_EN && m_axil_wr.AWUSER_EN;
|
localparam logic AWUSER_EN = s_axil_wr[0].AWUSER_EN && m_axil_wr.AWUSER_EN;
|
||||||
localparam AWUSER_W = s_axil_wr.AWUSER_W;
|
localparam AWUSER_W = s_axil_wr[0].AWUSER_W;
|
||||||
localparam logic WUSER_EN = s_axil_wr.WUSER_EN && m_axil_wr.WUSER_EN;
|
localparam logic WUSER_EN = s_axil_wr[0].WUSER_EN && m_axil_wr.WUSER_EN;
|
||||||
localparam WUSER_W = s_axil_wr.WUSER_W;
|
localparam WUSER_W = s_axil_wr[0].WUSER_W;
|
||||||
localparam logic BUSER_EN = s_axil_wr.BUSER_EN && m_axil_wr.BUSER_EN;
|
localparam logic BUSER_EN = s_axil_wr[0].BUSER_EN && m_axil_wr.BUSER_EN;
|
||||||
localparam BUSER_W = s_axil_wr.BUSER_W;
|
localparam BUSER_W = s_axil_wr[0].BUSER_W;
|
||||||
|
|
||||||
localparam CL_S_COUNT = $clog2(S_COUNT);
|
localparam CL_S_COUNT = $clog2(S_COUNT);
|
||||||
localparam CL_M_COUNT = $clog2(M_COUNT);
|
localparam CL_M_COUNT = $clog2(M_COUNT);
|
||||||
@@ -102,7 +102,7 @@ endfunction
|
|||||||
localparam [M_COUNT*M_REGIONS-1:0][ADDR_W-1:0] M_BASE_ADDR_INT = M_BASE_ADDR != 0 ? (M_COUNT*M_REGIONS*ADDR_W)'(M_BASE_ADDR) : calcBaseAddrs(0);
|
localparam [M_COUNT*M_REGIONS-1:0][ADDR_W-1:0] M_BASE_ADDR_INT = M_BASE_ADDR != 0 ? (M_COUNT*M_REGIONS*ADDR_W)'(M_BASE_ADDR) : calcBaseAddrs(0);
|
||||||
|
|
||||||
// check configuration
|
// check configuration
|
||||||
if (s_axil_wr.ADDR_W != ADDR_W)
|
if (s_axil_wr[0].ADDR_W != ADDR_W)
|
||||||
$fatal(0, "Error: Interface ADDR_W parameter mismatch (instance %m)");
|
$fatal(0, "Error: Interface ADDR_W parameter mismatch (instance %m)");
|
||||||
|
|
||||||
if (m_axil_wr.DATA_W != DATA_W)
|
if (m_axil_wr.DATA_W != DATA_W)
|
||||||
|
|||||||
Reference in New Issue
Block a user