Memend.scala 1.5 KB
Newer Older
Y
Yinan Xu 已提交
1 2 3 4 5 6
package xiangshan.mem

import chisel3._
import chisel3.util._
import xiangshan._
import utils._
Y
Yinan Xu 已提交
7
import xiangshan.backend.roq.RoqPtr
Y
Yinan Xu 已提交
8
import xiangshan.cache._
L
LinJiawei 已提交
9
import xiangshan.backend.fu.FenceToSbuffer
Y
Yinan Xu 已提交
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35

object genWmask {
  def apply(addr: UInt, sizeEncode: UInt): UInt = {
    (LookupTree(sizeEncode, List(
      "b00".U -> 0x1.U, //0001 << addr(2:0)
      "b01".U -> 0x3.U, //0011
      "b10".U -> 0xf.U, //1111
      "b11".U -> 0xff.U //11111111
    )) << addr(2, 0)).asUInt()
  }
}

object genWdata {
  def apply(data: UInt, sizeEncode: UInt): UInt = {
    LookupTree(sizeEncode, List(
      "b00".U -> Fill(8, data(7, 0)),
      "b01".U -> Fill(4, data(15, 0)),
      "b10".U -> Fill(2, data(31, 0)),
      "b11".U -> data
    ))
  }
}

class LsPipelineBundle extends XSBundle {
  val vaddr = UInt(VAddrBits.W)
  val paddr = UInt(PAddrBits.W)
36
  val func = UInt(6.W) //fixme???
Y
Yinan Xu 已提交
37
  val mask = UInt(8.W)
L
LinJiawei 已提交
38
  val data = UInt((XLEN+1).W)
Y
Yinan Xu 已提交
39 40 41
  val uop = new MicroOp

  val miss = Bool()
42
  val tlbMiss = Bool()
Y
Yinan Xu 已提交
43 44 45 46 47 48 49 50 51
  val mmio = Bool()

  val forwardMask = Vec(8, Bool())
  val forwardData = Vec(8, UInt(8.W))
}

class LoadForwardQueryIO extends XSBundle {
  val paddr = Output(UInt(PAddrBits.W))
  val mask = Output(UInt(8.W))
52
  val uop = Output(new MicroOp) // for replay
Y
Yinan Xu 已提交
53 54
  val pc = Output(UInt(VAddrBits.W)) //for debug
  val valid = Output(Bool()) //for debug
Z
ZhangZifei 已提交
55

Y
Yinan Xu 已提交
56 57
  val forwardMask = Input(Vec(8, Bool()))
  val forwardData = Input(Vec(8, UInt(8.W)))
58

59
  // val lqIdx = Output(UInt(LoadQueueIdxWidth.W))
60
  val sqIdx = Output(new SqPtr)
L
LinJiawei 已提交
61
}