|  | // 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 |