From 5d5fce6747b45b472d7f867ca464366194a31202 Mon Sep 17 00:00:00 2001 From: RuigeLee Date: Wed, 23 Oct 2024 11:41:24 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B8=A6=E5=B8=83=E5=B1=80=E5=B8=83=E7=BA=BF?= =?UTF-8?q?=E7=AD=96=E7=95=A5=E5=8F=AF=E4=BB=A5=E9=80=9A=E8=BF=87=E6=97=B6?= =?UTF-8?q?=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/scala/backBoard/shin/ShinSlv.scala | 28 ++++++++++++++++++--- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/src/main/scala/backBoard/shin/ShinSlv.scala b/src/main/scala/backBoard/shin/ShinSlv.scala index 53266d5..96c4f50 100644 --- a/src/main/scala/backBoard/shin/ShinSlv.scala +++ b/src/main/scala/backBoard/shin/ShinSlv.scala @@ -283,7 +283,26 @@ trait ShinSlvPhyUpStreamRecv{ this: ShinSlvPhyDownStream => //--------------- when( (upRecvStateCurr === UpRecvStateOHead & upPendBuf.io.deq.fire) ){ - upOldHead := Cat( upOldHead.asUInt.tail(8), upPendBuf.io.deq.bits.tdata ).asTypeOf(new Header_Info_Bundle) + // upOldHead := Cat( upOldHead.asUInt.tail(8), upPendBuf.io.deq.bits.tdata ).asTypeOf(new Header_Info_Bundle) + + when( upRecvCnt === 1.U ) { + upOldHead.length := upPendBuf.io.deq.bits.tdata + } .elsewhen( upRecvCnt === 2.U ) { + upOldHead.length := Cat( upOldHead.length, upPendBuf.io.deq.bits.tdata(7,4) ) + upOldHead.operator := upPendBuf.io.deq.bits.tdata(3,0) + } .elsewhen( upRecvCnt === 3.U ){ + upOldHead.param(0) := upPendBuf.io.deq.bits.tdata + } .elsewhen( upRecvCnt === 4.U ){ + upOldHead.param(0) := Cat( upOldHead.param(0), upPendBuf.io.deq.bits.tdata ) + } .elsewhen( upRecvCnt === 5.U ){ + upOldHead.param(1) := upPendBuf.io.deq.bits.tdata + } .elsewhen( upRecvCnt === 6.U ){ + upOldHead.param(1) := Cat( upOldHead.param(1), upPendBuf.io.deq.bits.tdata ) + } .elsewhen( upRecvCnt === 7.U ){ + upOldHead.param(2) := upPendBuf.io.deq.bits.tdata + } .elsewhen( upRecvCnt === 8.U ){ + upOldHead.param(2) := Cat( upOldHead.param(2), upPendBuf.io.deq.bits.tdata ) + } } .elsewhen( isLastDownStreamEnd ){ upOldHead.operator := downOldHead.operator upOldHead.length := 0.U @@ -330,7 +349,7 @@ trait ShinSlvPhyUpStreamRecv{ this: ShinSlvPhyDownStream => upPendBuf.io.deq.ready := (upRecvStateCurr === UpRecvStateOHead) | - ((upRecvStateCurr === UpRecvStateFData) & upForwardFifo.io.enq.ready) | + (upRecvStateCurr === UpRecvStateFData) | (upRecvStateCurr === UpRecvStateCRC ) @@ -431,6 +450,7 @@ trait ShinSlvPhyUpStreamSend{ this: ShinSlvPhyDownStream => upSendStateCurr === UpSendStateFData & upStreamCdrOut.io.axis.ready assert( ~(upStreamCdrIn.io.axis.valid & ~upStreamCdrIn.io.axis.ready) ) + assert( ~(upSendStateCurr === UpSendStateFData & ~upForwardFifo.io.deq.valid) ) val isUpStreamEnd = (upSendStateCurr =/= UpSendStateIdle) & (upSendStateNext === UpSendStateIdle) @@ -495,8 +515,8 @@ trait ShinSlvLinkInit{ this: ShinSlvLinkBase => isDownUpdate := false.B } - when( (isDownNewHeadCreated | isLastDownStreamEnd) & isLegalInitDownHead ){ - slvRTC := (64.U - (downOldHead.length >> 3)) << 5 // * 32 + when( isUpStreamEnd ){ + slvRTC := upOldHead.length >> 3 //Need Calibration } .otherwise{ slvRTC := slvRTC + 1.U }