diff --git a/src/main/scala/backBoard/shin/SlaveParser.scala b/src/main/scala/backBoard/shin/SlaveParser.scala index 0e8316b..0741689 100644 --- a/src/main/scala/backBoard/shin/SlaveParser.scala +++ b/src/main/scala/backBoard/shin/SlaveParser.scala @@ -68,6 +68,7 @@ abstract class SlaveParserBase extends Module{ val localDevIndex = Reg(UInt(14.W)) //当前设备索引 + dontTouch(localDevIndex) // 认为只有下行到下行,上行到上行模式,探针是独立发起操作 @@ -244,10 +245,10 @@ abstract class SlaveParserBase extends Module{ io.sram_w.enr := false.B - io.sram_w.enw := //req fire 后 已经反相 + io.sram_w.enw := (downRecParser.io.stateCurr === STATE_PAYLOAD_DATA) & ( //req fire 后 已经反相 ( ~isDownRecPing & downSubMsgInfo(0).devIndex === localDevIndex & (downSubMsgInfo(0).operator === 1.U | downSubMsgInfo(0).operator === 3.U)) | ( isDownRecPing & downSubMsgInfo(1).devIndex === localDevIndex & (downSubMsgInfo(1).operator === 1.U | downSubMsgInfo(1).operator === 3.U)) - + ) io.sram_w.addr := addrw diff --git a/tb/shinTest/SlaveParserTb.v b/tb/shinTest/SlaveParserTb.v index 652d5f1..b089dac 100644 --- a/tb/shinTest/SlaveParserTb.v +++ b/tb/shinTest/SlaveParserTb.v @@ -159,6 +159,9 @@ end initial begin #1000 + + s_SlaveParser.localDevIndex = 3; //强制设备索引为3,测试子报文操作 + @(posedge clock) #3 io_downIn_valid = 1; io_downIn_bits_tdata = 8'h20; @@ -174,43 +177,82 @@ initial begin for( integer i = 0; i < 8; i = i + 1 ) begin - - @(posedge clock) #3 - io_downIn_valid = 1; - io_downIn_bits_tdata = $random; - - @(posedge clock) #3 - io_downIn_valid = 1; - io_downIn_bits_tdata = $random; - - @(posedge clock) #3 - io_downIn_valid = 1; - io_downIn_bits_tdata = $random; - - @(posedge clock) #3 - io_downIn_valid = 1; - io_downIn_bits_tdata = $random; - - @(posedge clock) #3 - io_downIn_valid = 1; - io_downIn_bits_tdata = 8'h0; - - @(posedge clock) #3 - io_downIn_valid = 1; - io_downIn_bits_tdata = 8'd56; - - @(posedge clock) #3 - io_downIn_valid = 1; - io_downIn_bits_tdata = $random; - - @(posedge clock) #3 - io_downIn_valid = 1; - io_downIn_bits_tdata = $random; - - for( integer j = 0; j < 64-8; j = j+ 1 )begin + if( i != 5 ) begin @(posedge clock) #3 io_downIn_valid = 1; - io_downIn_bits_tdata = 8'ha5; //heeader length 512 + io_downIn_bits_tdata = $random; + + @(posedge clock) #3 + io_downIn_valid = 1; + io_downIn_bits_tdata = $random; + + @(posedge clock) #3 + io_downIn_valid = 1; + io_downIn_bits_tdata = $random; + + @(posedge clock) #3 + io_downIn_valid = 1; + io_downIn_bits_tdata = $random; + + @(posedge clock) #3 + io_downIn_valid = 1; + io_downIn_bits_tdata = 8'h0; + + @(posedge clock) #3 + io_downIn_valid = 1; + io_downIn_bits_tdata = 8'd56; + + @(posedge clock) #3 + io_downIn_valid = 1; + io_downIn_bits_tdata = $random; + + @(posedge clock) #3 + io_downIn_valid = 1; + io_downIn_bits_tdata = $random; + + for( integer j = 0; j < 64-8; j = j+ 1 ) begin + @(posedge clock) #3 + io_downIn_valid = 1; + io_downIn_bits_tdata = 8'ha5; //heeader length 512 + end + end else begin //第5个子报文操作 + @(posedge clock) #3 + io_downIn_valid = 1; + io_downIn_bits_tdata = 8'h0; + + @(posedge clock) #3 + io_downIn_valid = 1; + io_downIn_bits_tdata = 8'hC; //3号设备 类型空 + + @(posedge clock) #3 + io_downIn_valid = 1; + io_downIn_bits_tdata = 8'h00; //地址 + + @(posedge clock) #3 + io_downIn_valid = 1; + io_downIn_bits_tdata = 8'h10; //地址 + + @(posedge clock) #3 + io_downIn_valid = 1; + io_downIn_bits_tdata = 8'h30; //命令3 长度56 + + @(posedge clock) #3 + io_downIn_valid = 1; + io_downIn_bits_tdata = 8'd56; //长度56 + + @(posedge clock) #3 + io_downIn_valid = 1; + io_downIn_bits_tdata = $random; //工作计数 + + @(posedge clock) #3 + io_downIn_valid = 1; + io_downIn_bits_tdata = $random; //工作计数 + + for( integer j = 0; j < 64-8; j = j+ 1 ) begin + @(posedge clock) #3 + io_downIn_valid = 1; + io_downIn_bits_tdata = 8'h55; //heeader length 512 + end end end