hw/ip/prim/abstract/prim_flash.sv Cov: 98%

   1: // Copyright lowRISC contributors.
   2: // Licensed under the Apache License, Version 2.0, see LICENSE for details.
   3: // SPDX-License-Identifier: Apache-2.0
   4: 
   5: // TODO: This module is a hard-coded stopgap to select an implementation of an
   6: // "abstract module". This module is to be replaced by generated code.
   7: 
   8: `ifndef PRIM_DEFAULT_IMPL
   9:   `define PRIM_DEFAULT_IMPL prim_pkg::ImplGeneric
  10: `endif
  11: 
  12: module prim_flash #(
  13:   parameter prim_pkg::impl_e Impl = `PRIM_DEFAULT_IMPL,
  14: 
  15:   parameter int PagesPerBank = 256, // pages per bank
  16:   parameter int WordsPerPage = 256, // words per page
  17:   parameter int DataWidth   = 32, // bits per word
  18: 
  19:   //Do not touch - Derived parameters
  20:   parameter int PageW = $clog2(PagesPerBank),
  21:   parameter int WordW = $clog2(WordsPerPage),
  22:   parameter int AddrW = PageW + WordW
  23: ) (
  24:   input                        clk_i,
  25:   input                        rst_ni,
  26:   input                        req_i,
  27:   input                        host_req_i,
  28:   input [AddrW-1:0]            host_addr_i,
  29:   input                        rd_i,
  30:   input                        prog_i,
  31:   input                        pg_erase_i,
  32:   input                        bk_erase_i,
  33:   input [AddrW-1:0]            addr_i,
  34:   input [DataWidth-1:0]        prog_data_i,
  35:   output logic                 host_req_rdy_o,
  36:   output logic                 host_req_done_o,
  37:   output logic                 rd_done_o,
  38:   output logic                 prog_done_o,
  39:   output logic                 erase_done_o,
  40:   output logic [DataWidth-1:0] rd_data_o,
  41:   output logic                 init_busy_o
  42: );
  43: 
  44:   import prim_pkg::*;
  45: 
  46:   if (Impl == ImplGeneric || Impl == ImplXilinx) begin : gen_flash
  47:     prim_generic_flash #(
  48:       .PagesPerBank(PagesPerBank),
  49:       .WordsPerPage(WordsPerPage),
  50:       .DataWidth(DataWidth)
  51:     ) u_impl_generic (
  52:       .clk_i,
  53:       .rst_ni,
  54:       .req_i,
  55:       .host_req_i,
  56:       .host_addr_i,
  57:       .rd_i,
  58:       .prog_i,
  59:       .pg_erase_i,
  60:       .bk_erase_i,
  61:       .addr_i,
  62:       .prog_data_i,
  63:       .host_req_rdy_o,
  64:       .host_req_done_o,
  65:       .rd_done_o,
  66:       .prog_done_o,
  67:       .erase_done_o,
  68:       .rd_data_o,
  69:       .init_busy_o
  70:     );
  71:   end else begin : gen_failure
  72:     // TODO: Find code that works across tools and causes a compile failure
  73:   end
  74: 
  75: endmodule
  76: