blob: 1cfcf25a01345694a8ba67eadcf1b39ba4e99a12 [file] [log] [blame]
// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
//
// ROM wrapper with rvalid register
`include "prim_assert.sv"
module prim_rom_adv import prim_rom_pkg::*; #(
// Parameters passed on the the ROM primitive.
parameter int Width = 32,
parameter int Depth = 2048, // 8kB default
parameter MemInitFile = "", // VMEM file to initialize the memory with
localparam int Aw = $clog2(Depth)
) (
input logic clk_i,
input logic rst_ni,
input logic req_i,
input logic [Aw-1:0] addr_i,
output logic rvalid_o,
output logic [Width-1:0] rdata_o,
input rom_cfg_t cfg_i
);
prim_rom #(
.Width(Width),
.Depth(Depth),
.MemInitFile(MemInitFile)
) u_prim_rom (
.clk_i,
.req_i,
.addr_i,
.rdata_o,
.cfg_i
);
always_ff @(posedge clk_i or negedge rst_ni) begin
if (!rst_ni) begin
rvalid_o <= 1'b0;
end else begin
rvalid_o <= req_i;
end
end
////////////////
// ASSERTIONS //
////////////////
// Control Signals should never be X
`ASSERT(noXOnCsI, !$isunknown(req_i), clk_i, '0)
endmodule : prim_rom_adv