first test

This commit is contained in:
RuigeLee
2023-07-28 15:38:46 +08:00
parent 85fe9175e6
commit 2048a4d286
6 changed files with 305 additions and 7 deletions

View File

@@ -13,7 +13,7 @@ class BackBoardSlvIO extends Bundle{
val upStreamRespdat = Output(Bool())
val downStreamRespdat = Output(Bool())
val refClk = Input( Vec(4, Bool()) )
val clk4 = Input( Bool() )
}
@@ -21,14 +21,14 @@ abstract class BackBoardSlvBase extends Module{
val io: BackBoardSlvIO = IO(new BackBoardSlvIO)
val upStreamReq = Module(new CDR4InBus)
val downStreamReq = Module(new CDR4InBus)
val upStreamReq = Module(new CDR4MultiIn)
val downStreamReq = Module(new CDR4MultiIn)
val upStreamResp = Module(new CDROutBus)
val downStreamResp = Module(new CDROutBus)
upStreamReq.io.refClk := io.refClk
downStreamReq.io.refClk := io.refClk
upStreamReq.io.clk4 := io.clk4
downStreamReq.io.clk4 := io.clk4
upStreamReq.io.dat := io.upStreamReqDat
downStreamReq.io.dat := io.downStreamReqDat
@@ -101,5 +101,5 @@ trait StatusControl{ this: BackBoardSlvBase =>
}
class BackBoardSlv extends BackBoardSlvBase with LocalRegisters
class BackBoardSlv extends BackBoardSlvBase with StatusControl with LocalRegisters

View File

@@ -0,0 +1,63 @@
package BACK
import chisel3._
import chisel3.util._
import freechips.rocketchip.util._
class CDR4MultiInIO() extends Bundle{
val dat = Input(Bool())
val clk4 = Input(Bool())
val latDat = Decoupled(new CDRData)
}
class CDR4MultiIn() extends Module{
val io: CDR4MultiInIO = IO(new CDR4MultiInIO())
val inBusToAsync = Wire( new AsyncBundle(new CDRData) )
withClockAndReset( io.clk4.asClock, reset ){
val latAValid = RegInit(false.B)
val latAInfo = Reg(new CDRData)
val shiftDat = RegInit( 0.U( ((1+6+8+32+16)*4+2).W ) )
val latAReady = Wire(Bool())
val transInfo = Wire(new CDRData)
transInfo :=
Cat(
( 0 until (6+8+32+16) ).map{ i => shiftDat( 4*(i+1) + 1 ) }
).asTypeOf(new CDRData)
when( latAValid & latAReady ){
shiftDat := 0.U
latAValid := false.B
} .elsewhen( shiftDat.extract(0) =/= 1.U ){
shiftDat := Cat(io.dat, shiftDat( ((1+6+8+32+16)*4+2)-1, 1) )
} .elsewhen( shiftDat.extract(0) === 1.U ){
latAValid := true.B
latAInfo := transInfo
}
val inBusASyncIO = Wire( new DecoupledIO(new CDRData) )
inBusASyncIO.valid := latAValid
inBusASyncIO.bits := latAInfo
latAReady := inBusASyncIO.ready
inBusToAsync <> ToAsyncBundle( inBusASyncIO, AsyncQueueParams(sync=2) )
}
io.latDat <> FromAsyncBundle( inBusToAsync, 2 )
}