diff --git a/src/main/scala/backBoard/shin/Interface.scala b/src/main/scala/backBoard/shin/Interface.scala index 7319745..54480c3 100644 --- a/src/main/scala/backBoard/shin/Interface.scala +++ b/src/main/scala/backBoard/shin/Interface.scala @@ -114,6 +114,7 @@ class MasterRegisterBundle extends Bundle{ val txSM = UInt(2.W) val rxSM = UInt(2.W) + val isRecCRCErr = UInt(4.W) val rplTimeStampTx = UInt(16.W) } @@ -264,6 +265,7 @@ abstract class InterfaceBase extends Module{ Seq( (addr === "h20".U & isMstMode) -> Cat(mReg.rxSM, mReg.txSM, 0.U(1.W) ), + (addr === "h22".U & isMstMode) -> mReg.isRecCRCErr, //(addr === "h21".U & isMstMode) -> mReg.txLength, (addr === "h24".U & isMstMode) -> mReg.rplTimeStampTx(7,0), @@ -635,6 +637,16 @@ trait InterfaceMCUop{ this: InterfaceBase => mReg.rxSM := RegEnable( dataw(4,3), 0.U(2.W), isEnW & addrw === "h20".U ) // mReg.txLength := Cat( RegEnable( dataw, 0.U, isEnW & addrw === "h22".U ), RegEnable( dataw, 0.U, isEnW & addrw === "h21".U ) ) + val isMstRecCRCErr = RegInit(0.U(4.W)) + mReg.isRecCRCErr := isMstRecCRCErr + when( isEnW & addrw === "h22".U(16.W) ){ + isMstRecCRCErr := 0.U + } .elsewhen( io.upRecStat.isCRCError & isMstMode ){ + isMstRecCRCErr := isMstRecCRCErr | (1.U << mReg.rxSM) + } + + + ( 0 until 128 ).map{ i => cReg.custom(i) := RegEnable( dataw, 0.U(8.W), isEnW & (addrw === ("h180".U(16.W) + i.U)) ) } diff --git a/src/main/scala/backBoard/shin/MasterParser.scala b/src/main/scala/backBoard/shin/MasterParser.scala index 4587998..7d1be5e 100644 --- a/src/main/scala/backBoard/shin/MasterParser.scala +++ b/src/main/scala/backBoard/shin/MasterParser.scala @@ -154,7 +154,7 @@ abstract class MasterParserBase extends Module{ io.rsp.valid := io.upIn.fire & io.upIn.bits.tlast - io.rsp.bits.isError := io.upIn.fire & io.upIn.bits.tlast & recCrcCheck =/= rxcrc.io.crc + io.rsp.bits.isError := io.upIn.fire & io.upIn.bits.tlast & (Cat( recCrcCheck(31,8), io.upIn.bits.tdata ) =/= rxcrc.io.crc) // io.rsp.bits.length := rxCnt + 1.U