Merge branch 'mp_eb_dev' into feature/auto_release_insert

This commit is contained in:
Ruige Lee
2025-08-22 17:27:40 +08:00
7 changed files with 22 additions and 46 deletions

View File

@@ -1060,10 +1060,10 @@ trait InterfaceWdt{ this: InterfaceBase =>
for( i <- 0 until 18 ){ for( i <- 0 until 18 ){
cReg.wdtTarCnt(i) := cReg.wdtTarCnt(i) :=
Cat( Cat(
RegEnable( dataw, 0.U(8.W), isEnW & addrw === ( "h40b".U (16.W) + (4*i).U ) ), RegEnable( dataw, "hFF".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, "hFF".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, "hFF".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 === ( "h408".U (16.W) + (4*i).U ) ),
) )
} }
} }
@@ -1201,7 +1201,7 @@ trait InterfaceSystem{ this: InterfaceBase =>
(io.intMstTrig(1) & cReg.intEnable(1)) | //主站接收完成 (io.intMstTrig(1) & cReg.intEnable(1)) | //主站接收完成
(isLocalSyncInt & cReg.intEnable(2)) | //主站发送周期到了 (isLocalSyncInt & cReg.intEnable(2)) | //主站发送周期到了
(isLatchEvent & cReg.intEnable(3)) | //latch Event (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 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 (0 until 4).map{ i => io.intTransEnd(i) & cReg.intEnable(16+i)}.reduce(_|_) | //传输完成请求 16,17,18,19
isMstRecCRCErr | //override //主站状态下19为上行crc接收错误 //不会同时发生 isMstRecCRCErr | //override //主站状态下19为上行crc接收错误 //不会同时发生

View File

@@ -380,10 +380,10 @@ trait ShinTopSlave{ this: ShinTopBase =>
slaveParser.io.intHWClr(0) := interface.io.intHWTrig(0) & interface.io.intHWClr(0) slaveParser.io.intHWClr(0) := interface.io.intHWTrig(0) & interface.io.intHWClr(0)
slaveParser.io.intHWClr(1) := interface.io.intHWTrig(1) & interface.io.intHWClr(1) slaveParser.io.intHWClr(1) := interface.io.intHWTrig(1) & interface.io.intHWClr(1)
downCDRIn.reset := reset.asBool | ( interface.io.intHWTrig(0) & interface.io.intHWClr(0) ) downCDRIn.reset := reset.asBool | RegNext( interface.io.intHWTrig(0) & interface.io.intHWClr(0) )
upCDRIn.reset := reset.asBool | ( interface.io.intHWTrig(1) & interface.io.intHWClr(1) ) upCDRIn.reset := reset.asBool | RegNext( interface.io.intHWTrig(1) & interface.io.intHWClr(1) )
downCDROut.reset := reset.asBool | ( interface.io.intHWTrig(0) & interface.io.intHWClr(0) ) downCDROut.reset := reset.asBool | RegNext( interface.io.intHWTrig(0) & interface.io.intHWClr(0) )
upCDROut.reset := reset.asBool | ( interface.io.intHWTrig(1) & interface.io.intHWClr(1) ) upCDROut.reset := reset.asBool | RegNext( interface.io.intHWTrig(1) & interface.io.intHWClr(1) )
interface.io.lvds <> slaveParser.io.lvds interface.io.lvds <> slaveParser.io.lvds
@@ -422,7 +422,7 @@ trait ShinTopWatchDog{ this: ShinTopBase =>
for( i <- 0 until 16 ){ for( i <- 0 until 16 ){
when( isWdtSMEnable(i) & (wdtSMCnt(i) < interface.io.cReg.wdtTarCnt(i+1)) ){ when( isWdtSMEnable(i) & (wdtSMCnt(i) < interface.io.cReg.wdtTarCnt(i+1)) ){
wdtSMCnt(i) := wdtSMCnt(i) + 1.U wdtSMCnt(i) := wdtSMCnt(i) + 1.U
} .elsewhen( ~isWdtSMEnable(i) ){ } .elsewhen( ~isWdtSMEnable(i) || (wdtSMCnt(i) >= interface.io.cReg.wdtTarCnt(i+1)) ){
wdtSMCnt(i) := 0.U wdtSMCnt(i) := 0.U
} }
@@ -446,7 +446,7 @@ trait ShinTopWatchDog{ this: ShinTopBase =>
when( isWdtRec2RtnEnable & (wdtRec2RtnCnt < interface.io.cReg.wdtTarCnt(0)) ){ when( isWdtRec2RtnEnable & (wdtRec2RtnCnt < interface.io.cReg.wdtTarCnt(0)) ){
wdtRec2RtnCnt := wdtRec2RtnCnt + 1.U wdtRec2RtnCnt := wdtRec2RtnCnt + 1.U
} .elsewhen( ~isWdtRec2RtnEnable ){ } .elsewhen( ~isWdtRec2RtnEnable || (wdtRec2RtnCnt >= interface.io.cReg.wdtTarCnt(0)) ){
wdtRec2RtnCnt := 0.U wdtRec2RtnCnt := 0.U
} }
@@ -460,8 +460,9 @@ trait ShinTopWatchDog{ this: ShinTopBase =>
when( interface.io.cReg.wdtEnable.extract(17) & (wdtRec2RecCnt < interface.io.cReg.wdtTarCnt(17)) ){ when( interface.io.cReg.wdtEnable.extract(17) & (wdtRec2RecCnt < interface.io.cReg.wdtTarCnt(17)) ){
wdtRec2RecCnt := wdtRec2RecCnt + 1.U wdtRec2RecCnt := wdtRec2RecCnt + 1.U
} .elsewhen( } .elsewhen(
~interface.io.cReg.wdtEnable.extract(17) | ~interface.io.cReg.wdtEnable.extract(17) ||
downCDRIn.io.axis.fire downCDRIn.io.axis.fire ||
(wdtRec2RecCnt >= interface.io.cReg.wdtTarCnt(17))
){ ){
wdtRec2RecCnt := 0.U wdtRec2RecCnt := 0.U
} }

View File

@@ -991,11 +991,11 @@ with SlaveParserProbe{
io.intHWTrig(0) := downRecParser.io.isError io.intHWTrig(0) := downRecParser.io.isError
io.intHWTrig(1) := upRecParser.io.isError io.intHWTrig(1) := upRecParser.io.isError
downRecParser.reset := reset.asBool | (downRecParser.io.isError & io.intHWClr(0)) downRecParser.reset := reset.asBool | RegNext(downRecParser.io.isError & io.intHWClr(0))
downSendGen.reset := reset.asBool | (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)) upRecParser.reset := reset.asBool | RegNext(upRecParser.io.isError & io.intHWClr(1))
upSendGen.reset := reset.asBool | (upRecParser.io.isError & io.intHWClr(1)) upSendGen.reset := reset.asBool | RegNext(upRecParser.io.isError & io.intHWClr(1))
io.downRecStat := downRecParser.io.stat io.downRecStat := downRecParser.io.stat
io.upRecStat := upRecParser.io.stat io.upRecStat := upRecParser.io.stat

View File

@@ -44,7 +44,7 @@ module ShinTopSpiTb(
`define ALL_DEV_NUM (`DEV_NUM + 1) // slave + master `define ALL_DEV_NUM (`DEV_NUM + 1) // slave + master
`define SPI_CSN_NUM (`ALL_DEV_NUM * 3) `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 IQSPI_PINS(N) (`N*4+3):(`N*4)
`define EQSPI_PINS(N) ((`N + `ALL_DEV_NUM)*4+3):((`N + `ALL_DEV_NUM)*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)] `define IQSPI_MISO(N) qspi_miso[`IQSPI_PINS(`N)]

View File

@@ -73,8 +73,8 @@ if __name__ == '__main__':
#add_tc_2_runlist(watchdog.tc1()) add_tc_2_runlist(watchdog.tc1())
#add_tc_2_runlist(watchdog.tc2()) add_tc_2_runlist(watchdog.tc2())
add_tc_2_runlist(mac.tc1()) add_tc_2_runlist(mac.tc1())
add_tc_2_runlist(mac.tc2()) add_tc_2_runlist(mac.tc2())

View File

@@ -64,7 +64,7 @@ def watchdog_test_sm_wr_timeout(tc_id, wd_id):
+genIFRwDataCode(2, 0x074, False, 0x04) +genIFRwDataCode(2, 0x074, False, 0x04)
+genIFRwDataCode(3, 0x074, False, 0x04) +genIFRwDataCode(3, 0x074, False, 0x04)
+genIFRwDataCode(4, 0x074, False, 0x04) +genIFRwDataCode(4, 0x074, False, 0x04)
+"#560000\n" +"#700000\n"
+genIFRwDataCode(1, 0x400, False, 0x04) +genIFRwDataCode(1, 0x400, False, 0x04)
+genIFRwDataCode(1, 0x400, True, 4, [0xff, 0xff, 0xff, 0xff]) +genIFRwDataCode(1, 0x400, True, 4, [0xff, 0xff, 0xff, 0xff])
+genIFRwDataCode(1, 0x400, False, 0x04) +genIFRwDataCode(1, 0x400, False, 0x04)

View File

@@ -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