DP sram替代reg方案,未测试
This commit is contained in:
@@ -42,26 +42,28 @@ class BackBoardMstBase extends Module{ //10M
|
||||
val lvdsMst = Module(new Lvds_Bus_Master)
|
||||
val mirrorDown = Module(new MirrorSRAMDown())
|
||||
val mirrorUp = Module(new MirrorSRAMUp())
|
||||
val mirrorReg = Module(new MirrorSRAMDP())
|
||||
|
||||
val statusCDRErr = RegInit( false.B )
|
||||
val statusCRCErr = RegInit( false.B )
|
||||
val statusLinkErr = RegInit( false.B )
|
||||
val statusSynch = RegInit( false.B )
|
||||
val statusInit = RegInit( false.B )
|
||||
mirrorReg.io.addrB := DontCare
|
||||
mirrorReg.io.datawB := DontCare
|
||||
mirrorReg.io.enwB := false.B
|
||||
|
||||
// val statusCDRErr = RegInit( false.B )
|
||||
// val statusCRCErr = RegInit( false.B )
|
||||
// val statusLinkErr = RegInit( false.B )
|
||||
// val statusSynch = RegInit( false.B )
|
||||
// val statusInit = RegInit( false.B )
|
||||
|
||||
val ctrlTransmit = RegInit( false.B )
|
||||
val ctrlCDRErr = RegInit( false.B )
|
||||
val ctrlCRCErr = RegInit( false.B )
|
||||
val ctrlLinkErr = RegInit( false.B )
|
||||
val ctrlSynch = RegInit( false.B )
|
||||
val ctrlInit = RegInit( false.B )
|
||||
|
||||
val ctrlFun = RegInit(0.U(8.W))
|
||||
|
||||
val slvNum = RegInit(0.U(6.W))
|
||||
val slvOffLine = RegInit(0.U(6.W))
|
||||
val linkNum = RegInit(0.U(7.W))
|
||||
val testReg = RegInit("haa55".U(16.W))
|
||||
// val slvOffLine = RegInit(0.U(6.W))
|
||||
// val linkNum = RegInit(0.U(7.W))
|
||||
// val testReg = RegInit("haa55".U(16.W))
|
||||
val interrupt = RegInit(false.B); io.interrupt := interrupt
|
||||
val slaveDataLength = RegInit(((8/8)*32-1).U(8.W))
|
||||
|
||||
@@ -85,6 +87,8 @@ class BackBoardMstBase extends Module{ //10M
|
||||
mirrorUp.io.clockw := io.oser_pclk.asBool
|
||||
mirrorUp.io.clockr := io.ides_pclk.asBool //100M
|
||||
|
||||
mirrorReg.io.clockA := io.ides_pclk.asBool //100M
|
||||
mirrorReg.io.clockB := io.oser_pclk.asBool //10M
|
||||
|
||||
when(interrupt === true.B){
|
||||
interrupt := false.B
|
||||
@@ -106,60 +110,61 @@ trait BackBoardMstFSMC{ this: BackBoardMstBase =>
|
||||
withClockAndReset( io.ides_pclk.asClock, reset ){//100M
|
||||
|
||||
|
||||
// val fsmcCSSync = ShiftRegisters( ~io.FSMC.csn, 3, false.B, true.B )
|
||||
// val fsmcRDSync = ShiftRegisters( ~io.FSMC.rdn, 3, false.B, true.B )
|
||||
// val fsmcWRSync = ShiftRegisters( ~io.FSMC.wrn, 3, false.B, true.B )
|
||||
// val fsmcADVSync = ShiftRegisters( ~io.FSMC.advn, 3, false.B, true.B )
|
||||
|
||||
io.FSMC.ADOEn := ~io.FSMC.rdn & ~io.FSMC.csn & io.FSMC.advn //fsmcRDSync(0) & fsmcCSSync(0) & ~fsmcADVSync(0)
|
||||
io.FSMC.ADOEn := ~io.FSMC.rdn & ~io.FSMC.csn & io.FSMC.advn
|
||||
|
||||
val latchAddr = RegEnable( io.FSMC.ADIn, ~io.FSMC.advn & ~io.FSMC.csn)//(~fsmcADVSync(1) & fsmcADVSync(0) & fsmcCSSync(0)) | (fsmcADVSync(0) & ~fsmcCSSync(1) & fsmcCSSync(0)) )
|
||||
val latchAddr = RegEnable( io.FSMC.ADIn, ~io.FSMC.advn & ~io.FSMC.csn)
|
||||
|
||||
val isAccessSRAM = ~latchAddr.extract(10)
|
||||
val isAccessReg = latchAddr.extract(10)
|
||||
val activeAddr = latchAddr(9,0)
|
||||
val regOut = Wire(UInt(16.W))
|
||||
// val regOut = Wire(UInt(16.W))
|
||||
|
||||
|
||||
|
||||
|
||||
mirrorDown.io.enw := isAccessSRAM & ~io.FSMC.csn & ~io.FSMC.wrn //isAccessSRAM & fsmcCSSync(0) & ~fsmcWRSync(1) & fsmcWRSync(0)
|
||||
mirrorDown.io.enw := isAccessSRAM & ~io.FSMC.csn & ~io.FSMC.wrn
|
||||
mirrorDown.io.addrw := activeAddr
|
||||
mirrorDown.io.dataw := io.FSMC.ADIn
|
||||
|
||||
mirrorUp.io.enr := isAccessSRAM & ~io.FSMC.csn & ~io.FSMC.rdn//isAccessSRAM & fsmcCSSync(0) & ~fsmcRDSync(1) & fsmcRDSync(0)
|
||||
mirrorUp.io.enr := isAccessSRAM & ~io.FSMC.csn & ~io.FSMC.rdn
|
||||
mirrorUp.io.addrr := activeAddr
|
||||
|
||||
io.FSMC.ADOut := Mux( isAccessReg, regOut, mirrorUp.io.datar)
|
||||
mirrorReg.io.addrA := activeAddr
|
||||
mirrorReg.io.datawA := io.FSMC.ADIn
|
||||
mirrorReg.io.enwA := isAccessReg & ~io.FSMC.csn & ~io.FSMC.wrn
|
||||
// mirrorReg.io.enrA := isAccessReg & ~io.FSMC.csn & ~io.FSMC.rdn
|
||||
|
||||
regOut := Mux1H(Seq(
|
||||
( activeAddr === 0.U) ->
|
||||
Cat(
|
||||
statusCDRErr ,
|
||||
statusCRCErr ,
|
||||
statusLinkErr,
|
||||
statusSynch ,
|
||||
statusInit
|
||||
),
|
||||
( activeAddr === 1.U) -> ctrlFun,
|
||||
( activeAddr === 2.U) -> slvNum,
|
||||
( activeAddr === 3.U) -> slvOffLine,
|
||||
( activeAddr === 4.U) -> testReg,
|
||||
( activeAddr === 5.U) -> linkNum,
|
||||
( activeAddr === 6.U) -> slaveDataLength,
|
||||
))
|
||||
io.FSMC.ADOut := Mux( isAccessReg, mirrorReg.io.datarA, mirrorUp.io.datar)
|
||||
|
||||
// regOut := Mux1H(Seq(
|
||||
// ( activeAddr === 0.U) ->
|
||||
// Cat(
|
||||
// statusCDRErr ,
|
||||
// statusCRCErr ,
|
||||
// statusLinkErr,
|
||||
// statusSynch ,
|
||||
// statusInit
|
||||
// ),
|
||||
// ( activeAddr === 1.U) -> ctrlFun,
|
||||
// ( activeAddr === 2.U) -> slvNum,
|
||||
// ( activeAddr === 3.U) -> slvOffLine,
|
||||
// ( activeAddr === 4.U) -> testReg,
|
||||
// ( activeAddr === 5.U) -> linkNum,
|
||||
// ( activeAddr === 6.U) -> slaveDataLength,
|
||||
// ))
|
||||
|
||||
|
||||
|
||||
when( isAccessReg & ~io.FSMC.csn & ~io.FSMC.wrn ){ //fsmcCSSync(0) & ~fsmcWRSync(1) & fsmcWRSync(0) ){ //~fsmcCSWRSync(2) & fsmcCSWRSync(1) ){
|
||||
isReqValid := true.B
|
||||
wrRegAddr := activeAddr
|
||||
wrRegData := io.FSMC.ADIn
|
||||
}
|
||||
// when( isAccessReg & ~io.FSMC.csn & ~io.FSMC.wrn ){
|
||||
// isReqValid := true.B
|
||||
// wrRegAddr := activeAddr
|
||||
// wrRegData := io.FSMC.ADIn
|
||||
// }
|
||||
|
||||
when( isReqValid & isAckReady ){
|
||||
isReqValid := false.B
|
||||
}
|
||||
// when( isReqValid & isAckReady ){
|
||||
// isReqValid := false.B
|
||||
// }
|
||||
|
||||
|
||||
|
||||
@@ -167,93 +172,71 @@ trait BackBoardMstFSMC{ this: BackBoardMstBase =>
|
||||
|
||||
//10M
|
||||
when(~RegNext( io.testIO, false.B ) & io.testIO){
|
||||
when( ctrlFun === 0.U ){
|
||||
statusInit := false.B
|
||||
|
||||
mirrorReg.io.addrB := 1.U
|
||||
mirrorReg.io.datawB := DontCare
|
||||
mirrorReg.io.enwB := false.B
|
||||
|
||||
when( mirrorReg.io.datarB === 0.U ){
|
||||
ctrlInit := true.B
|
||||
}
|
||||
|
||||
when( ctrlFun === 1.U ){
|
||||
statusSynch := false.B
|
||||
when( mirrorReg.io.datarB === 1.U ){
|
||||
|
||||
ctrlSynch := true.B
|
||||
}
|
||||
|
||||
when( ctrlFun === 5.U ){
|
||||
when( mirrorReg.io.datarB === 5.U ){
|
||||
ctrlTransmit := true.B
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
when( isAckReady ){
|
||||
isAckReady := false.B
|
||||
}
|
||||
|
||||
when( isReqValid ){
|
||||
isAckReady := true.B
|
||||
|
||||
when( wrRegAddr === 0.U ){
|
||||
when( wrRegData.extract(4) ){
|
||||
statusCDRErr := false.B
|
||||
}
|
||||
when( wrRegData.extract(3) ){
|
||||
statusCRCErr := false.B
|
||||
}
|
||||
when( wrRegData.extract(2) ){
|
||||
statusLinkErr := false.B
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
when( wrRegAddr === 1.U ){
|
||||
ctrlFun := wrRegData
|
||||
}
|
||||
// when( isAckReady ){
|
||||
// isAckReady := false.B
|
||||
// }
|
||||
|
||||
when( wrRegAddr === 2.U ){
|
||||
slvNum := wrRegData
|
||||
}
|
||||
// when( isReqValid ){
|
||||
// isAckReady := true.B
|
||||
|
||||
when( wrRegAddr === 4.U ){
|
||||
testReg := wrRegData
|
||||
}
|
||||
// when( wrRegAddr === 0.U ){
|
||||
// when( wrRegData.extract(4) ){
|
||||
// statusCDRErr := false.B
|
||||
// }
|
||||
// when( wrRegData.extract(3) ){
|
||||
// statusCRCErr := false.B
|
||||
// }
|
||||
// when( wrRegData.extract(2) ){
|
||||
// statusLinkErr := false.B
|
||||
// }
|
||||
// }
|
||||
|
||||
when( wrRegAddr === 6.U ){
|
||||
slaveDataLength := wrRegData
|
||||
}
|
||||
|
||||
}
|
||||
// when( wrRegAddr === 1.U ){
|
||||
// ctrlFun := wrRegData
|
||||
// }
|
||||
|
||||
// when( wrRegAddr === 2.U ){
|
||||
// slvNum := wrRegData
|
||||
// }
|
||||
|
||||
// when( wrRegAddr === 4.U ){
|
||||
// testReg := wrRegData
|
||||
// }
|
||||
|
||||
// when( wrRegAddr === 6.U ){
|
||||
// slaveDataLength := wrRegData
|
||||
// }
|
||||
|
||||
// }
|
||||
|
||||
|
||||
}
|
||||
|
||||
trait BackBoardMstSim{ this: BackBoardMstLVDSBase =>
|
||||
io.FSMC.ADOut := DontCare
|
||||
io.FSMC.ADOEn := DontCare
|
||||
|
||||
val ( powerUpCnt, isPowerUpTimeout ) = Counter(Range( 0,5200), ~ctrlInit & ~statusInit, false.B)
|
||||
when( powerUpCnt === 500.U ){
|
||||
ctrlInit := true.B
|
||||
}
|
||||
|
||||
val ( _, isTransmitTimeout ) = Counter(Range( 0,520), statusInit, false.B)
|
||||
when(isTransmitTimeout){
|
||||
ctrlTransmit := true.B
|
||||
}
|
||||
|
||||
|
||||
mirrorDown.io.enw := true.B
|
||||
mirrorDown.io.addrw := powerUpCnt
|
||||
mirrorDown.io.dataw := "h5555".U
|
||||
|
||||
|
||||
mirrorUp.io.enr := false.B
|
||||
mirrorUp.io.addrr := 0.U
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
abstract class BackBoardMstLVDSBase extends BackBoardMstBase
|
||||
with BackBoardMstFSMC
|
||||
// with BackBoardMstSim
|
||||
{
|
||||
|
||||
|
||||
@@ -268,6 +251,8 @@ with BackBoardMstFSMC
|
||||
lvdsMst.io.tx_start := tx_start
|
||||
|
||||
val stateCur = RegInit(15.U(4.W))
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -280,51 +265,80 @@ trait BackBoardMstLVDSInit{ this: BackBoardMstLVDSBase =>
|
||||
when( isInitStart ){
|
||||
|
||||
stateCur := 0.U
|
||||
|
||||
frame_info_update_en := false.B
|
||||
slave_type_num := 0.U
|
||||
|
||||
tx_start := false.B
|
||||
|
||||
} .elsewhen( stateCur === 0.U ){
|
||||
} .elsewhen( stateCur === 0.U ){ //statusInit
|
||||
stateCur := 1.U
|
||||
|
||||
mirrorReg.io.addrB := 7.U
|
||||
mirrorReg.io.datawB := 0.U
|
||||
mirrorReg.io.enwB := true.B
|
||||
} .elsewhen( stateCur === 1.U ){
|
||||
stateCur := 2.U
|
||||
|
||||
mirrorReg.io.addrB := 2.U
|
||||
slvNum := mirrorReg.io.datarB
|
||||
} .elsewhen( stateCur === 2.U ){
|
||||
stateCur := 3.U
|
||||
|
||||
mirrorReg.io.addrB := 6.U
|
||||
slaveDataLength := mirrorReg.io.datarB
|
||||
}
|
||||
.elsewhen( stateCur === 3.U ){
|
||||
stateCur := 4.U
|
||||
|
||||
frame_info_update_en := true.B
|
||||
slave_type_num := Cat( "b00".U(2.W), slvNum )
|
||||
slaveDataLength := slaveDataLength
|
||||
|
||||
tx_start := false.B
|
||||
} .elsewhen( stateCur === 1.U ){ // tx start
|
||||
stateCur := 2.U
|
||||
} .elsewhen( stateCur === 4.U ){ // tx start
|
||||
stateCur := 5.U
|
||||
timeoutCnt := 0.U
|
||||
|
||||
frame_info_update_en := false.B
|
||||
tx_start := true.B
|
||||
|
||||
} .elsewhen( stateCur === 2.U ){
|
||||
|
||||
} .elsewhen( stateCur === 5.U ){
|
||||
tx_start := false.B
|
||||
timeoutCnt := timeoutCnt + 1.U
|
||||
|
||||
when( lvdsMst.io.slave_link_num_valid ){
|
||||
linkNum := lvdsMst.io.slave_link_num
|
||||
stateCur := 3.U
|
||||
statusInit := true.B
|
||||
//linkNum
|
||||
mirrorReg.io.addrB := 5.U
|
||||
mirrorReg.io.datawB := lvdsMst.io.slave_link_num
|
||||
mirrorReg.io.enwB := true.B
|
||||
|
||||
|
||||
stateCur := 6.U
|
||||
ctrlInit := false.B
|
||||
interrupt := true.B
|
||||
}
|
||||
|
||||
when( timeoutCnt === 6000.U ){
|
||||
linkNum := 0.U
|
||||
stateCur := 3.U
|
||||
statusInit := true.B
|
||||
stateCur := 6.U
|
||||
|
||||
//linkNum
|
||||
mirrorReg.io.addrB := 5.U
|
||||
mirrorReg.io.datawB := 0.U
|
||||
mirrorReg.io.enwB := true.B
|
||||
|
||||
ctrlInit := false.B
|
||||
interrupt := true.B
|
||||
}
|
||||
|
||||
|
||||
|
||||
} .elsewhen( stateCur === 3.U ){
|
||||
} .elsewhen( stateCur === 6.U ){ //statusInit
|
||||
stateCur := 7.U
|
||||
|
||||
mirrorReg.io.addrB := 7.U
|
||||
mirrorReg.io.datawB := 1.U
|
||||
mirrorReg.io.enwB := true.B
|
||||
|
||||
} .elsewhen( stateCur === 7.U ){
|
||||
|
||||
}
|
||||
}
|
||||
@@ -339,35 +353,55 @@ trait BackBoardMstLVDSSync{ this: BackBoardMstLVDSBase =>
|
||||
frame_info_update_en := false.B
|
||||
slave_type_num := 0.U
|
||||
tx_start := false.B
|
||||
}.elsewhen( stateCur === 0.U ){
|
||||
|
||||
} .elsewhen( stateCur === 0.U ){ //statusSynch
|
||||
stateCur := 1.U
|
||||
|
||||
mirrorReg.io.addrB := 8.U
|
||||
mirrorReg.io.datawB := 0.U
|
||||
mirrorReg.io.enwB := true.B
|
||||
} .elsewhen( stateCur === 1.U ){ //slvnum
|
||||
stateCur := 2.U
|
||||
|
||||
mirrorReg.io.addrB := 2.U
|
||||
slvNum := mirrorReg.io.datarB
|
||||
} .elsewhen( stateCur === 2.U ){ //slaveDataLength
|
||||
stateCur := 3.U
|
||||
|
||||
mirrorReg.io.addrB := 6.U
|
||||
slaveDataLength := mirrorReg.io.datarB
|
||||
} .elsewhen( stateCur === 3.U ){
|
||||
stateCur := 4.U
|
||||
|
||||
frame_info_update_en := true.B
|
||||
slave_type_num := Cat( "b01".U(2.W), slvNum )
|
||||
slaveDataLength := slaveDataLength
|
||||
|
||||
tx_start := false.B
|
||||
} .elsewhen( stateCur === 1.U ){ // tx start
|
||||
stateCur := 2.U
|
||||
} .elsewhen( stateCur === 4.U ){ // tx start
|
||||
stateCur := 5.U
|
||||
|
||||
frame_info_update_en := false.B
|
||||
tx_start := true.B
|
||||
|
||||
} .elsewhen( stateCur === 2.U ){
|
||||
} .elsewhen( stateCur === 5.U ){
|
||||
|
||||
tx_start := false.B
|
||||
|
||||
when( RegNext(lvdsMst.io.downstream_busy, false.B) & ~lvdsMst.io.downstream_busy ){
|
||||
stateCur := 3.U
|
||||
statusSynch := true.B
|
||||
stateCur := 6.U
|
||||
ctrlSynch := false.B
|
||||
interrupt := true.B
|
||||
}
|
||||
|
||||
} .elsewhen( stateCur === 3.U ){
|
||||
} .elsewhen( stateCur === 6.U ){
|
||||
stateCur := 7.U
|
||||
mirrorReg.io.addrB := 8.U
|
||||
mirrorReg.io.datawB := 1.U
|
||||
mirrorReg.io.enwB := true.B
|
||||
} .elsewhen( stateCur === 7.U ){
|
||||
|
||||
}
|
||||
.otherwise{
|
||||
} .otherwise{
|
||||
|
||||
}
|
||||
}
|
||||
@@ -389,35 +423,57 @@ trait BackBoardMstLVDSTransmit{ this: BackBoardMstLVDSBase =>
|
||||
tx_start := false.B
|
||||
|
||||
|
||||
} .elsewhen( stateCur === 0.U ){ //setting
|
||||
} .elsewhen( stateCur === 0.U ){ //statusTransmit
|
||||
stateCur := 1.U
|
||||
|
||||
mirrorReg.io.addrB := 9.U
|
||||
mirrorReg.io.datawB := 0.U
|
||||
mirrorReg.io.enwB := true.B
|
||||
} .elsewhen( stateCur === 1.U ){ //slvnum
|
||||
stateCur := 2.U
|
||||
|
||||
mirrorReg.io.addrB := 2.U
|
||||
slvNum := mirrorReg.io.datarB
|
||||
} .elsewhen( stateCur === 2.U ){ //slaveDataLength
|
||||
stateCur := 3.U
|
||||
|
||||
mirrorReg.io.addrB := 6.U
|
||||
slaveDataLength := mirrorReg.io.datarB
|
||||
} .elsewhen( stateCur === 3.U ){ //setting
|
||||
stateCur := 4.U
|
||||
|
||||
frame_info_update_en := true.B
|
||||
slave_type_num := Cat( "b10".U(2.W), slvNum )
|
||||
slaveDataLength := slaveDataLength
|
||||
|
||||
tx_start := false.B
|
||||
} .elsewhen( stateCur === 1.U ){ // tx start
|
||||
stateCur := 2.U
|
||||
} .elsewhen( stateCur === 4.U ){ // tx start
|
||||
stateCur := 5.U
|
||||
|
||||
frame_info_update_en := false.B
|
||||
tx_start := true.B
|
||||
|
||||
} .elsewhen( stateCur === 2.U ){ //waiting for busy drop
|
||||
} .elsewhen( stateCur === 5.U ){ //waiting for busy drop
|
||||
|
||||
tx_start := false.B
|
||||
|
||||
when( RegNext(lvdsMst.io.downstream_busy, false.B) & ~lvdsMst.io.downstream_busy ){
|
||||
stateCur := 3.U
|
||||
stateCur := 6.U
|
||||
}
|
||||
|
||||
} .elsewhen( stateCur === 3.U ){
|
||||
} .elsewhen( stateCur === 6.U ){
|
||||
when( lvdsMst.io.upstream_crc_valid ){
|
||||
stateCur := 4.U
|
||||
stateCur := 7.U
|
||||
ctrlTransmit := false.B
|
||||
interrupt := true.B
|
||||
}
|
||||
|
||||
} .elsewhen( stateCur === 7.U ){ //statusTransmit
|
||||
stateCur := 8.U
|
||||
mirrorReg.io.addrB := 9.U
|
||||
mirrorReg.io.datawB := 1.U
|
||||
mirrorReg.io.enwB := true.B
|
||||
} .elsewhen( stateCur === 8.U ){
|
||||
} .otherwise{
|
||||
|
||||
}
|
||||
@@ -430,7 +486,7 @@ trait BackBoardMstLVDSTransmit{ this: BackBoardMstLVDSBase =>
|
||||
when( isTransStart ){
|
||||
addrw := 0.U
|
||||
} .elsewhen( lvdsMst.io.rx_data_valid & ctrlTransmit){
|
||||
assert( (stateCur === 2.U) || (stateCur === 3.U) )
|
||||
assert( (stateCur === 5.U) || (stateCur === 6.U) )
|
||||
addrw := addrw + 1.U
|
||||
}
|
||||
|
||||
@@ -440,7 +496,7 @@ trait BackBoardMstLVDSTransmit{ this: BackBoardMstLVDSBase =>
|
||||
addrr := addrr + 1.U
|
||||
}
|
||||
|
||||
mirrorDown.io.enr := (stateCur === 1.U || stateCur === 2.U) & ctrlTransmit
|
||||
mirrorDown.io.enr := (stateCur === 4.U || stateCur === 5.U) & ctrlTransmit
|
||||
lvdsMst.io.tx_data_in := mirrorDown.io.datar
|
||||
mirrorDown.io.addrr := addrr
|
||||
|
||||
@@ -452,18 +508,35 @@ trait BackBoardMstLVDSTransmit{ this: BackBoardMstLVDSBase =>
|
||||
|
||||
trait BackBoardMstLVDSError{ this: BackBoardMstLVDSBase =>
|
||||
when( lvdsMst.io.closed_loop_err ){
|
||||
slvOffLine := lvdsMst.io.link_err_location(5,0)
|
||||
statusLinkErr := true.B
|
||||
|
||||
//slvOffLine := lvdsMst.io.link_err_location(5,0)
|
||||
mirrorReg.io.addrB := 3.U
|
||||
mirrorReg.io.datawB := lvdsMst.io.link_err_location(5,0)
|
||||
mirrorReg.io.enwB := true.B
|
||||
|
||||
} .elsewhen( RegNext(lvdsMst.io.closed_loop_err, false.B)){
|
||||
|
||||
//statusLinkErr := true.B
|
||||
mirrorReg.io.addrB := 10.U
|
||||
mirrorReg.io.datawB := 1.U
|
||||
mirrorReg.io.enwB := true.B
|
||||
|
||||
interrupt := true.B
|
||||
}
|
||||
|
||||
when( lvdsMst.io.upstream_cdr_err ){
|
||||
statusCDRErr := true.B
|
||||
// statusCDRErr := true.B
|
||||
mirrorReg.io.addrB := 11.U
|
||||
mirrorReg.io.datawB := 1.U
|
||||
mirrorReg.io.enwB := true.B
|
||||
interrupt := true.B
|
||||
}
|
||||
|
||||
when( lvdsMst.io.upstream_crc_valid & lvdsMst.io.upstream_crc_err ){
|
||||
statusCRCErr := true.B
|
||||
// statusCRCErr := true.B
|
||||
mirrorReg.io.addrB := 12.U
|
||||
mirrorReg.io.datawB := 1.U
|
||||
mirrorReg.io.enwB := true.B
|
||||
interrupt := true.B
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user