diff --git a/src/main/scala/backBoard/shin/Interface.scala b/src/main/scala/backBoard/shin/Interface.scala index b921a9a..2b46c29 100644 --- a/src/main/scala/backBoard/shin/Interface.scala +++ b/src/main/scala/backBoard/shin/Interface.scala @@ -1060,10 +1060,10 @@ trait InterfaceWdt{ this: InterfaceBase => for( i <- 0 until 18 ){ cReg.wdtTarCnt(i) := Cat( - RegEnable( dataw, 0.U(8.W), isEnW & addrw === ( "h40b".U (16.W) + (4*i).U ) ), - RegEnable( dataw, 0.U(8.W), isEnW & addrw === ( "h40a".U (16.W) + (4*i).U ) ), - RegEnable( dataw, 0.U(8.W), isEnW & addrw === ( "h409".U (16.W) + (4*i).U ) ), - RegEnable( dataw, 0.U(8.W), isEnW & addrw === ( "h408".U (16.W) + (4*i).U ) ), + RegEnable( dataw, "hFF".U(8.W), isEnW & addrw === ( "h40b".U (16.W) + (4*i).U ) ), + RegEnable( dataw, "hFF".U(8.W), isEnW & addrw === ( "h40a".U (16.W) + (4*i).U ) ), + RegEnable( dataw, "hFF".U(8.W), isEnW & addrw === ( "h409".U (16.W) + (4*i).U ) ), + RegEnable( dataw, "hFF".U(8.W), isEnW & addrw === ( "h408".U (16.W) + (4*i).U ) ), ) } } @@ -1201,7 +1201,7 @@ trait InterfaceSystem{ this: InterfaceBase => (io.intMstTrig(1) & cReg.intEnable(1)) | //主站接收完成 (isLocalSyncInt & cReg.intEnable(2)) | //主站发送周期到了 (isLatchEvent & cReg.intEnable(3)) | //latch Event - (~RegNext(isWdtTrigAndEnable, false.B) & isWdtTrigAndEnable & cReg.intEnable(4)) | //主站接收看门狗溢出 + (isWdtTrigAndEnable & cReg.intEnable(4)) | //主站接收看门狗溢出 (0 until 8).map{ i => io.intSlvTrig(i) & cReg.intEnable(8+i)}.reduce(_|_) | //从站SM请求 (0 until 4).map{ i => io.intTransEnd(i) & cReg.intEnable(16+i)}.reduce(_|_) | //传输完成请求 16,17,18,19 isMstRecCRCErr | //override //主站状态下19为上行crc接收错误 //不会同时发生 diff --git a/src/main/scala/backBoard/shin/ShinTop.scala b/src/main/scala/backBoard/shin/ShinTop.scala index 8c39a01..d1e9372 100644 --- a/src/main/scala/backBoard/shin/ShinTop.scala +++ b/src/main/scala/backBoard/shin/ShinTop.scala @@ -380,10 +380,10 @@ trait ShinTopSlave{ this: ShinTopBase => slaveParser.io.intHWClr(0) := interface.io.intHWTrig(0) & interface.io.intHWClr(0) slaveParser.io.intHWClr(1) := interface.io.intHWTrig(1) & interface.io.intHWClr(1) - downCDRIn.reset := reset.asBool | ( interface.io.intHWTrig(0) & interface.io.intHWClr(0) ) - upCDRIn.reset := reset.asBool | ( interface.io.intHWTrig(1) & interface.io.intHWClr(1) ) - downCDROut.reset := reset.asBool | ( interface.io.intHWTrig(0) & interface.io.intHWClr(0) ) - upCDROut.reset := reset.asBool | ( interface.io.intHWTrig(1) & interface.io.intHWClr(1) ) + downCDRIn.reset := reset.asBool | RegNext( interface.io.intHWTrig(0) & interface.io.intHWClr(0) ) + upCDRIn.reset := reset.asBool | RegNext( interface.io.intHWTrig(1) & interface.io.intHWClr(1) ) + downCDROut.reset := reset.asBool | RegNext( interface.io.intHWTrig(0) & interface.io.intHWClr(0) ) + upCDROut.reset := reset.asBool | RegNext( interface.io.intHWTrig(1) & interface.io.intHWClr(1) ) interface.io.lvds <> slaveParser.io.lvds @@ -422,7 +422,7 @@ trait ShinTopWatchDog{ this: ShinTopBase => for( i <- 0 until 16 ){ when( isWdtSMEnable(i) & (wdtSMCnt(i) < interface.io.cReg.wdtTarCnt(i+1)) ){ wdtSMCnt(i) := wdtSMCnt(i) + 1.U - } .elsewhen( ~isWdtSMEnable(i) ){ + } .elsewhen( ~isWdtSMEnable(i) || (wdtSMCnt(i) >= interface.io.cReg.wdtTarCnt(i+1)) ){ wdtSMCnt(i) := 0.U } @@ -446,7 +446,7 @@ trait ShinTopWatchDog{ this: ShinTopBase => when( isWdtRec2RtnEnable & (wdtRec2RtnCnt < interface.io.cReg.wdtTarCnt(0)) ){ wdtRec2RtnCnt := wdtRec2RtnCnt + 1.U - } .elsewhen( ~isWdtRec2RtnEnable ){ + } .elsewhen( ~isWdtRec2RtnEnable || (wdtRec2RtnCnt >= interface.io.cReg.wdtTarCnt(0)) ){ wdtRec2RtnCnt := 0.U } @@ -460,8 +460,9 @@ trait ShinTopWatchDog{ this: ShinTopBase => when( interface.io.cReg.wdtEnable.extract(17) & (wdtRec2RecCnt < interface.io.cReg.wdtTarCnt(17)) ){ wdtRec2RecCnt := wdtRec2RecCnt + 1.U } .elsewhen( - ~interface.io.cReg.wdtEnable.extract(17) | - downCDRIn.io.axis.fire + ~interface.io.cReg.wdtEnable.extract(17) || + downCDRIn.io.axis.fire || + (wdtRec2RecCnt >= interface.io.cReg.wdtTarCnt(17)) ){ wdtRec2RecCnt := 0.U } diff --git a/src/main/scala/backBoard/shin/SlaveParser.scala b/src/main/scala/backBoard/shin/SlaveParser.scala index 9ad77df..72510ab 100644 --- a/src/main/scala/backBoard/shin/SlaveParser.scala +++ b/src/main/scala/backBoard/shin/SlaveParser.scala @@ -991,11 +991,11 @@ with SlaveParserProbe{ io.intHWTrig(0) := downRecParser.io.isError io.intHWTrig(1) := upRecParser.io.isError - downRecParser.reset := reset.asBool | (downRecParser.io.isError & io.intHWClr(0)) - downSendGen.reset := reset.asBool | (downRecParser.io.isError & io.intHWClr(0)) + downRecParser.reset := reset.asBool | RegNext(downRecParser.io.isError & io.intHWClr(0)) + downSendGen.reset := reset.asBool | RegNext(downRecParser.io.isError & io.intHWClr(0)) - upRecParser.reset := reset.asBool | (upRecParser.io.isError & io.intHWClr(1)) - upSendGen.reset := reset.asBool | (upRecParser.io.isError & io.intHWClr(1)) + upRecParser.reset := reset.asBool | RegNext(upRecParser.io.isError & io.intHWClr(1)) + upSendGen.reset := reset.asBool | RegNext(upRecParser.io.isError & io.intHWClr(1)) io.downRecStat := downRecParser.io.stat io.upRecStat := upRecParser.io.stat diff --git a/tb/shinTest/ShinTopSpiTb.v b/tb/shinTest/ShinTopSpiTb.v index 7dd1b23..9bfe261 100644 --- a/tb/shinTest/ShinTopSpiTb.v +++ b/tb/shinTest/ShinTopSpiTb.v @@ -44,7 +44,7 @@ module ShinTopSpiTb( `define ALL_DEV_NUM (`DEV_NUM + 1) // slave + master `define SPI_CSN_NUM (`ALL_DEV_NUM * 3) -`define HW_SERIAL 0 //(48'h4c5850303031) +`define HW_SERIAL 0 //48'h31303050584c //(48'h4c5850303031) `define IQSPI_PINS(N) (`N*4+3):(`N*4) `define EQSPI_PINS(N) ((`N + `ALL_DEV_NUM)*4+3):((`N + `ALL_DEV_NUM)*4) `define IQSPI_MISO(N) qspi_miso[`IQSPI_PINS(`N)] diff --git a/tb/shinTest/gen_pkt.py b/tb/shinTest/gen_pkt.py index ed25fe1..324d2fc 100755 --- a/tb/shinTest/gen_pkt.py +++ b/tb/shinTest/gen_pkt.py @@ -73,8 +73,8 @@ if __name__ == '__main__': - #add_tc_2_runlist(watchdog.tc1()) - #add_tc_2_runlist(watchdog.tc2()) + add_tc_2_runlist(watchdog.tc1()) + add_tc_2_runlist(watchdog.tc2()) add_tc_2_runlist(mac.tc1()) add_tc_2_runlist(mac.tc2()) diff --git a/tb/shinTest/testcase/watchdog.py b/tb/shinTest/testcase/watchdog.py index 2fda012..46cf8c6 100644 --- a/tb/shinTest/testcase/watchdog.py +++ b/tb/shinTest/testcase/watchdog.py @@ -64,7 +64,7 @@ def watchdog_test_sm_wr_timeout(tc_id, wd_id): +genIFRwDataCode(2, 0x074, False, 0x04) +genIFRwDataCode(3, 0x074, False, 0x04) +genIFRwDataCode(4, 0x074, False, 0x04) - +"#560000\n" + +"#700000\n" +genIFRwDataCode(1, 0x400, False, 0x04) +genIFRwDataCode(1, 0x400, True, 4, [0xff, 0xff, 0xff, 0xff]) +genIFRwDataCode(1, 0x400, False, 0x04) diff --git a/tb/shinTest/testcase_result/watchdog_tc01_result.log b/tb/shinTest/testcase_result/watchdog_tc01_result.log deleted file mode 100644 index 3ef21fa..0000000 --- a/tb/shinTest/testcase_result/watchdog_tc01_result.log +++ /dev/null @@ -1,25 +0,0 @@ -16'h0404 8'h00 16'h0004 8'h02 8'h00 8'h00 8'h00 -16'h040c 8'h00 16'h0004 8'h10 8'h00 8'h00 8'h00 -16'h0078 8'h00 16'h0004 8'hff 8'hff 8'hff 8'hff -16'h0078 8'h00 16'h0004 8'hff 8'hff 8'hff 8'hff -16'h0078 8'h00 16'h0004 8'hff 8'hff 8'hff 8'hff -16'h0078 8'h00 16'h0004 8'hff 8'hff 8'hff 8'hff -16'h0400 8'h00 16'h0004 8'hff 8'hff 8'hff 8'hff -16'h0074 8'h01 16'h0004 8'h00 8'h00 8'h00 8'h00 -16'h0074 8'h01 16'h0004 8'h00 8'h00 8'h00 8'h00 -16'h0074 8'h01 16'h0004 8'h00 8'h00 8'h00 8'h00 -16'h0074 8'h01 16'h0004 8'h00 8'h00 8'h00 8'h00 -16'h0074 8'h01 16'h0004 8'h00 8'h00 8'h00 8'h00 -16'h0400 8'h01 16'h0004 8'h00 8'h00 8'h00 8'h00 -16'h0302 8'h00 16'h0002 8'h66 8'h00 -16'h0306 8'h00 16'h0002 8'h66 8'h00 -16'h1000 8'h00 16'h0066 8'h06 8'h20 8'h00 8'h00 8'h00 8'h00 8'h03 8'h02 8'he0 8'h02 8'h80 8'h00 8'h00 8'h00 8'h00 8'h04 8'h08 8'h00 8'h10 8'h50 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 -16'h0020 8'h00 16'h0001 8'h01 -16'h0800 8'h01 16'h0066 8'h06 8'h20 8'h00 8'h04 8'h00 8'h00 8'h03 8'h02 8'he0 8'h02 8'h80 8'h00 8'h00 8'h04 8'h00 8'h04 8'h08 8'h00 8'h10 8'h50 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h01 -16'h0800 8'h01 16'h0080 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx 8'hxx -16'h0074 8'h01 16'h0004 8'h03 8'h00 8'h06 8'h00 -16'h0074 8'h01 16'h0004 8'h10 8'h00 8'h0f 8'h00 -16'h0074 8'h01 16'h0004 8'h00 8'h00 8'h0f 8'h00 -16'h0074 8'h01 16'h0004 8'h00 8'h00 8'h0f 8'h00 -16'h0074 8'h01 16'h0004 8'h00 8'h00 8'h0f 8'h00 -16'h0400 8'h01 16'h0004 8'h02 8'h00 8'h00 8'h00