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: