mirror of
https://github.com/fpganinja/taxi.git
synced 2026-01-18 01:30:36 -08:00
dma: Add interface configuration checks to DMA PSDPRAM module
Signed-off-by: Alex Forencich <alex@alexforencich.com>
This commit is contained in:
@@ -37,6 +37,7 @@ module taxi_dma_psdpram #
|
|||||||
taxi_dma_ram_if.rd_slv dma_ram_rd
|
taxi_dma_ram_if.rd_slv dma_ram_rd
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// extract parameters
|
||||||
localparam SEGS = dma_ram_wr.SEGS;
|
localparam SEGS = dma_ram_wr.SEGS;
|
||||||
localparam SEG_ADDR_W = dma_ram_wr.SEG_ADDR_W;
|
localparam SEG_ADDR_W = dma_ram_wr.SEG_ADDR_W;
|
||||||
localparam SEG_DATA_W = dma_ram_wr.SEG_DATA_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));
|
localparam INT_ADDR_W = $clog2(SIZE/(SEGS*SEG_BE_W));
|
||||||
|
|
||||||
// check configuration
|
// check configuration
|
||||||
if (SEG_ADDR_W < INT_ADDR_W)
|
if (dma_ram_wr.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);
|
$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
|
for (genvar n = 0; n < SEGS; n = n + 1) begin
|
||||||
|
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ module taxi_dma_psdpram_async #
|
|||||||
taxi_dma_ram_if.rd_slv dma_ram_rd
|
taxi_dma_ram_if.rd_slv dma_ram_rd
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// extract parameters
|
||||||
localparam SEGS = dma_ram_wr.SEGS;
|
localparam SEGS = dma_ram_wr.SEGS;
|
||||||
localparam SEG_ADDR_W = dma_ram_wr.SEG_ADDR_W;
|
localparam SEG_ADDR_W = dma_ram_wr.SEG_ADDR_W;
|
||||||
localparam SEG_DATA_W = dma_ram_wr.SEG_DATA_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));
|
localparam INT_ADDR_W = $clog2(SIZE/(SEGS*SEG_BE_W));
|
||||||
|
|
||||||
// check configuration
|
// check configuration
|
||||||
if (SEG_ADDR_W < INT_ADDR_W)
|
if (dma_ram_wr.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);
|
$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
|
for (genvar n = 0; n < SEGS; n = n + 1) begin
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user