Skip to content

Commit 598a5a4

Browse files
committed
style: remove complex cache design
1 parent c8ccf3a commit 598a5a4

File tree

1 file changed

+1
-128
lines changed

1 file changed

+1
-128
lines changed
Lines changed: 1 addition & 128 deletions
Original file line numberDiff line numberDiff line change
@@ -1,131 +1,4 @@
11
package treecorel2
22

33
import chisel3._
4-
import chisel3.util._
5-
6-
object CacheConfig {
7-
val ICacheSize = (256 * 1024)
8-
val DCacheSize = (256 * 1024)
9-
val LineSize = 256
10-
val NWay = 4
11-
val NBAN = 4
12-
val IdLen = 1
13-
}
14-
15-
class CACHEREQIO extends Bundle {
16-
val addr = UInt(64.W)
17-
val data = UInt(64.W)
18-
val mask = UInt((64 / 8).W)
19-
val op = UInt(1.W) // 0: rd 1: wr
20-
}
21-
22-
class CACHERESPIO extends Bundle {
23-
val data = UInt(64.W)
24-
val cmd = UInt(4.W)
25-
}
26-
27-
class MEMREQIO extends Bundle {
28-
val addr = UInt(64.W)
29-
val data = UInt(64.W)
30-
val cmd = UInt(4.W)
31-
val len = UInt(2.W) // 0: 1(64bits) 1: 2 2: 4 3: 8
32-
val id = UInt(CacheConfig.IdLen.W)
33-
}
34-
35-
class MEMRESPIO extends Bundle {
36-
val data = UInt(64.W)
37-
val cmd = UInt(4.W)
38-
val id = UInt(CacheConfig.IdLen.W)
39-
}
40-
41-
class WAYINIO(val tagWidth: Int, val idxWidth: Int, val offsetWidth: Int) extends Bundle {
42-
val wt = Valid(new Bundle {
43-
val tag = UInt(tagWidth.W)
44-
val idx = UInt(idxWidth.W)
45-
val offset = UInt(offsetWidth.W)
46-
val v = UInt(1.W)
47-
val d = UInt(1.W)
48-
val mask = UInt(((CacheConfig.LineSize / CacheConfig.NBank) / 8).W)
49-
val data = UInt(64.W)
50-
val op = UInt(1.W) // must 1
51-
})
52-
val rd = Valid(new Bundle {
53-
val idx = UInt(idxWidth.W)
54-
val op = UInt(1.W) // must 0
55-
})
56-
}
57-
58-
class WAYOUTIO(val tagWidth: Int) extends Bundle {
59-
val tag = UInt(tagWidth.W)
60-
val v = UInt(1.W)
61-
val d = UInt(1.W)
62-
val data = Vec(CacheConfig.NBank, UInt((CacheConfig.LineSize / CacheConfig.NBank).W))
63-
}
64-
65-
class Way(val tagWidth: Int, val idxWidth: Int, val offsetWidth: Int) extends Module {
66-
val io = IO(new Bundle {
67-
val fence_invalid = Input(Bool())
68-
val in = Flipped(new WAYINIO(tagWidth, idxWidth, offsetWidth))
69-
val out = Valid(new WAYOUTIO(tagWidth))
70-
})
71-
72-
val tag = UInt(tagWidth.W) // tag
73-
val v = UInt(1.W) // valid
74-
val dirty = UInt(1.W)
75-
val depth = math.pow(2, idxWidth).toInt
76-
77-
val tagTable = SyncReadMem(depth, tag)
78-
val vTable = RegInit(VecInit(Seq.fill(depth)(0.U(1.W))))
79-
val dirtyTable = RegInit(VecInit(Seq.fill(depth)(0.U(1.W))))
80-
// nBank * (n * 8bit)
81-
val bankn = List.fill(CacheConfig.NBank)(SyncReadMem(depth, Vec((CacheConfig.LineSize / CacheConfig.NBank) / 8, UInt(8.W))))
82-
83-
val result = WireInit(0.U.asTypeOf(new WAYOUTIO(tagWidth)))
84-
85-
// read logic
86-
// TODO: check data order in simulator
87-
// tag,v, d, data
88-
result := Cat(
89-
List(tagTable.read(io.in.rd.bits.idx, io.in.rd.valid).asUInt()) ++ Seq(RegNext(vTable(io.in.rd.bits.idx), 0.U(1.W)), RegNext(dirtyTable(io.in.rd.bits.idx), 0.U(1.W))) ++
90-
bankn.map(_.read(io.in.rd.bits.idx, io.in.rd.valid).asUInt())
91-
).asTypeOf(new WAYOUTIO(tagWidth))
92-
93-
io.out.bits := result
94-
io.out.valid := RegNext(io.in.rd.valid, 0.U)
95-
dontTouch(io.out.valid)
96-
97-
// write logic
98-
// write bank data
99-
val bank_sel = WireInit(io.in.wt.bits.offset(log2Ceil(64 / 8) + log2Ceil(CacheConfig.NBank) - 1, log2Ceil(64 / 8)))
100-
val wdata = io.in.wt.bits.data.asTypeOf(Vec(CacheConfig.LineSize / CacheConfig.NBank / 8, UInt(8.W)))
101-
when(io.in.wt.fire()) {
102-
when(io.in.wt.bits.op === 1.U) {
103-
// write tag,v
104-
tagTable.write(io.in.wt.bits.idx, io.in.wt.bits.tag)
105-
vTable(io.in.wt.bits.idx) := io.in.wt.bits.v
106-
// write d
107-
dirtyTable(io.in.wt.bits.idx) := io.in.wt.bits.d
108-
// write data
109-
bankn.zipWithIndex.foreach((a) => {
110-
val (bank, i) = a
111-
when(bank_sel === i.U) {
112-
bank.write(io.in.wt.bits.idx, wdata, io.in.wt.bits.mask.asBools())
113-
}
114-
})
115-
}
116-
}.elsewhen(io.fence_invalid) {
117-
vTable := VecInit(Seq.fill(depth)(0.U(1.W)))
118-
}
119-
}
120-
121-
class CACHE2CPUIO extends Bundle {
122-
val req = Flipped(Decoupled(new CACHEREQIO))
123-
val resp = Valid(new CACHERESPIO)
124-
}
125-
126-
class CACHE2MEMIO extends Bundle {
127-
val req = Decoupled(new MEMREQIO)
128-
val resp = Flipped(Decoupled(new MEMRESPIO))
129-
}
130-
131-
class Cache extends Module {}
4+
import chisel3.util._

0 commit comments

Comments
 (0)