dma: Add interface configuration checks to DMA PSDPRAM module

Signed-off-by: Alex Forencich <alex@alexforencich.com>
This commit is contained in:
Alex Forencich
2025-12-15 20:21:24 -08:00
parent cbe0fa730d
commit cb3538a0de
2 changed files with 18 additions and 4 deletions

View File

@@ -37,6 +37,7 @@ module taxi_dma_psdpram #
taxi_dma_ram_if.rd_slv dma_ram_rd
);
// extract parameters
localparam SEGS = dma_ram_wr.SEGS;
localparam SEG_ADDR_W = dma_ram_wr.SEG_ADDR_W;
localparam SEG_DATA_W = dma_ram_wr.SEG_DATA_W;
@@ -45,8 +46,14 @@ localparam SEG_BE_W = dma_ram_wr.SEG_BE_W;
localparam INT_ADDR_W = $clog2(SIZE/(SEGS*SEG_BE_W));
// check configuration
if (SEG_ADDR_W < INT_ADDR_W)
$fatal(0, "Error: SEG_ADDR_W not sufficient for requested size (min %d for size %d) (instance %m)", INT_ADDR_W, SIZE);
if (dma_ram_wr.SEG_ADDR_W < INT_ADDR_W)
$fatal(0, "Error: dma_ram_wr.SEG_ADDR_W not sufficient for requested size (min %d for size %d) (instance %m)", INT_ADDR_W, SIZE);
if (dma_ram_rd.SEG_ADDR_W < INT_ADDR_W)
$fatal(0, "Error: dma_ram_wr.SEG_ADDR_W not sufficient for requested size (min %d for size %d) (instance %m)", INT_ADDR_W, SIZE);
if (SEGS != dma_ram_rd.SEGS || SEG_DATA_W != dma_ram_rd.SEG_DATA_W)
$fatal(0, "Error: Interface segment configuration mismatch (instance %m)");
for (genvar n = 0; n < SEGS; n = n + 1) begin

View File

@@ -38,6 +38,7 @@ module taxi_dma_psdpram_async #
taxi_dma_ram_if.rd_slv dma_ram_rd
);
// extract parameters
localparam SEGS = dma_ram_wr.SEGS;
localparam SEG_ADDR_W = dma_ram_wr.SEG_ADDR_W;
localparam SEG_DATA_W = dma_ram_wr.SEG_DATA_W;
@@ -46,8 +47,14 @@ localparam SEG_BE_W = dma_ram_wr.SEG_BE_W;
localparam INT_ADDR_W = $clog2(SIZE/(SEGS*SEG_BE_W));
// check configuration
if (SEG_ADDR_W < INT_ADDR_W)
$fatal(0, "Error: SEG_ADDR_W not sufficient for requested size (min %d for size %d) (instance %m)", INT_ADDR_W, SIZE);
if (dma_ram_wr.SEG_ADDR_W < INT_ADDR_W)
$fatal(0, "Error: dma_ram_wr.SEG_ADDR_W not sufficient for requested size (min %d for size %d) (instance %m)", INT_ADDR_W, SIZE);
if (dma_ram_rd.SEG_ADDR_W < INT_ADDR_W)
$fatal(0, "Error: dma_ram_wr.SEG_ADDR_W not sufficient for requested size (min %d for size %d) (instance %m)", INT_ADDR_W, SIZE);
if (SEGS != dma_ram_rd.SEGS || SEG_DATA_W != dma_ram_rd.SEG_DATA_W)
$fatal(0, "Error: Interface segment configuration mismatch (instance %m)");
for (genvar n = 0; n < SEGS; n = n + 1) begin