Skip to content

Commit aee2486

Browse files
committed
hpdcache: point SRAM models to tc_sram
1 parent 378ed3b commit aee2486

2 files changed

Lines changed: 109 additions & 6 deletions

File tree

Bender.yml

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -234,12 +234,7 @@ sources:
234234
- core/cache_subsystem/hpdcache/rtl/src/utils/ecc/prim_secded_72_64_dec.sv
235235
- core/cache_subsystem/hpdcache/rtl/src/utils/ecc/prim_secded_72_64_enc.sv
236236
# HPDCache SRAM models
237-
- core/cache_subsystem/hpdcache/rtl/src/common/macros/behav/hpdcache_sram_1rw.sv
238-
- core/cache_subsystem/hpdcache/rtl/src/common/macros/behav/hpdcache_sram_ecc_1rw.sv
239-
- core/cache_subsystem/hpdcache/rtl/src/common/macros/behav/hpdcache_sram_wbyteenable_1rw.sv
240-
- core/cache_subsystem/hpdcache/rtl/src/common/macros/behav/hpdcache_sram_wbyteenable_ecc_1rw.sv
241-
- core/cache_subsystem/hpdcache/rtl/src/common/macros/behav/hpdcache_sram_wmask_1rw.sv
242-
- core/cache_subsystem/hpdcache/rtl/src/common/macros/behav/hpdcache_sram_wmask_ecc_1rw.sv
237+
- common/local/util/hpdcache_tc_sram.sv
243238

244239
# Physical Memory Protection
245240
- core/pmp/src/pmp.sv
Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
// Copyright 2022 ETH Zurich and University of Bologna.
2+
// Solderpad Hardware License, Version 0.51, see LICENSE for details.
3+
// SPDX-License-Identifier: SHL-0.51
4+
//
5+
// Paul Scheffler <paulsc@iis.ee.ethz.ch>
6+
7+
// Wrappers mapping HPDcache SRAMs to PULP `tc_sram`.
8+
9+
/// SRAM with one R/W port and no write mask
10+
module hpdcache_sram_1rw #(
11+
parameter int unsigned ADDR_SIZE = 0,
12+
parameter int unsigned DATA_SIZE = 0,
13+
parameter int unsigned DEPTH = 2 ** ADDR_SIZE,
14+
parameter int unsigned NDATA = 1
15+
) (
16+
input logic clk,
17+
input logic rst_n,
18+
input logic cs,
19+
input logic we,
20+
input logic [ADDR_SIZE-1:0] addr,
21+
input logic [NDATA-1:0][DATA_SIZE-1:0] wdata,
22+
output logic [NDATA-1:0][DATA_SIZE-1:0] rdata
23+
);
24+
tc_sram #(
25+
.NumWords (DEPTH),
26+
.DataWidth(NDATA * DATA_SIZE),
27+
.ByteWidth(NDATA * DATA_SIZE),
28+
.NumPorts (1),
29+
.Latency (1)
30+
) i_tc_sram (
31+
.clk_i (clk),
32+
.rst_ni (rst_n),
33+
.req_i (cs),
34+
.we_i (we),
35+
.addr_i (addr),
36+
.wdata_i(wdata),
37+
.be_i (1'b1),
38+
.rdata_o(rdata)
39+
);
40+
endmodule
41+
42+
/// SRAM with one R/W port and per-byte write mask
43+
module hpdcache_sram_wbyteenable_1rw #(
44+
parameter int unsigned ADDR_SIZE = 0,
45+
parameter int unsigned DATA_SIZE = 0,
46+
parameter int unsigned DEPTH = 2 ** ADDR_SIZE,
47+
parameter int unsigned NDATA = 1
48+
) (
49+
input logic clk,
50+
input logic rst_n,
51+
input logic cs,
52+
input logic we,
53+
input logic [ ADDR_SIZE-1:0] addr,
54+
input logic [NDATA-1:0][ DATA_SIZE-1:0] wdata,
55+
input logic [NDATA-1:0][DATA_SIZE/8-1:0] wbyteenable,
56+
output logic [NDATA-1:0][ DATA_SIZE-1:0] rdata
57+
);
58+
tc_sram #(
59+
.NumWords (DEPTH),
60+
.DataWidth(NDATA * DATA_SIZE),
61+
.ByteWidth(8),
62+
.NumPorts (1),
63+
.Latency (1)
64+
) i_tc_sram (
65+
.clk_i (clk),
66+
.rst_ni (rst_n),
67+
.req_i (cs),
68+
.we_i (we),
69+
.addr_i (addr),
70+
.wdata_i(wdata),
71+
.be_i (wbyteenable),
72+
.rdata_o(rdata)
73+
);
74+
endmodule
75+
76+
/// SRAM with one R/W port and per-bit write mask
77+
module hpdcache_sram_wmask_1rw #(
78+
parameter int unsigned ADDR_SIZE = 0,
79+
parameter int unsigned DATA_SIZE = 0,
80+
parameter int unsigned DEPTH = 2 ** ADDR_SIZE,
81+
parameter int unsigned NDATA = 1
82+
) (
83+
input logic clk,
84+
input logic rst_n,
85+
input logic cs,
86+
input logic we,
87+
input logic [ADDR_SIZE-1:0] addr,
88+
input logic [NDATA-1:0][DATA_SIZE-1:0] wdata,
89+
input logic [NDATA-1:0][DATA_SIZE-1:0] wmask,
90+
output logic [NDATA-1:0][DATA_SIZE-1:0] rdata
91+
);
92+
tc_sram #(
93+
.NumWords (DEPTH),
94+
.DataWidth(NDATA * DATA_SIZE),
95+
.ByteWidth(1),
96+
.NumPorts (1),
97+
.Latency (1)
98+
) i_tc_sram (
99+
.clk_i (clk),
100+
.rst_ni (rst_n),
101+
.req_i (cs),
102+
.we_i (we),
103+
.addr_i (addr),
104+
.wdata_i(wdata),
105+
.be_i (wmask),
106+
.rdata_o(rdata)
107+
);
108+
endmodule

0 commit comments

Comments
 (0)