From 370e6b119cdcd82b9ec310d1e0b201a3796725f7 Mon Sep 17 00:00:00 2001 From: Ruige Lee Date: Mon, 26 May 2025 11:52:40 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=84=E7=90=86=E6=96=AD=E8=A8=80=E5=8F=8A?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E6=9C=BA=E5=8D=A1=E4=BD=8F=E9=97=AE=E9=A2=98?= =?UTF-8?q?=EF=BC=8C=E4=BB=8E=E8=BF=99=E4=B8=AA=E7=89=88=E6=9C=AC=E5=BC=80?= =?UTF-8?q?=E5=A7=8B=EF=BC=8C=E6=89=80=E6=9C=89=E6=96=AD=E8=A8=80=E9=94=99?= =?UTF-8?q?=E8=AF=AF=E9=83=BD=E5=BA=94=E8=AF=A5=E5=A4=84=E7=90=86=EF=BC=9B?= =?UTF-8?q?recParser=E7=9A=84=E9=94=99=E8=AF=AF=E7=8A=B6=E6=80=81=E4=BC=9A?= =?UTF-8?q?=E8=A7=A6=E5=8F=915=E3=80=816=E5=8F=B7=E4=B8=8D=E5=8F=AF?= =?UTF-8?q?=E5=B1=8F=E8=94=BD=E4=B8=AD=E6=96=AD=EF=BC=8C=E8=BD=AF=E4=BB=B6?= =?UTF-8?q?=E9=9C=80=E8=A6=81=E6=B8=85=E4=B8=AD=E6=96=AD=E7=84=B6=E5=90=8E?= =?UTF-8?q?recParser=E6=81=A2=E5=A4=8D=E7=8A=B6=E6=80=81=EF=BC=8Ccdrout?= =?UTF-8?q?=E6=BA=A2=E5=87=BA=E9=97=AE=E9=A2=98=E4=B8=8D=E5=86=8D=E8=A7=A6?= =?UTF-8?q?=E5=8F=91=E4=B8=AD=E6=96=AD=EF=BC=8C=E8=AF=A5=E6=AC=A1=E4=BC=A0?= =?UTF-8?q?=E8=BE=93=E5=B0=86=E4=BC=9A=E5=8F=91=E7=94=9F=E8=87=B3=E5=B0=91?= =?UTF-8?q?=E4=B8=A4=E6=AC=A1=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/scala/backBoard/ebus/CDROut.scala | 5 +++- src/main/scala/backBoard/shin/Interface.scala | 26 ++++++++++++++----- src/main/scala/backBoard/shin/ShinTop.scala | 9 +++++++ .../scala/backBoard/shin/SlaveParser.scala | 11 +++++++- .../scala/backBoard/shin/SlaveRecParser.scala | 9 +++++-- .../scala/backBoard/shin/SlaveSendGen.scala | 10 +++---- 6 files changed, 55 insertions(+), 15 deletions(-) diff --git a/src/main/scala/backBoard/ebus/CDROut.scala b/src/main/scala/backBoard/ebus/CDROut.scala index 3a0ed52..53ccdf0 100644 --- a/src/main/scala/backBoard/ebus/CDROut.scala +++ b/src/main/scala/backBoard/ebus/CDROut.scala @@ -56,7 +56,10 @@ class CDROut extends Module{ (stateCurr === STATE_PAYLOAD) ) - assert( ~(~io.axis.valid & io.axis.ready) ) + // assert( ~(~io.axis.valid & io.axis.ready) ) + when( ~io.axis.valid & io.axis.ready ){ + printf( "Error, CDROut axis overflow!\n" ) + } diff --git a/src/main/scala/backBoard/shin/Interface.scala b/src/main/scala/backBoard/shin/Interface.scala index d20df1b..2346c35 100644 --- a/src/main/scala/backBoard/shin/Interface.scala +++ b/src/main/scala/backBoard/shin/Interface.scala @@ -172,6 +172,8 @@ class InterfaceIO extends Bundle{ val isSoftReset = Output(Bool()) val intMstTrig = Input(Vec(2, Bool())) + val intHWTrig = Input(Vec(2, Bool())) + val intHWClr = Output(Vec(2, Bool())) val intSlvTrig = Input(Vec(8, Bool())) val interrupt = Output(Bool()) @@ -746,16 +748,15 @@ trait InterfaceSystem{ this: InterfaceBase => val intStatus = for( _ <- 0 until 16 ) yield { RegInit(false.B) } cReg.intStatus := Cat( intStatus.reverse ) - val intMstTrig = Input(Vec(2, Bool())) - val intSlvTrig = Input(Vec(8, Bool())) + //主站发送完成 - when( io.intMstTrig(0) ){ + when( io.intMstTrig(0) & cReg.intEnable(0) ){ intStatus(0) := true.B } //主站接收完成 - when( io.intMstTrig(1) ){ + when( io.intMstTrig(1) & cReg.intEnable(1) ){ intStatus(1) := true.B } @@ -764,16 +765,26 @@ trait InterfaceSystem{ this: InterfaceBase => //主站接收看门狗溢出 + //下行接收硬件错误 + when( io.intHWTrig(0) ){ + intStatus(5) := true.B + } + + when( io.intHWTrig(1) ){ + intStatus(6) := true.B + } + //上行接收硬件错误 + //从站SM请求 for( i <- 0 until 8 ){ - when( io.intSlvTrig(i) ){ + when( io.intSlvTrig(i) & cReg.intEnable(8+i)){ intStatus(8+i) := true.B } } - + //写清中断 for( i <- 0 until 8 ){ when( dataw.extract(i) & isEnW & addrw === "h74".U ){ intStatus(i) := false.B @@ -783,6 +794,9 @@ trait InterfaceSystem{ this: InterfaceBase => } } + io.intHWClr(0) := dataw.extract(5) & isEnW & addrw === "h74".U + io.intHWClr(1) := dataw.extract(6) & isEnW & addrw === "h74".U + io.interrupt := intStatus.reduce(_|_) } diff --git a/src/main/scala/backBoard/shin/ShinTop.scala b/src/main/scala/backBoard/shin/ShinTop.scala index 160959f..56ca7df 100644 --- a/src/main/scala/backBoard/shin/ShinTop.scala +++ b/src/main/scala/backBoard/shin/ShinTop.scala @@ -253,6 +253,9 @@ abstract class ShinTopBase extends Module{ interface.io.intSlvTrig(6) := false.B interface.io.intSlvTrig(7) := false.B + interface.io.intHWTrig(0) := false.B + interface.io.intHWTrig(1) := false.B + } } @@ -362,8 +365,14 @@ trait ShinTopSlave{ this: ShinTopBase => interface.io.intSlvTrig(6) := slaveParser.io.dSMenq(3) interface.io.intSlvTrig(7) := slaveParser.io.uSMdeq(3) + interface.io.intHWTrig(0) := slaveParser.io.intHWTrig(0) + interface.io.intHWTrig(1) := slaveParser.io.intHWTrig(1) + } + slaveParser.io.intHWClr(0) := interface.io.intHWTrig(0) + slaveParser.io.intHWClr(1) := interface.io.intHWTrig(1) + interface.io.lvds <> slaveParser.io.lvds interface.io.localDevIndex := slaveParser.io.localDevIndex diff --git a/src/main/scala/backBoard/shin/SlaveParser.scala b/src/main/scala/backBoard/shin/SlaveParser.scala index 530a73c..987bcb7 100644 --- a/src/main/scala/backBoard/shin/SlaveParser.scala +++ b/src/main/scala/backBoard/shin/SlaveParser.scala @@ -67,6 +67,9 @@ class SlaveParserIO extends Bundle{ val cReg = Input(new CommonRegisterBundle) val lvds = new RegAccessInterfaceIO + + val intHWTrig = Output(Vec(2, Bool())) + val intHWClr = Input (Vec(2, Bool())) } abstract class SlaveParserBase extends Module{ @@ -766,7 +769,13 @@ class SlaveParser extends SlaveParserBase with SlaveParserIndex with SlaveParserRW with SlaveParserSync -with SlaveParserProbe +with SlaveParserProbe{ + io.intHWTrig(0) := downRecParser.io.isError + io.intHWTrig(1) := upRecParser.io.isError + + downRecParser.io.resp := io.intHWClr(0) + upRecParser.io.resp := io.intHWClr(1) +} diff --git a/src/main/scala/backBoard/shin/SlaveRecParser.scala b/src/main/scala/backBoard/shin/SlaveRecParser.scala index dfe6e47..fceea55 100644 --- a/src/main/scala/backBoard/shin/SlaveRecParser.scala +++ b/src/main/scala/backBoard/shin/SlaveRecParser.scala @@ -112,8 +112,13 @@ class SlaveRecParser extends Module{ io.data.valid := io.rec.fire & stateCurr === STATE_PAYLOAD_DATA io.data.bits := io.rec.bits.tdata - assert( ~(io.data.valid & ~io.data.ready), "Assert Failed! Receive Data was rejected by fifo!" ) + // assert( ~(io.data.valid & ~io.data.ready), "Assert Failed! Receive Data was rejected by fifo!" ) + val isDataRejErr = io.data.valid & ~io.data.ready + + when( (io.data.valid & ~io.data.ready) ){ + printf( "Error! Receive Data was rejected by fifo!\n") + } when( io.rec.fire ){ @@ -171,7 +176,7 @@ class SlaveRecParser extends Module{ Mux( lengthCnt === (8-1).U, STATE_PAYLOAD_DATA, STATE_SUBMSG_HEADER ) ), STATE_SUBMSG_HEADER), - ( stateCurr === STATE_PAYLOAD_DATA ) -> Mux( io.rec.fire, Mux(io.rec.bits.tlast, STATE_ERROR, + ( stateCurr === STATE_PAYLOAD_DATA ) -> Mux( io.rec.fire, Mux(io.rec.bits.tlast | isDataRejErr, STATE_ERROR, Mux( lengthCnt === ( subMsgHeader.length - 1.U), Mux( frameLenCnt === frameHeader.frameLenAim - 1.U, STATE_CRC, STATE_SUBMSG_HEADER ), STATE_PAYLOAD_DATA ) diff --git a/src/main/scala/backBoard/shin/SlaveSendGen.scala b/src/main/scala/backBoard/shin/SlaveSendGen.scala index bb618cd..65fc363 100644 --- a/src/main/scala/backBoard/shin/SlaveSendGen.scala +++ b/src/main/scala/backBoard/shin/SlaveSendGen.scala @@ -40,14 +40,14 @@ class SlaveSendGen extends Module{ val STATE_SUBMSG_HEADER = 2.U val STATE_SUBMSG_DATA = 3.U val STATE_CRC = 4.U //CRC校验 - val STATE_ERROR = 5.U + //val STATE_ERROR = 5.U val STATE_WAIT = 6.U val stateNext = Wire(UInt(3.W)) val stateCurr = RegNext(stateNext, STATE_IDLE); io.stateCurr := stateCurr - io.isError := stateCurr === STATE_ERROR + io.isError := false.B//stateCurr === STATE_ERROR crc.io.isEnable := io.send.fire & ( stateCurr === STATE_FRAME_HEADER | @@ -128,7 +128,7 @@ class SlaveSendGen extends Module{ STATE_SUBMSG_DATA ), STATE_SUBMSG_DATA ), (stateCurr === STATE_CRC) -> Mux( io.send.fire, Mux( lengthCnt === (4-1).U, STATE_IDLE, STATE_CRC ), STATE_CRC), - (stateCurr === STATE_ERROR) -> Mux( io.send.fire, STATE_IDLE, STATE_ERROR), + // (stateCurr === STATE_ERROR) -> Mux( io.send.fire, STATE_IDLE, STATE_ERROR), (stateCurr === STATE_WAIT) -> Mux( io.subMsgReq.valid, STATE_SUBMSG_HEADER, STATE_WAIT), )) @@ -191,8 +191,8 @@ class SlaveSendGen extends Module{ (stateCurr === STATE_CRC) -> tdata_crc, )) - io.send.bits.tuser := (stateCurr === STATE_ERROR & stateNext === STATE_IDLE) - io.send.bits.tlast := (stateCurr === STATE_CRC & stateNext === STATE_IDLE) || (stateCurr === STATE_ERROR & stateNext === STATE_IDLE) + io.send.bits.tuser := false.B//(stateCurr === STATE_ERROR & stateNext === STATE_IDLE) + io.send.bits.tlast := (stateCurr === STATE_CRC & stateNext === STATE_IDLE) //|| (stateCurr === STATE_ERROR & stateNext === STATE_IDLE)