Delete BigMem; it's not used anymore
This commit is contained in:
parent
15cec0eab7
commit
276f53b652
@ -1,80 +0,0 @@
|
|||||||
// See LICENSE for license details.
|
|
||||||
|
|
||||||
package uncore
|
|
||||||
import Chisel._
|
|
||||||
|
|
||||||
class BigMem[T <: Data](n: Int, preLatency: Int, postLatency: Int, leaf: Mem[UInt], noMask: Boolean = false)(gen: => T) extends Module
|
|
||||||
{
|
|
||||||
class Inputs extends Bundle {
|
|
||||||
val addr = UInt(INPUT, log2Up(n))
|
|
||||||
val rw = Bool(INPUT)
|
|
||||||
val wdata = gen.asInput
|
|
||||||
val wmask = gen.asInput
|
|
||||||
override def clone = new Inputs().asInstanceOf[this.type]
|
|
||||||
}
|
|
||||||
val io = new Bundle {
|
|
||||||
val in = Valid(new Inputs).flip
|
|
||||||
val rdata = gen.asOutput
|
|
||||||
}
|
|
||||||
val data = gen
|
|
||||||
val colMux = if (2*data.getWidth <= leaf.data.getWidth && n > leaf.n) 1 << math.floor(math.log(leaf.data.getWidth/data.getWidth)/math.log(2)).toInt else 1
|
|
||||||
val nWide = if (data.getWidth > leaf.data.getWidth) 1+(data.getWidth-1)/leaf.data.getWidth else 1
|
|
||||||
val nDeep = if (n > colMux*leaf.n) 1+(n-1)/(colMux*leaf.n) else 1
|
|
||||||
if (nDeep > 1 || colMux > 1)
|
|
||||||
require(isPow2(n) && isPow2(leaf.n))
|
|
||||||
|
|
||||||
val rdataDeep = Vec.fill(nDeep){Bits()}
|
|
||||||
val rdataSel = Vec.fill(nDeep){Bool()}
|
|
||||||
for (i <- 0 until nDeep) {
|
|
||||||
val in = Pipe(io.in.valid && (if (nDeep == 1) Bool(true) else UInt(i) === io.in.bits.addr(log2Up(n)-1, log2Up(n/nDeep))), io.in.bits, preLatency)
|
|
||||||
val idx = in.bits.addr(log2Up(n/nDeep/colMux)-1, 0)
|
|
||||||
val wdata = in.bits.wdata.toBits
|
|
||||||
val wmask = in.bits.wmask.toBits
|
|
||||||
val ren = in.valid && !in.bits.rw
|
|
||||||
val reg_ren = Reg(next=ren)
|
|
||||||
val rdata = Vec.fill(nWide){Bits()}
|
|
||||||
|
|
||||||
val r = Pipe(ren, in.bits.addr, postLatency)
|
|
||||||
|
|
||||||
for (j <- 0 until nWide) {
|
|
||||||
val mem = leaf.clone
|
|
||||||
var dout: Bits = null
|
|
||||||
val ridx = if (postLatency > 0) Reg(Bits()) else null
|
|
||||||
|
|
||||||
var wmask0 = Fill(colMux, wmask(math.min(wmask.getWidth, leaf.data.getWidth*(j+1))-1, leaf.data.getWidth*j))
|
|
||||||
if (colMux > 1)
|
|
||||||
wmask0 = wmask0 & FillInterleaved(gen.getWidth, UIntToOH(in.bits.addr(log2Up(n/nDeep)-1, log2Up(n/nDeep/colMux)), log2Up(colMux)))
|
|
||||||
val wdata0 = Fill(colMux, wdata(math.min(wdata.getWidth, leaf.data.getWidth*(j+1))-1, leaf.data.getWidth*j))
|
|
||||||
when (in.valid) {
|
|
||||||
when (in.bits.rw) {
|
|
||||||
if (noMask)
|
|
||||||
mem.write(idx, wdata0)
|
|
||||||
else
|
|
||||||
mem.write(idx, wdata0, wmask0)
|
|
||||||
}
|
|
||||||
.otherwise { if (postLatency > 0) ridx := idx }
|
|
||||||
}
|
|
||||||
|
|
||||||
if (postLatency == 0) {
|
|
||||||
dout = mem(idx)
|
|
||||||
} else if (postLatency == 1) {
|
|
||||||
dout = mem(ridx)
|
|
||||||
} else
|
|
||||||
dout = Pipe(reg_ren, mem(ridx), postLatency-1).bits
|
|
||||||
|
|
||||||
rdata(j) := dout
|
|
||||||
}
|
|
||||||
val rdataWide = rdata.reduceLeft((x, y) => Cat(y, x))
|
|
||||||
|
|
||||||
var colMuxOut = rdataWide
|
|
||||||
if (colMux > 1) {
|
|
||||||
val colMuxIn = Vec((0 until colMux).map(k => rdataWide(gen.getWidth*(k+1)-1, gen.getWidth*k)))
|
|
||||||
colMuxOut = colMuxIn(r.bits(log2Up(n/nDeep)-1, log2Up(n/nDeep/colMux)))
|
|
||||||
}
|
|
||||||
|
|
||||||
rdataDeep(i) := colMuxOut
|
|
||||||
rdataSel(i) := r.valid
|
|
||||||
}
|
|
||||||
|
|
||||||
io.rdata := Mux1H(rdataSel, rdataDeep)
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user