From 3721d365ce221b5d426abcee0a242f4e2e60d697 Mon Sep 17 00:00:00 2001 From: Ruige Lee Date: Wed, 28 May 2025 16:41:32 +0800 Subject: [PATCH 1/7] =?UTF-8?q?spi=E8=AF=B7=E6=B1=82=E5=9C=B0=E5=9D=80?= =?UTF-8?q?=E5=A4=A7=E5=B0=8F=E7=AB=AF=E7=BF=BB=E8=BD=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/scala/backBoard/shin/SpiInterface.scala | 4 ++-- tb/shinTest/ShinTopSpiTb.v | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/scala/backBoard/shin/SpiInterface.scala b/src/main/scala/backBoard/shin/SpiInterface.scala index 8bc4c1e..bfd9801 100644 --- a/src/main/scala/backBoard/shin/SpiInterface.scala +++ b/src/main/scala/backBoard/shin/SpiInterface.scala @@ -89,7 +89,7 @@ abstract class SpiInterfaceBase extends Module{ } .elsewhen(isSckPosedgeNext(0) & ~shiftCSn(1) & bitSel === 0.U & byteSel === 1.U){ //CS为低,且SCK上跳的第0byte addrw := exRegi } .elsewhen(isSckPosedgeNext(0) & ~shiftCSn(1) & bitSel === 0.U & byteSel === 2.U) {//CS为低,且SCK上跳的第0byte - addrw := Cat(exRegi, addrw(7,0)) + addrw := Cat(addrw(7,0), exRegi) } .otherwise{ // byteSel > 1.U when( isSckPosedgeNext(1) & byteSel > 3.U & bitSel === 0.U ){ addrw := addrw + 1.U @@ -101,7 +101,7 @@ abstract class SpiInterfaceBase extends Module{ } .elsewhen(isSckPosedgeNext(0) & ~shiftCSn(1) & bitSel === 0.U & byteSel === 1.U){ //CS为低,且SCK上跳的第0byte addrr := exRegi } .elsewhen(isSckPosedgeNext(0) & ~shiftCSn(1) & bitSel === 0.U & byteSel === 2.U) {//CS为低,且SCK上跳的第0byte - addrr := Cat(exRegi, addrr(7,0)) + addrr := Cat(addrr(7,0), exRegi) } .otherwise{ // byteSel > 1.U when( isSckPosedgeNext(1) & byteSel > 3.U & bitSel === 0.U ){ addrr := addrr + 1.U diff --git a/tb/shinTest/ShinTopSpiTb.v b/tb/shinTest/ShinTopSpiTb.v index eb05138..fa177bd 100644 --- a/tb/shinTest/ShinTopSpiTb.v +++ b/tb/shinTest/ShinTopSpiTb.v @@ -439,8 +439,8 @@ end //sidx为0~4;外部spi为5~9,外部qspi为10~15 task spi_trans( input [15:0] saddress, input [7:0] scmd, input [12:0] slength,input [7:0] sidx ); begin - txBuf[0] <= saddress[7:0]; - txBuf[1] <= saddress[15:8]; + txBuf[0] <= saddress[15:8]; + txBuf[1] <= saddress[7:0]; txBuf[2] <= scmd; length <= slength + 3; From 28898cde927b7a170d31ebeffe0dcc30645a6511 Mon Sep 17 00:00:00 2001 From: bacon Date: Wed, 28 May 2025 00:40:35 +0800 Subject: [PATCH 2/7] =?UTF-8?q?=E9=87=87=E7=94=A8=E6=96=B0=E7=9A=84?= =?UTF-8?q?=E7=94=9F=E6=88=90=E5=8C=85=E7=9A=84=E6=9C=BA=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tb/shinTest/ShinTopSpiTb.v | 17 +++++++ tb/shinTest/gen_pkt.py | 94 ++++++++++++++++++++++++++++++++------ 2 files changed, 96 insertions(+), 15 deletions(-) diff --git a/tb/shinTest/ShinTopSpiTb.v b/tb/shinTest/ShinTopSpiTb.v index fa177bd..ae4174e 100644 --- a/tb/shinTest/ShinTopSpiTb.v +++ b/tb/shinTest/ShinTopSpiTb.v @@ -269,6 +269,7 @@ initial begin #3000000 #500000 #1000000 + #2000000 //#10000000 `endif @@ -1214,6 +1215,22 @@ initial begin _t_end = $time; $fdisplay(spidata_file, "该测试用例运行时间:%2tns", (_t_end - _t_start) / 1000); end + + begin:SYNC_TESTCASE2 + _t_start = $time; + #1000 + + `include "sync_sig2_pkt.vh" + + //spi_trans( (16'h0100), (`SPI_READ), (32), (`IF_IDX(0)) ); + spi_trans( (16'h0100), (`SPI_READ), (16'h48), (`IF_IDX(1)) ); + spi_trans( (16'h0100), (`SPI_READ), (16'h48), (`IF_IDX(2)) ); + spi_trans( (16'h0100), (`SPI_READ), (16'h48), (`IF_IDX(3)) ); + spi_trans( (16'h0100), (`SPI_READ), (16'h48), (`IF_IDX(4)) ); + + _t_end = $time; + $fdisplay(spidata_file, "该测试用例运行时间:%2tns", (_t_end - _t_start) / 1000); + end `endif diff --git a/tb/shinTest/gen_pkt.py b/tb/shinTest/gen_pkt.py index 69b6249..87bfe11 100755 --- a/tb/shinTest/gen_pkt.py +++ b/tb/shinTest/gen_pkt.py @@ -23,8 +23,11 @@ class GenPkt(object): else: self.pkt_type = type - def addSentence(self, str): + def addBeforeExc(self, str): self.sub_pkt.append([1, str]) + + def addAfterExc(self, str): + self.sub_pkt.append([2, str]) def addSubPkt(self, dev_idx, ptype, addr, cmd, len, data): if (len > 2032): @@ -161,17 +164,27 @@ class GenPkt(object): f.write(define_str + "(array) \\\n") for _k in range(i): if _k < (i - 1): - f.write("\tarray``[%d]=8'h%02X;\\\n"%(3 + _k, self.pkt_buf[_k])) + if type(self.pkt_buf[_k]) == int: + f.write("\tarray``[%d]=8'h%02X;\\\n"%(3 + _k, self.pkt_buf[_k])) + else: + f.write("\tarray``[%d]=%s;\\\n"%(3 + _k, self.pkt_buf[_k])) else: - f.write("\tarray``[%d]=8'h%02X;\n"%(3 + _k, self.pkt_buf[_k])) + if type(self.pkt_buf[_k]) == int: + f.write("\tarray``[%d]=8'h%02X;\n"%(3 + _k, self.pkt_buf[_k])) + else: + f.write("\tarray``[%d]=%s;\n"%(3 + _k, self.pkt_buf[_k])) + + for md in self.sub_pkt: + if md[0] == 2: + f.write("%s\n"%(md[1],)) else: for _k in range(i): - if type(self.pkt_buf[_k]) == int: - f.write("txBuf[%d]=8'h%02X;\n"%(3 + _k, self.pkt_buf[_k])) - else: - f.write("txBuf[%d]=`%s;\n"%(3 + _k, self.pkt_buf[_k])) + f.write("txBuf[%d]=8'h%02X;\n"%(3 + _k, self.pkt_buf[_k])) f.close() + + +#def genAfterExc(gen, ) if __name__ == '__main__': genPkt = GenPkt() @@ -364,8 +377,13 @@ if __name__ == '__main__': #>>>>>>设置同步信号的数据包2 genPkt.clean() genPkt.setPktType(0) + gen_file_def = "sync_sig2_pkt" + sm_idx = 0 - genPkt.addSentence(''' ''') + genPkt.addBeforeExc( + '''spi_trans( (16'h0100), (`SPI_READ), (8), (`IF_IDX(0)));\n''' + + '''_temp_time = rxBuf[3] + (rxBuf[4] << 8) + (rxBuf[5] << 16) + (rxBuf[6] << 24) + (rxBuf[7] << 32) + (rxBuf[8] << 40) + (rxBuf[9] << 48) + (rxBuf[10] << 56);\n''' + + '''_temp_time = _temp_time + 32'h3000;\n\n''') #subPkt参数:索引、索引类型、地址、命令、长度、数据 data = [0,] * 100 #bytearray(b"\0" * 100) @@ -375,23 +393,69 @@ if __name__ == '__main__': data[6] = 0xa data[8] = 0xa - data[16] = 0x00 #地址0x130, sync同步点 - data[17] = 0x00 #地址0x131 - #data[18] = 0x10 + data[16] = '''(_temp_time & 8'hff)''' #地址0x130, sync同步点 + data[17] = '''(_temp_time >> 8) & 8'hff''' #地址0x131 + data[18] = '''(_temp_time >> 16) & 8'hff''' + data[19] = '''(_temp_time >> 24) & 8'hff''' data[24] = 0x80 #地址0x138, sync周期 4B data[25] = 0x00 #地址0x139 - data[28] = 0x81 #sync1偏移 + data[28] = 0x0 #sync1偏移 data[29] = 0x0 - data[36] = 0x20#sync3偏移 - data[37] = 0x00 + data[36] = 0x0#sync3偏移 + data[37] = 0x0 genPkt.addSubPkt(0, 0, 0x120, 0xe, 0x28, data) + + data = [0,] * 100 #bytearray(b"\0" * 100) + data[0] = 0x0f #地址0x120 + data[2] = 0xa + data[4] = 0xa + data[6] = 0xa + data[8] = 0xa + + data[16] = '''(_temp_time & 8'hff)''' #地址0x130, sync同步点 + data[17] = '''(_temp_time >> 8) & 8'hff''' #地址0x131 + data[18] = '''(_temp_time >> 16) & 8'hff''' + data[19] = '''(_temp_time >> 24) & 8'hff''' + + data[24] = 0x00 #地址0x138, sync周期 4B + data[25] = 0x01 #地址0x139 + + data[28] = 0x0 #sync1偏移 + data[29] = 0x0 + + data[36] = 0x0#sync3偏移 + data[37] = 0x0 + genPkt.addSubPkt(3, 0, 0x120, 0x1, 0x28, data) - genPkt.gen("./generated/shin/sync_sig2_pkt.vh", 1) + genPkt.addAfterExc( + '''\n//写入发送长度\n''' + + '''`DEF_%s_sm(txBuf);\n'''%(gen_file_def, ) + + '''spi_trans( (`MST_TX%d_LEN_ADDR), (`SPI_WRITE), (2), (`IF_IDX(0)) );\n'''%(sm_idx,) + + '''spi_trans( (`MST_RX%d_LEN_ADDR), (`SPI_WRITE), (2), (`IF_IDX(0)) );\n'''%(sm_idx,) + + '''\n$fdisplay(spidata_file, "<<发包:");\n''' + + '''`DEF_%s(txBuf);\n'''%(gen_file_def, ) + + '''spi_trans( (`MST_TX%d_ADDR), (`SPI_WRITE), (`DEF_%s_len), (`IF_IDX(0)) );\n'''%(sm_idx, gen_file_def, ) + + #+ '''//写入替换时间戳替换地址\n''' + #+ '''txBuf[0+3] = 8'h0c;\n''' + #+ '''txBuf[1+3] = 8'hc0;\n''' + #+ '''spi_trans( (16'h24), (`SPI_WRITE), (2), (`IF_IDX(0)) );\n''' + + + '''\n//请求发送\n''' + + '''txBuf[0+3] = `MST_TX_TRIGGER(%d);\n'''%(sm_idx, ) + + '''spi_trans( (16'h20), (`SPI_WRITE), (1), (`IF_IDX(0)) );\n''' + + + '''\n//等待回包\n''' + + '''@(posedge isResp) #5 begin end\n''' + + '''$fdisplay(spidata_file, ">>回包:");\n''' + + '''spi_trans( (`MST_RX%d_ADDR), (`SPI_READ), (`DEF_%s_len), (`IF_IDX(0)) );\n'''%(sm_idx, gen_file_def,)) + + genPkt.gen("./generated/shin/%s.vh"%(gen_file_def,), 1) From 6672cef0b04ee949ea6cdfd909241de32bd5f2e0 Mon Sep 17 00:00:00 2001 From: bacon Date: Wed, 28 May 2025 09:02:30 +0800 Subject: [PATCH 3/7] =?UTF-8?q?=E9=87=87=E7=94=A8=E6=96=B0=E7=9A=84?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E6=9E=B6=E6=9E=84,=E4=BD=BF=E7=94=A8python?= =?UTF-8?q?=E4=B8=8D=E4=BB=85=E7=94=9F=E6=88=90=E6=B5=8B=E8=AF=95=E7=94=A8?= =?UTF-8?q?=E4=BE=8B=E7=9A=84=E6=95=B0=E6=8D=AE,=E4=B9=9F=E7=94=9F?= =?UTF-8?q?=E6=88=90=E7=9B=B8=E5=85=B3=E7=9A=84=E5=9B=BA=E5=AE=9A=E6=97=A0?= =?UTF-8?q?=E5=8F=98=E5=8C=96=E7=9A=84=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tb/shinTest/ShinTopSpiTb.v | 37 ++------------------- tb/shinTest/gen_pkt.py | 68 +++++++++++++++++++++++--------------- 2 files changed, 44 insertions(+), 61 deletions(-) diff --git a/tb/shinTest/ShinTopSpiTb.v b/tb/shinTest/ShinTopSpiTb.v index ae4174e..2322b82 100644 --- a/tb/shinTest/ShinTopSpiTb.v +++ b/tb/shinTest/ShinTopSpiTb.v @@ -666,25 +666,7 @@ initial begin $fdisplay(spidata_file, "--->>>嗅探"); `include "detect_pkt.vh" - //设置SM1在写入0x4 len 触发enq - //设置SM0在读出0x4 len 触发deq - `DEF_detect_pkt_sm(txBuf); - spi_trans( (`MST_TX_LEN_ADDR), (`SPI_WRITE), (2), (`IF_IDX(0)) ); - spi_trans( (`MST_RX_LEN_ADDR), (`SPI_WRITE), (2), (`IF_IDX(0)) ); - - //无子报文 - $fdisplay(spidata_file, "<<发包:"); - `DEF_detect_pkt(txBuf); - spi_trans( (`MST_TX_ADDR), (`SPI_WRITE), (`DEF_detect_pkt_len), (`IF_IDX(0)) ); //写入SM1 - - //发布请求 - txBuf[0+3] = `MST_TX_TRG; //8'h01; - spi_trans( (16'h20), (`SPI_WRITE), (1), (`IF_IDX(0)) );//发送SM0 接收SM0, 请求发送 - @(posedge isResp) #5 begin end - - $fdisplay(spidata_file, ">>回包:"); - spi_trans( (`MST_RX_ADDR), (`SPI_READ), (`DEF_detect_pkt_len), (`IF_IDX(0)) );//读一下SM0的切换地址,将fifo弹出 - + // 顺序索引 //#50000 #1000 @@ -776,22 +758,7 @@ initial begin $fdisplay(spidata_file, "--->>>嗅探"); //设置SM1在写入0x3地址触发enq - `DEF_detect_pkt_sm(txBuf); - spi_trans( (`MST_TX_LEN_ADDR), (`SPI_WRITE), (2), (`IF_IDX(0)) ); - spi_trans( (`MST_RX_LEN_ADDR), (`SPI_WRITE), (2), (`IF_IDX(0)) ); - - //无子报文 - $fdisplay(spidata_file, "<<发包:"); - `DEF_detect_pkt(txBuf); - spi_trans( (`MST_TX_ADDR), (`SPI_WRITE), (`DEF_detect_pkt_len), (`IF_IDX(0)) ); //写入SM1 - - //发布请求 - - txBuf[0+3] = `MST_TX_TRG; - spi_trans( (16'h20), (`SPI_WRITE), (1), (`IF_IDX(0)) );//发送SM0 接收SM0, 请求发送 - @(posedge isResp) #5 begin end - $fdisplay(spidata_file, ">>回包:"); - spi_trans( (`MST_RX_ADDR), (`SPI_READ), (`DEF_detect_pkt_len), (`IF_IDX(0)) );//读一下SM0的切换地址,将fifo弹出 + `include "detect_pkt.vh" $fdisplay(spidata_file, "--->>>嗅探后,检查链路状态寄存器"); //spi_trans( (16'h00c0), (`SPI_READ), (6), (`IF_IDX(0)) ); diff --git a/tb/shinTest/gen_pkt.py b/tb/shinTest/gen_pkt.py index 87bfe11..d4875ca 100755 --- a/tb/shinTest/gen_pkt.py +++ b/tb/shinTest/gen_pkt.py @@ -184,14 +184,48 @@ class GenPkt(object): -#def genAfterExc(gen, ) + #+ '''//写入替换时间戳替换地址\n''' + #+ '''txBuf[0+3] = 8'h0c;\n''' + #+ '''txBuf[1+3] = 8'hc0;\n''' + #+ '''spi_trans( (16'h24), (`SPI_WRITE), (2), (`IF_IDX(0)) );\n''' + +def genWriteTransLenCode(gen_name, sm_idx): + return '''\n//写入发送长度\n'''\ + + '''`DEF_%s_sm(txBuf);\n'''%(gen_name, )\ + + '''spi_trans( (`MST_TX%d_LEN_ADDR), (`SPI_WRITE), (2), (`IF_IDX(0)) );\n'''%(sm_idx,)\ + + '''spi_trans( (`MST_RX%d_LEN_ADDR), (`SPI_WRITE), (2), (`IF_IDX(0)) );\n'''%(sm_idx,) + +def genWriteTransPktCode(gen_name, sm_idx): + return '''\n$fdisplay(spidata_file, "<<发包:");\n'''\ + + '''`DEF_%s(txBuf);\n'''%(gen_name, )\ + + '''spi_trans( (`MST_TX%d_ADDR), (`SPI_WRITE), (`DEF_%s_len), (`IF_IDX(0)) );\n'''%(sm_idx, gen_name, ) + +def genTrgTransPktCode(gen_name, sm_idx): + return '''\n//请求发送\n'''\ + + '''$fdisplay(spidata_file, "--请求发送");\n'''\ + + '''txBuf[0+3] = `MST_TX_TRIGGER(%d);\n'''%(sm_idx, )\ + + '''spi_trans( (16'h20), (`SPI_WRITE), (1), (`IF_IDX(0)) );\n''' + +def genReadAckPktCode(gen_name, sm_idx): + return '''\n//等待回包\n'''\ + + '''@(posedge isResp) #5 begin end\n'''\ + + '''$fdisplay(spidata_file, ">>回包:");\n'''\ + + '''spi_trans( (`MST_RX%d_ADDR), (`SPI_READ), (`DEF_%s_len), (`IF_IDX(0)) );\n'''%(sm_idx, gen_name,) + if __name__ == '__main__': genPkt = GenPkt() #------------------------------------------------------------------------- #>>>>>>嗅探数据包 genPkt.setPktType(1) - genPkt.gen("./generated/shin/detect_pkt.vh", 1) + gen_file_def = "detect_pkt" + sm_idx = 0 + + genPkt.addAfterExc(genWriteTransLenCode(gen_file_def, sm_idx) + +genWriteTransPktCode(gen_file_def, sm_idx) + +genTrgTransPktCode(gen_file_def, sm_idx) + +genReadAckPktCode(gen_file_def, sm_idx)) + genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1) #------------------------------------------------------------------------- #>>>>>>普通数据包 sm1 @@ -378,7 +412,7 @@ if __name__ == '__main__': genPkt.clean() genPkt.setPktType(0) gen_file_def = "sync_sig2_pkt" - sm_idx = 0 + sm_idx = 3 genPkt.addBeforeExc( '''spi_trans( (16'h0100), (`SPI_READ), (8), (`IF_IDX(0)));\n''' @@ -427,33 +461,15 @@ if __name__ == '__main__': data[28] = 0x0 #sync1偏移 data[29] = 0x0 - data[36] = 0x0#sync3偏移 + data[36] = 0x0 #sync3偏移 data[37] = 0x0 genPkt.addSubPkt(3, 0, 0x120, 0x1, 0x28, data) - genPkt.addAfterExc( - '''\n//写入发送长度\n''' - + '''`DEF_%s_sm(txBuf);\n'''%(gen_file_def, ) - + '''spi_trans( (`MST_TX%d_LEN_ADDR), (`SPI_WRITE), (2), (`IF_IDX(0)) );\n'''%(sm_idx,) - + '''spi_trans( (`MST_RX%d_LEN_ADDR), (`SPI_WRITE), (2), (`IF_IDX(0)) );\n'''%(sm_idx,) - + '''\n$fdisplay(spidata_file, "<<发包:");\n''' - + '''`DEF_%s(txBuf);\n'''%(gen_file_def, ) - + '''spi_trans( (`MST_TX%d_ADDR), (`SPI_WRITE), (`DEF_%s_len), (`IF_IDX(0)) );\n'''%(sm_idx, gen_file_def, ) - - #+ '''//写入替换时间戳替换地址\n''' - #+ '''txBuf[0+3] = 8'h0c;\n''' - #+ '''txBuf[1+3] = 8'hc0;\n''' - #+ '''spi_trans( (16'h24), (`SPI_WRITE), (2), (`IF_IDX(0)) );\n''' - - + '''\n//请求发送\n''' - + '''txBuf[0+3] = `MST_TX_TRIGGER(%d);\n'''%(sm_idx, ) - + '''spi_trans( (16'h20), (`SPI_WRITE), (1), (`IF_IDX(0)) );\n''' - - + '''\n//等待回包\n''' - + '''@(posedge isResp) #5 begin end\n''' - + '''$fdisplay(spidata_file, ">>回包:");\n''' - + '''spi_trans( (`MST_RX%d_ADDR), (`SPI_READ), (`DEF_%s_len), (`IF_IDX(0)) );\n'''%(sm_idx, gen_file_def,)) + genPkt.addAfterExc(genWriteTransLenCode(gen_file_def, sm_idx) + +genWriteTransPktCode(gen_file_def, sm_idx) + +genTrgTransPktCode(gen_file_def, sm_idx) + +genReadAckPktCode(gen_file_def, sm_idx)) genPkt.gen("./generated/shin/%s.vh"%(gen_file_def,), 1) From af0c0ec8fccaa697dfaa16d59d71939952fd32e6 Mon Sep 17 00:00:00 2001 From: bacon Date: Wed, 28 May 2025 10:01:59 +0800 Subject: [PATCH 4/7] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E7=94=A8=E4=BE=8B=E7=BB=93=E6=9D=9F=E7=9A=84=E6=9D=A1=E4=BB=B6?= =?UTF-8?q?;=E4=BF=AE=E6=AD=A3=E5=90=8C=E6=AD=A5=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E7=94=A8=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tb/shinTest/ShinTopSpiTb.v | 144 ++----------------------------------- tb/shinTest/gen_pkt.py | 101 +++++++++++++++++++++++--- 2 files changed, 98 insertions(+), 147 deletions(-) diff --git a/tb/shinTest/ShinTopSpiTb.v b/tb/shinTest/ShinTopSpiTb.v index 2322b82..deea31f 100644 --- a/tb/shinTest/ShinTopSpiTb.v +++ b/tb/shinTest/ShinTopSpiTb.v @@ -231,50 +231,8 @@ initial begin #240 reset <= 0; -`ifdef ENABLE_REG_RW_TEST - #1000000 -`endif - -`ifdef ENABLE_DET_TESTENABLE_SM1_SEND_TEST - #900000 -`endif - -`ifdef ENABLE_SET_ADDR_TEST - #900000 -`endif - -`ifdef ENABLE_SM1_SEND_TEST - #500000 -`endif - -`ifdef ENABLE_SMx_SEND_TEST - #1000000 -`endif - -`ifdef ENABLE_EXCHG_DATA_SEQ_TEST - `ifdef ENABLE_EXCHG_DATA_SEQ0_TEST - #3500000 - `endif - `ifdef ENABLE_EXCHG_DATA_SEQ1_TEST - #3500000 - `endif - `ifdef ENABLE_EXCHG_DATA_SEQ2_TEST - #6000000 - `endif - `ifdef ENABLE_EXCHG_DATA_BC_TEST - #2000000 - `endif -`endif -`ifdef ENABLE_SYNC_TEST - #3000000 - #500000 - #1000000 - #2000000 - //#10000000 -`endif - //#20000000 -#1000000 +#1000000000 $display("Time Out !!!"); $fclose(spidata_file); @@ -780,27 +738,6 @@ initial begin `include "sm1_pkt.vh" - //设置SM1在写入0x3地址触发enq - `DEF_sm1_pkt_sm(txBuf); - spi_trans( (`MST_TX1_LEN_ADDR), (`SPI_WRITE), (2), (`IF_IDX(0)) ); - spi_trans( (`MST_RX1_LEN_ADDR), (`SPI_WRITE), (2), (`IF_IDX(0)) ); - - //无子报文MST_TX1_LEN_ADDR - $fdisplay(spidata_file, "<<发包:"); - `DEF_sm1_pkt(txBuf); - spi_trans( (`MST_TX1_ADDR), (`SPI_WRITE), (`DEF_sm1_pkt_len), (`IF_IDX(0)) ); //写入SM1 - - //发布请求 - - //txBuf[0+3] = `MST_TX_TRIGGER(1); - txBuf[0+3] = 8'b01011; - spi_trans( (16'h20), (`SPI_WRITE), (1), (`IF_IDX(0)) );//发送SM1 接收SM1, 请求发送 - - @(posedge isResp) #5 begin end - - $fdisplay(spidata_file, ">>回包:"); - spi_trans( (`MST_RX1_ADDR), (`SPI_READ), (`DEF_sm1_pkt_len), (`IF_IDX(0)) );//读一下SM0的切换地址,将fifo弹出 - _t_end = $time; $fdisplay(spidata_file, "该测试用例运行时间:%2tns", (_t_end - _t_start) / 1000); end @@ -820,20 +757,6 @@ initial begin `include "sm2_pkt.vh" - `DEF_sm2_pkt_sm(txBuf); - spi_trans( (`MST_TX2_LEN_ADDR), (`SPI_WRITE), (2), (`IF_IDX(0)) ); - spi_trans( (`MST_RX2_LEN_ADDR), (`SPI_WRITE), (2), (`IF_IDX(0)) ); - - $fdisplay(spidata_file, "<<发包:"); - `DEF_sm2_pkt(txBuf); - spi_trans( (`MST_TX2_ADDR), (`SPI_WRITE), (`DEF_sm2_pkt_len), (`IF_IDX(0)) ); //写入SM1 - //发布请求 - txBuf[0+3] = `MST_TX_TRIGGER(2);//`MST_TX_TRG;//`MST_TX_TRIGGER(1); - spi_trans( (16'h20), (`SPI_WRITE), (1), (`IF_IDX(0)) );//发送SM0 接收SM0, 请求发送 - @(posedge isResp) #5 begin end - - $fdisplay(spidata_file, ">>回包:"); - spi_trans( (`MST_RX2_ADDR), (`SPI_READ), (`DEF_sm2_pkt_len), (`IF_IDX(0)) );//读一下SM0的切换地址,将fifo弹出 _t_end = $time; $fdisplay(spidata_file, "该测试用例运行时间:%2tns", (_t_end - _t_start) / 1000); end @@ -848,21 +771,6 @@ initial begin `include "sm3_pkt.vh" - `DEF_sm3_pkt_sm(txBuf); - spi_trans( (`MST_TX3_LEN_ADDR), (`SPI_WRITE), (2), (`IF_IDX(0)) ); - spi_trans( (`MST_RX3_LEN_ADDR), (`SPI_WRITE), (2), (`IF_IDX(0)) ); - - $fdisplay(spidata_file, "<<发包:"); - `DEF_sm3_pkt(txBuf); - spi_trans( (`MST_TX3_ADDR), (`SPI_WRITE), (`DEF_sm3_pkt_len), (`IF_IDX(0)) ); //写入SM1 - //发布请求 - txBuf[0+3] = `MST_TX_TRIGGER(3);//`MST_TX_TRG;//`MST_TX_TRIGGER(1); - spi_trans( (16'h20), (`SPI_WRITE), (1), (`IF_IDX(0)) );//发送SM0 接收SM0, 请求发送 - @(posedge isResp) #5 begin end - - $fdisplay(spidata_file, ">>回包:"); - spi_trans( (`MST_RX3_ADDR), (`SPI_READ), (`DEF_sm3_pkt_len), (`IF_IDX(0)) );//读一下SM0的切换地址,将fifo弹出 - spi_trans( (16'h0800), (`SPI_READ), (16), (`IF_IDX(1)) ); spi_trans( (16'h0800), (`SPI_READ), (16), (`IF_IDX(2)) ); spi_trans( (16'h0800), (`SPI_READ), (16), (`IF_IDX(3)) ); @@ -894,21 +802,7 @@ initial begin $fdisplay(spidata_file, "--->>>交换数据sm0~sm7"); `include "seq_0_pkt.vh" - //设置SM1在写入516 len触发enq - `DEF_seq_0_pkt_sm(txBuf); - spi_trans( (`MST_TX_LEN_ADDR), (`SPI_WRITE), (2), (`IF_IDX(0)) ); - spi_trans( (`MST_RX_LEN_ADDR), (`SPI_WRITE), (2), (`IF_IDX(0)) ); - $fdisplay(spidata_file, "<<发包:"); - `DEF_seq_0_pkt(txBuf); - spi_trans( (`MST_TX_ADDR), (`SPI_WRITE), (`DEF_seq_0_pkt_len), (`IF_IDX(0)) ); //写入SM1 - //发布请求 - txBuf[0+3] = `MST_TX_TRG; - spi_trans( (16'h20), (`SPI_WRITE), (1), (`IF_IDX(0)) );//发送SM0 接收SM0, 请求发送 - @(posedge isResp) #5 begin end - $fdisplay(spidata_file, ">>回包:"); - spi_trans( (`MST_RX_ADDR), (`SPI_READ), (`DEF_seq_0_pkt_len), (`IF_IDX(0)) );//读一下SM0的切换地址,将fifo弹出 - _t_end = $time; $fdisplay(spidata_file, "该测试用例运行时间:%2tns", (_t_end - _t_start) / 1000); end @@ -922,21 +816,6 @@ initial begin $fdisplay(spidata_file, "\n--->>>交换数据写dev2_sm0/dev1_sm2/dev3_sm4/dev4_sm6"); `include "seq_1_pkt.vh" - `DEF_seq_1_pkt_sm(txBuf); - spi_trans( (`MST_TX_LEN_ADDR), (`SPI_WRITE), (2), (`IF_IDX(0)) ); - spi_trans( (`MST_RX_LEN_ADDR), (`SPI_WRITE), (2), (`IF_IDX(0)) ); - - $fdisplay(spidata_file, "<<发包:"); - `DEF_seq_1_pkt(txBuf); - spi_trans( (`MST_TX_ADDR), (`SPI_WRITE), (`DEF_seq_1_pkt_len), (`IF_IDX(0)) ); //写入SM1 - //发布请求 - txBuf[0+3] = `MST_TX_TRG; - spi_trans( (16'h20), (`SPI_WRITE), (1), (`IF_IDX(0)) );//发送SM0 接收SM0, 请求发送 - @(posedge isResp) #5 begin end - - $fdisplay(spidata_file, ">>回包:"); - spi_trans( (`MST_RX_ADDR), (`SPI_READ), (`DEF_seq_1_pkt_len), (`IF_IDX(0)) );//读一下SM0的切换地址,将fifo弹出 - spi_trans( (16'h1800), (`SPI_READ), (64), (`IF_IDX(1)) ); spi_trans( (16'h0800), (`SPI_READ), (64), (`IF_IDX(2)) ); spi_trans( (16'h2800), (`SPI_READ), (64), (`IF_IDX(3)) ); @@ -993,21 +872,6 @@ initial begin `include "seq_2_pkt.vh" - $fdisplay(spidata_file, "<<发包:"); - `DEF_seq_2_pkt_sm(txBuf); - spi_trans( (`MST_TX_LEN_ADDR), (`SPI_WRITE), (2), (`IF_IDX(0)) ); - spi_trans( (`MST_RX_LEN_ADDR), (`SPI_WRITE), (2), (`IF_IDX(0)) ); - - `DEF_seq_2_pkt(txBuf); - spi_trans( (`MST_TX_ADDR), (`SPI_WRITE), (`DEF_seq_2_pkt_len), (`IF_IDX(0)) ); //写入SM1 - //发布请求 - txBuf[0+3] = `MST_TX_TRG; - spi_trans( (16'h20), (`SPI_WRITE), (1), (`IF_IDX(0)) );//发送SM0 接收SM0, 请求发送 - @(posedge isResp) #5 begin end - - $fdisplay(spidata_file, ">>回包:"); - spi_trans( (`MST_RX_ADDR), (`SPI_READ), (`DEF_seq_2_pkt_len), (`IF_IDX(0)) );//读一下SM0的切换地址,将fifo弹出 - _t_end = $time; $fdisplay(spidata_file, "该测试用例运行时间:%2tns", (_t_end - _t_start) / 1000); end @@ -1211,8 +1075,10 @@ initial begin spi_trans( (16'h40), (`SPI_WRITE), (1), (`IF_IDX(1)) );//复位从站2 */ - - + #2000000 + $display("Testcase Finished! Time Out !!!"); + $fclose(spidata_file); + $stop; end diff --git a/tb/shinTest/gen_pkt.py b/tb/shinTest/gen_pkt.py index d4875ca..5c4d8f9 100755 --- a/tb/shinTest/gen_pkt.py +++ b/tb/shinTest/gen_pkt.py @@ -238,7 +238,16 @@ if __name__ == '__main__': genPkt.addSubPkt(0x03, 0, 0xc0, 0x0, 64, None) #genPkt.addSubPkt(10, 2, 0x300, 0x2, 4, None) #genPkt.addSubPkt(11, 1, 0x300, 0x2, 4, None) - genPkt.gen("./generated/shin/sm1_pkt.vh", 1) + + gen_file_def = "sm1_pkt" + sm_idx = 1 + + genPkt.addAfterExc(genWriteTransLenCode(gen_file_def, sm_idx) + +genWriteTransPktCode(gen_file_def, sm_idx) + +genTrgTransPktCode(gen_file_def, sm_idx) + +genReadAckPktCode(gen_file_def, sm_idx)) + + genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1) #------------------------------------------------------------------------- @@ -251,7 +260,16 @@ if __name__ == '__main__': genPkt.addSubPkt(0x01, 0, 0x00, 0xd, 128, None) #genPkt.addSubPkt(10, 2, 0x300, 0x2, 4, None) #genPkt.addSubPkt(11, 1, 0x300, 0x2, 4, None) - genPkt.gen("./generated/shin/sm2_pkt.vh", 1) + + + gen_file_def = "sm2_pkt" + sm_idx = 2 + + genPkt.addAfterExc(genWriteTransLenCode(gen_file_def, sm_idx) + +genWriteTransPktCode(gen_file_def, sm_idx) + +genTrgTransPktCode(gen_file_def, sm_idx) + +genReadAckPktCode(gen_file_def, sm_idx)) + genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1) #------------------------------------------------------------------------- @@ -270,7 +288,15 @@ if __name__ == '__main__': data[i] = i + 1 genPkt.addSubPkt(random.randint(0, 2048), 0, 0x0800, 0xe, 16, data) #0x1800, 0xe, 16, data) - genPkt.gen("./generated/shin/sm3_pkt.vh", 1) + gen_file_def = "sm3_pkt" + sm_idx = 3 + + genPkt.addAfterExc(genWriteTransLenCode(gen_file_def, sm_idx) + +genWriteTransPktCode(gen_file_def, sm_idx) + +genTrgTransPktCode(gen_file_def, sm_idx) + +genReadAckPktCode(gen_file_def, sm_idx)) + + genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1) #------------------------------------------------------------------------- @@ -288,7 +314,16 @@ if __name__ == '__main__': 56, None) #genPkt.addSubPkt(10, 2, 0x300, 0x2, 4, None) #genPkt.addSubPkt(11, 1, 0x300, 0x2, 4, None) - genPkt.gen("./generated/shin/seq_0_pkt.vh", 1) + + + gen_file_def = "seq_0_pkt" + sm_idx = 0 + + genPkt.addAfterExc(genWriteTransLenCode(gen_file_def, sm_idx) + +genWriteTransPktCode(gen_file_def, sm_idx) + +genTrgTransPktCode(gen_file_def, sm_idx) + +genReadAckPktCode(gen_file_def, sm_idx)) + genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1) #------------------------------------------------------------------------- #>>>>>>普通数据包0,用来操作sync @@ -348,7 +383,16 @@ if __name__ == '__main__': data[14] = ord('A') genPkt.addSubPkt(0x04, 0, 0x3800, 0x1, 64, data) - genPkt.gen("./generated/shin/seq_1_pkt.vh", 1) + + gen_file_def = "seq_1_pkt" + sm_idx = 0 + + genPkt.addAfterExc(genWriteTransLenCode(gen_file_def, sm_idx) + +genWriteTransPktCode(gen_file_def, sm_idx) + +genTrgTransPktCode(gen_file_def, sm_idx) + +genReadAckPktCode(gen_file_def, sm_idx)) + + genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1) #------------------------------------------------------------------------- #>>>>>>普通数据包2 @@ -365,7 +409,15 @@ if __name__ == '__main__': genPkt.addSubPkt(3, 0, 0x0316, 0x0, 2, b"\0"*2) genPkt.addSubPkt(4, 0, 0x031e, 0x0, 2, b"\0"*2) - genPkt.gen("./generated/shin/seq_2_pkt.vh", 1) + gen_file_def = "seq_2_pkt" + sm_idx = 0 + + genPkt.addAfterExc(genWriteTransLenCode(gen_file_def, sm_idx) + +genWriteTransPktCode(gen_file_def, sm_idx) + +genTrgTransPktCode(gen_file_def, sm_idx) + +genReadAckPktCode(gen_file_def, sm_idx)) + + genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1) #------------------------------------------------------------------------- #>>>>>>同步数据包 @@ -402,9 +454,19 @@ if __name__ == '__main__': data[37] = 0x00 genPkt.addSubPkt(random.randint(0, 2048), 0, 0x120, 0xe, 0x28, data) - - genPkt.gen("./generated/shin/sync_sig_pkt.vh", 1) + gen_file_def = "sync_sig_pkt" + ''' + sm_idx = 0 + + genPkt.addAfterExc(genWriteTransLenCode(gen_file_def, sm_idx) + +genWriteTransPktCode(gen_file_def, sm_idx) + +genTrgTransPktCode(gen_file_def, sm_idx) + +genReadAckPktCode(gen_file_def, sm_idx)) + + ''' + + genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1) #------------------------------------------------------------------------- @@ -465,6 +527,29 @@ if __name__ == '__main__': data[37] = 0x0 genPkt.addSubPkt(3, 0, 0x120, 0x1, 0x28, data) + + data = [0,] * 100 #bytearray(b"\0" * 100) + data[0] = 0x0f #地址0x120 + data[2] = 0xa + data[4] = 0xa + data[6] = 0xa + data[8] = 0xa + + data[16] = '''(_temp_time & 8'hff)''' #地址0x130, sync同步点 + data[17] = '''(_temp_time >> 8) & 8'hff''' #地址0x131 + data[18] = '''(_temp_time >> 16) & 8'hff''' + data[19] = '''(_temp_time >> 24) & 8'hff''' + + data[24] = 0x00 #地址0x138, sync周期 4B + data[25] = 0x02 #地址0x139 + + data[28] = 0x0 #sync1偏移 + data[29] = 0x0 + + data[36] = 0x0 #sync3偏移 + data[37] = 0x0 + + genPkt.addSubPkt(4, 0, 0x120, 0x1, 0x28, data) genPkt.addAfterExc(genWriteTransLenCode(gen_file_def, sm_idx) +genWriteTransPktCode(gen_file_def, sm_idx) From f42e4c3dfad3ecf77c6fea2ca32d7c7fd0083e63 Mon Sep 17 00:00:00 2001 From: bacon Date: Wed, 28 May 2025 10:34:26 +0800 Subject: [PATCH 5/7] =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E7=9A=84=E6=B5=8B=E8=AF=95=E7=94=A8=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tb/shinTest/ShinTopSpiTb.v | 57 +++++++++++++------------------------- tb/shinTest/gen_pkt.py | 20 +++++++------ 2 files changed, 31 insertions(+), 46 deletions(-) diff --git a/tb/shinTest/ShinTopSpiTb.v b/tb/shinTest/ShinTopSpiTb.v index deea31f..6c07a6e 100644 --- a/tb/shinTest/ShinTopSpiTb.v +++ b/tb/shinTest/ShinTopSpiTb.v @@ -11,6 +11,8 @@ //`define ENABLE_EXCHG_DATA_SEQ2_TEST //`define ENABLE_EXCHG_DATA_BC_TEST `define ENABLE_SYNC_TEST +`define ENABLE_SYNC_SIG0_TEST +`define ENABLE_SYNC_SIG1_TEST module ShinTopSpiTb( @@ -950,7 +952,7 @@ initial begin ---------------------------------------------------------------------------------------------------------*/ // 同步 - begin:SYNC_TESTCASE + begin:SYNC_TESTCASE0 _t_start = $time; #1000 @@ -986,40 +988,16 @@ initial begin spi_trans( (16'h25), (`SPI_WRITE), (2), (`IF_IDX(0)) ); //清除替换时间戳替换地址寄存器 + _t_end = $time; + $fdisplay(spidata_file, "该测试用例运行时间:%2tns", (_t_end - _t_start) / 1000); + end +`endif + +`ifdef ENABLE_SYNC_SIG0_TEST + begin:SYNC_TESTCASE1 + _t_start = $time; + #1000 `include "sync_sig_pkt.vh" - `DEF_sync_sig_pkt_sm(txBuf); - spi_trans( (`MST_TX_LEN_ADDR), (`SPI_WRITE), (2), (`IF_IDX(0)) ); - spi_trans( (`MST_RX_LEN_ADDR), (`SPI_WRITE), (2), (`IF_IDX(0)) ); - - spi_trans( (16'h0100), (`SPI_READ), (8), (`IF_IDX(0))); - _temp_time = rxBuf[3] + (rxBuf[4] << 8) + (rxBuf[5] << 16) + (rxBuf[6] << 24) + - (rxBuf[7] << 32) + (rxBuf[8] << 40) + (rxBuf[9] << 48) + (rxBuf[10] << 56); - /* - $fdisplay(spidata_file, "读取时间:%d\n", _temp_time); - */ - _temp_time = _temp_time + 32'h3000; - /* - $fdisplay(spidata_file, "读取时间:%2h %2h %2h\n", - (_temp_time & 8'hff), - ((_temp_time >> 8) & 8'hff), - ((_temp_time >> 16) & 8'hff)); - */ - - $fdisplay(spidata_file, "<<发包:"); - `DEF_sync_sig_pkt(txBuf); - - txBuf[16 + 3 + 12] = (_temp_time & 8'hff); - txBuf[17 + 3 + 12] = (_temp_time >> 8) & 8'hff; - txBuf[18 + 3 + 12] = (_temp_time >> 16) & 8'hff; - - spi_trans( (`MST_TX_ADDR), (`SPI_WRITE), (`DEF_sync_sig_pkt_len), (`IF_IDX(0)) ); //写入SM1 - - //发布请求 - txBuf[0+3] = `MST_TX_TRG; - spi_trans( (16'h20), (`SPI_WRITE), (1), (`IF_IDX(0)) );//发送SM0 接收SM0, 请求发送 - @(posedge isResp) #5 begin end - $fdisplay(spidata_file, ">>回包:"); - spi_trans( (`MST_RX_ADDR), (`SPI_READ), (`DEF_sync_sig_pkt_len), (`IF_IDX(0)) );//读一下SM0的切换地址,将fifo弹出 //spi_trans( (16'h0100), (`SPI_READ), (32), (`IF_IDX(0)) ); spi_trans( (16'h0100), (`SPI_READ), (16'h48), (`IF_IDX(1)) ); @@ -1027,8 +1005,8 @@ initial begin spi_trans( (16'h0100), (`SPI_READ), (16'h48), (`IF_IDX(3)) ); spi_trans( (16'h0100), (`SPI_READ), (16'h48), (`IF_IDX(4)) ); - /* - #10000 + + #100000 //清脉冲 txBuf[0+3] = 0; //负载0x122 sync0脉冲宽度 txBuf[1+3] = 0; //负载0x123 @@ -1042,11 +1020,14 @@ initial begin spi_trans( (16'h0122), (`SPI_WRITE), (8), (`IF_IDX(2)) ); //slv2 spi_trans( (16'h0122), (`SPI_WRITE), (8), (`IF_IDX(3)) ); //slv2 spi_trans( (16'h0122), (`SPI_WRITE), (8), (`IF_IDX(4)) ); //slv2 - */ + + #100000 _t_end = $time; $fdisplay(spidata_file, "该测试用例运行时间:%2tns", (_t_end - _t_start) / 1000); end +`endif +`ifdef ENABLE_SYNC_SIG1_TEST begin:SYNC_TESTCASE2 _t_start = $time; #1000 @@ -1075,7 +1056,7 @@ initial begin spi_trans( (16'h40), (`SPI_WRITE), (1), (`IF_IDX(1)) );//复位从站2 */ - #2000000 + #1000000 $display("Testcase Finished! Time Out !!!"); $fclose(spidata_file); $stop; diff --git a/tb/shinTest/gen_pkt.py b/tb/shinTest/gen_pkt.py index 5c4d8f9..93998d2 100755 --- a/tb/shinTest/gen_pkt.py +++ b/tb/shinTest/gen_pkt.py @@ -432,20 +432,26 @@ if __name__ == '__main__': genPkt.clean() genPkt.setPktType(0) + genPkt.addBeforeExc( + '''spi_trans( (16'h0100), (`SPI_READ), (8), (`IF_IDX(0)));\n''' + + '''_temp_time = rxBuf[3] + (rxBuf[4] << 8) + (rxBuf[5] << 16) + (rxBuf[6] << 24) + (rxBuf[7] << 32) + (rxBuf[8] << 40) + (rxBuf[9] << 48) + (rxBuf[10] << 56);\n''' + + '''_temp_time = _temp_time + 32'h2000;\n\n''') + #subPkt参数:索引、索引类型、地址、命令、长度、数据 - data = bytearray(b"\0" * 100) + data = [0,] * 100 #bytearray(b"\0" * 100) data[0] = 0xff #地址0x120 data[2] = 0xa data[4] = 0xa data[6] = 0xa data[8] = 0xa - data[16] = 0x00 #地址0x130, sync同步点 - data[17] = 0x00 #地址0x131 - #data[18] = 0x10 + data[16] = '''(_temp_time & 8'hff)''' #地址0x130, sync同步点 + data[17] = '''(_temp_time >> 8) & 8'hff''' #地址0x131 + data[18] = '''(_temp_time >> 16) & 8'hff''' + data[19] = '''(_temp_time >> 24) & 8'hff''' - data[24] = 0x80 #地址0x138, sync周期 4B - data[25] = 0x00 #地址0x139 + data[24] = 0x00 #地址0x138, sync周期 4B + data[25] = 0x10 #地址0x139 data[28] = 0x81 #sync1偏移 data[29] = 0x0 @@ -456,7 +462,6 @@ if __name__ == '__main__': genPkt.addSubPkt(random.randint(0, 2048), 0, 0x120, 0xe, 0x28, data) gen_file_def = "sync_sig_pkt" - ''' sm_idx = 0 genPkt.addAfterExc(genWriteTransLenCode(gen_file_def, sm_idx) @@ -464,7 +469,6 @@ if __name__ == '__main__': +genTrgTransPktCode(gen_file_def, sm_idx) +genReadAckPktCode(gen_file_def, sm_idx)) - ''' genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1) From f09cc0cb0ec9d4bf8cab2c980498de63a2f9357c Mon Sep 17 00:00:00 2001 From: bacon Date: Wed, 28 May 2025 13:56:39 +0800 Subject: [PATCH 6/7] =?UTF-8?q?=E6=94=B9=E5=86=99=E4=BA=86=E5=85=A8?= =?UTF-8?q?=E9=83=A8=E7=9A=84=E6=B5=8B=E8=AF=95=E7=94=A8=E4=BE=8B,?= =?UTF-8?q?=E7=94=A8python=E7=94=9F=E6=88=90=E6=95=B0=E6=8D=AE=E5=92=8C?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E7=9A=84=E8=BE=85=E5=8A=A9=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tb/shinTest/ShinTopSpiTb.v | 121 +++++++------------------------------ tb/shinTest/gen_pkt.py | 80 +++++++++++++++++++++--- 2 files changed, 94 insertions(+), 107 deletions(-) diff --git a/tb/shinTest/ShinTopSpiTb.v b/tb/shinTest/ShinTopSpiTb.v index 6c07a6e..be4d92b 100644 --- a/tb/shinTest/ShinTopSpiTb.v +++ b/tb/shinTest/ShinTopSpiTb.v @@ -3,13 +3,13 @@ `define ENABLE_REG_RW_TEST `define ENABLE_DET_TEST `define ENABLE_SET_ADDR_TEST -//`define ENABLE_SM1_SEND_TEST -//`define ENABLE_SMx_SEND_TEST +`define ENABLE_SM1_SEND_TEST +`define ENABLE_SMx_SEND_TEST `define ENABLE_EXCHG_DATA_SEQ_TEST - //`define ENABLE_EXCHG_DATA_SEQ0_TEST - //`define ENABLE_EXCHG_DATA_SEQ1_TEST - //`define ENABLE_EXCHG_DATA_SEQ2_TEST - //`define ENABLE_EXCHG_DATA_BC_TEST + `define ENABLE_EXCHG_DATA_SEQ0_TEST + `define ENABLE_EXCHG_DATA_SEQ1_TEST + `define ENABLE_EXCHG_DATA_SEQ2_TEST + `define ENABLE_EXCHG_DATA_BC_TEST `define ENABLE_SYNC_TEST `define ENABLE_SYNC_SIG0_TEST `define ENABLE_SYNC_SIG1_TEST @@ -548,7 +548,7 @@ initial begin spi_trans( (16'h00), (`SPI_READ), (64), (`IF_IQSPI(3)) ); spi_trans( (16'h00), (`SPI_READ), (64), (`IF_IQSPI(4)) ); _t_end = $time; - $fdisplay(spidata_file, "该测试用例运行时间:%2tns", (_t_end - _t_start) / 1000); + $fdisplay(spidata_file, "该测试用例运行时间:%2tns\n", (_t_end - _t_start) / 1000); end `endif @@ -637,7 +637,7 @@ initial begin spi_trans( (16'h00c0), (`SPI_READ), (6), (`IF_IDX(3)) ); spi_trans( (16'h00c0), (`SPI_READ), (6), (`IF_IDX(4)) ); _t_end = $time; - $fdisplay(spidata_file, "该测试用例运行时间:%2tns", (_t_end - _t_start) / 1000); + $fdisplay(spidata_file, "该测试用例运行时间:%2tns\n", (_t_end - _t_start) / 1000); end `endif @@ -659,23 +659,7 @@ initial begin $fdisplay(spidata_file, "--->>>设置顺序地址"); `include "set_addr_pkt.vh" - //长度 - `DEF_set_addr_pkt_sm(txBuf); - spi_trans( (`MST_TX_LEN_ADDR), (`SPI_WRITE), (2), (`IF_IDX(0)) ); - spi_trans( (`MST_RX_LEN_ADDR), (`SPI_WRITE), (2), (`IF_IDX(0)) ); - //子报文 - $fdisplay(spidata_file, "<<发包:"); - `DEF_set_addr_pkt(txBuf); - spi_trans( (`MST_TX_ADDR), (`SPI_WRITE), (`DEF_set_addr_pkt_len), (`IF_IDX(0)) ); //写入SM1 - - //发布请求 - txBuf[0+3] = `MST_TX_TRG; - spi_trans( (16'h20), (`SPI_WRITE), (1), (`IF_IDX(0)) );//发送SM0 接收SM0, 请求发送 - @(posedge isResp) #5 begin end - $fdisplay(spidata_file, ">>回包:"); - spi_trans( (`MST_RX_ADDR), (`SPI_READ), (`DEF_set_addr_pkt_len), (`IF_IDX(0)) );//读一下SM0的切换地址,将fifo弹出 - //测试 spi_trans( (16'hc0), (`SPI_READ), (6), (`IF_IDX(3)) ); spi_trans( (16'h0a), (`SPI_READ), (2), (`IF_IDX(1)) ); @@ -686,14 +670,13 @@ initial begin //读写 #1000 $fdisplay(spidata_file, "--->>>设置顺序地址后,检查顺序地址"); - //spi_trans( (16'h0010), (`SPI_READ), (5), (`IF_IDX(0)) ); spi_trans( (16'h0000), (`SPI_READ), (16), (`IF_IDX(1)) ); spi_trans( (16'h0000), (`SPI_READ), (16), (`IF_IDX(2)) ); spi_trans( (16'h0000), (`SPI_READ), (16), (`IF_IDX(3)) ); spi_trans( (16'h0000), (`SPI_READ), (16), (`IF_IDX(4)) ); _t_end = $time; - $fdisplay(spidata_file, "该测试用例运行时间:%2tns", (_t_end - _t_start) / 1000); + $fdisplay(spidata_file, "该测试用例运行时间:%2tns\n", (_t_end - _t_start) / 1000); end `endif @@ -727,7 +710,7 @@ initial begin spi_trans( (16'h00c0), (`SPI_READ), (6), (`IF_IDX(3)) ); spi_trans( (16'h00c0), (`SPI_READ), (6), (`IF_IDX(4)) ); _t_end = $time; - $fdisplay(spidata_file, "该测试用例运行时间:%2tns", (_t_end - _t_start) / 1000); + $fdisplay(spidata_file, "该测试用例运行时间:%2tns\n", (_t_end - _t_start) / 1000); end `endif @@ -741,7 +724,7 @@ initial begin `include "sm1_pkt.vh" _t_end = $time; - $fdisplay(spidata_file, "该测试用例运行时间:%2tns", (_t_end - _t_start) / 1000); + $fdisplay(spidata_file, "该测试用例运行时间:%2tns\n", (_t_end - _t_start) / 1000); end `endif @@ -760,7 +743,7 @@ initial begin `include "sm2_pkt.vh" _t_end = $time; - $fdisplay(spidata_file, "该测试用例运行时间:%2tns", (_t_end - _t_start) / 1000); + $fdisplay(spidata_file, "该测试用例运行时间:%2tns\n", (_t_end - _t_start) / 1000); end @@ -779,7 +762,7 @@ initial begin spi_trans( (16'h0800), (`SPI_READ), (16), (`IF_IDX(4)) ); _t_end = $time; - $fdisplay(spidata_file, "该测试用例运行时间:%2tns", (_t_end - _t_start) / 1000); + $fdisplay(spidata_file, "该测试用例运行时间:%2tns\n", (_t_end - _t_start) / 1000); end `endif @@ -806,7 +789,7 @@ initial begin `include "seq_0_pkt.vh" _t_end = $time; - $fdisplay(spidata_file, "该测试用例运行时间:%2tns", (_t_end - _t_start) / 1000); + $fdisplay(spidata_file, "该测试用例运行时间:%2tns\n", (_t_end - _t_start) / 1000); end `endif @@ -824,7 +807,7 @@ initial begin spi_trans( (16'h3800), (`SPI_READ), (64), (`IF_IDX(4)) ); _t_end = $time; - $fdisplay(spidata_file, "该测试用例运行时间:%2tns", (_t_end - _t_start) / 1000); + $fdisplay(spidata_file, "该测试用例运行时间:%2tns\n", (_t_end - _t_start) / 1000); end `endif @@ -875,7 +858,7 @@ initial begin `include "seq_2_pkt.vh" _t_end = $time; - $fdisplay(spidata_file, "该测试用例运行时间:%2tns", (_t_end - _t_start) / 1000); + $fdisplay(spidata_file, "该测试用例运行时间:%2tns\n", (_t_end - _t_start) / 1000); end `endif `endif @@ -888,25 +871,11 @@ initial begin $fdisplay(spidata_file, "\n\n测试用例:广播交换数据"); $display("read&write @ %d", s_ShinTop_Mst.interface__io_cReg_timeStamp); $fdisplay(spidata_file, "\n--->>>广播读"); + `include "bc_r_pkt.vh" - - `DEF_bc_r_pkt_sm(txBuf); - spi_trans( (`MST_TX_LEN_ADDR), (`SPI_WRITE), (2), (`IF_IDX(0)) ); - spi_trans( (`MST_RX_LEN_ADDR), (`SPI_WRITE), (2), (`IF_IDX(0)) ); - - $fdisplay(spidata_file, "<<发包:"); - `DEF_bc_r_pkt(txBuf); - spi_trans( (`MST_TX_ADDR), (`SPI_WRITE), (`DEF_bc_r_pkt_len), (`IF_IDX(0)) ); //写入SM1 - //发布请求 - txBuf[0+3] = `MST_TX_TRG; - spi_trans( (16'h20), (`SPI_WRITE), (1), (`IF_IDX(0)) );//发送SM0 接收SM0, 请求发送 - @(posedge isResp) #5 begin end - - $fdisplay(spidata_file, ">>回包:"); - spi_trans( (`MST_RX_ADDR), (`SPI_READ), (`DEF_bc_r_pkt_len), (`IF_IDX(0)) );//读一下SM0的切换地址,将fifo弹出 - + _t_end = $time; - $fdisplay(spidata_file, "该测试用例运行时间:%2tns", (_t_end - _t_start) / 1000); + $fdisplay(spidata_file, "该测试用例运行时间:%2tns\n", (_t_end - _t_start) / 1000); end @@ -919,28 +888,13 @@ initial begin $fdisplay(spidata_file, "\n--->>>广播写"); `include "bc_w_pkt.vh" - `DEF_bc_w_pkt_sm(txBuf); - spi_trans( (`MST_TX_LEN_ADDR), (`SPI_WRITE), (2), (`IF_IDX(0)) ); - spi_trans( (`MST_RX_LEN_ADDR), (`SPI_WRITE), (2), (`IF_IDX(0)) ); - - $fdisplay(spidata_file, "<<发包:"); - `DEF_bc_w_pkt(txBuf); - spi_trans( (`MST_TX_ADDR), (`SPI_WRITE), (`DEF_bc_w_pkt_len), (`IF_IDX(0)) ); //写入SM1 - //发布请求 - txBuf[0+3] = `MST_TX_TRG; - spi_trans( (16'h20), (`SPI_WRITE), (1), (`IF_IDX(0)) );//发送SM0 接收SM0, 请求发送 - @(posedge isResp) #5 begin end - - $fdisplay(spidata_file, ">>回包:"); - spi_trans( (`MST_RX_ADDR), (`SPI_READ), (`DEF_bc_w_pkt_len), (`IF_IDX(0)) );//读一下SM0的切换地址,将fifo弹出 - spi_trans( (16'h0800), (`SPI_READ), (32), (`IF_IDX(1)) ); spi_trans( (16'h0800), (`SPI_READ), (32), (`IF_IDX(2)) ); spi_trans( (16'h0800), (`SPI_READ), (32), (`IF_IDX(3)) ); spi_trans( (16'h0800), (`SPI_READ), (32), (`IF_IDX(4)) ); _t_end = $time; - $fdisplay(spidata_file, "该测试用例运行时间:%2tns", (_t_end - _t_start) / 1000); + $fdisplay(spidata_file, "该测试用例运行时间:%2tns\n", (_t_end - _t_start) / 1000); end `endif @@ -961,35 +915,9 @@ initial begin //设置SM1在写入 0x18 len触发enq `include "sync_pkt.vh" - `DEF_sync_pkt_sm(txBuf); - spi_trans( (`MST_TX_LEN_ADDR), (`SPI_WRITE), (2), (`IF_IDX(0)) ); - spi_trans( (`MST_RX_LEN_ADDR), (`SPI_WRITE), (2), (`IF_IDX(0)) ); - - $fdisplay(spidata_file, "<<发包:"); - `DEF_sync_pkt(txBuf); - spi_trans( (`MST_TX_ADDR), (`SPI_WRITE), (`DEF_sync_pkt_len), (`IF_IDX(0)) ); //写入SM1 - - //写入替换时间戳替换地址 - txBuf[0+3] = 8'h0c; - txBuf[1+3] = 8'hc0; - spi_trans( (16'h24), (`SPI_WRITE), (2), (`IF_IDX(0)) ); //写入替换时间戳替换地址寄存器 - - //发布请求 - txBuf[0+3] = `MST_TX_TRG; - spi_trans( (16'h20), (`SPI_WRITE), (1), (`IF_IDX(0)) );//发送SM0 接收SM0, 请求发送 - @(posedge isResp) #5 begin - $fdisplay(spidata_file, ">>回包:"); - spi_trans( (`MST_RX_ADDR), (`SPI_READ), (`DEF_sync_pkt_len), (`IF_IDX(0)) );//读一下SM0的切换地址,将fifo弹出 - end - - //清除替换时间戳替换地址 - txBuf[0+3] = 8'h00; - txBuf[1+3] = 8'h00; - - spi_trans( (16'h25), (`SPI_WRITE), (2), (`IF_IDX(0)) ); //清除替换时间戳替换地址寄存器 _t_end = $time; - $fdisplay(spidata_file, "该测试用例运行时间:%2tns", (_t_end - _t_start) / 1000); + $fdisplay(spidata_file, "该测试用例运行时间:%2tns\n", (_t_end - _t_start) / 1000); end `endif @@ -1023,7 +951,7 @@ initial begin #100000 _t_end = $time; - $fdisplay(spidata_file, "该测试用例运行时间:%2tns", (_t_end - _t_start) / 1000); + $fdisplay(spidata_file, "该测试用例运行时间:%2tns\n", (_t_end - _t_start) / 1000); end `endif @@ -1041,13 +969,10 @@ initial begin spi_trans( (16'h0100), (`SPI_READ), (16'h48), (`IF_IDX(4)) ); _t_end = $time; - $fdisplay(spidata_file, "该测试用例运行时间:%2tns", (_t_end - _t_start) / 1000); + $fdisplay(spidata_file, "该测试用例运行时间:%2tns\n", (_t_end - _t_start) / 1000); end `endif - - - /* #50000 //复位系统 diff --git a/tb/shinTest/gen_pkt.py b/tb/shinTest/gen_pkt.py index 93998d2..14437cc 100755 --- a/tb/shinTest/gen_pkt.py +++ b/tb/shinTest/gen_pkt.py @@ -184,13 +184,9 @@ class GenPkt(object): - #+ '''//写入替换时间戳替换地址\n''' - #+ '''txBuf[0+3] = 8'h0c;\n''' - #+ '''txBuf[1+3] = 8'hc0;\n''' - #+ '''spi_trans( (16'h24), (`SPI_WRITE), (2), (`IF_IDX(0)) );\n''' - def genWriteTransLenCode(gen_name, sm_idx): return '''\n//写入发送长度\n'''\ + + '''$fdisplay(spidata_file, "--写数据交换长度");\n'''\ + '''`DEF_%s_sm(txBuf);\n'''%(gen_name, )\ + '''spi_trans( (`MST_TX%d_LEN_ADDR), (`SPI_WRITE), (2), (`IF_IDX(0)) );\n'''%(sm_idx,)\ + '''spi_trans( (`MST_RX%d_LEN_ADDR), (`SPI_WRITE), (2), (`IF_IDX(0)) );\n'''%(sm_idx,) @@ -212,6 +208,26 @@ def genReadAckPktCode(gen_name, sm_idx): + '''$fdisplay(spidata_file, ">>回包:");\n'''\ + '''spi_trans( (`MST_RX%d_ADDR), (`SPI_READ), (`DEF_%s_len), (`IF_IDX(0)) );\n'''%(sm_idx, gen_name,) +def genEnableInsertTimeCode(pos, enableTime=True, enableDelay=True): + data = pos & 0x3fff + if enableTime: + data = data | 0x8000 + if enableDelay: + data = data | 0x4000 + return '''//写入替换时间戳替换地址\n'''\ + + '''$fdisplay(spidata_file, "--增加时间戳插入");\n'''\ + + '''txBuf[0+3] = 8'h%x;\n'''%(data & 0xff, )\ + + '''txBuf[1+3] = 8'h%x;\n'''%((data >> 8) & 0xff, )\ + + '''spi_trans( (16'h24), (`SPI_WRITE), (2), (`IF_IDX(0)) );\n''' + +def genDisableInsertTimeCode(): + return '''\n//清除替换时间戳替换地址\n'''\ + + '''$fdisplay(spidata_file, "--清除时间戳插入");\n'''\ + + '''txBuf[0+3] = 8'h00;\n'''\ + + '''txBuf[1+3] = 8'h00;\n'''\ + + '''spi_trans( (16'h25), (`SPI_WRITE), (2), (`IF_IDX(0)) ); //清除替换时间戳替换地址寄存器\n''' + + if __name__ == '__main__': genPkt = GenPkt() @@ -423,9 +439,30 @@ if __name__ == '__main__': #>>>>>>同步数据包 genPkt.clean() genPkt.setPktType(0) + + + + + #subPkt参数:索引、索引类型、地址、命令、长度、数据 genPkt.addSubPkt(0x0, 0, random.randint(0, 65535), 0xc, 12, b'\0'*12) - genPkt.gen("./generated/shin/sync_pkt.vh", 1) + + + genPkt.addBeforeExc(genEnableInsertTimeCode(0xc)) + + gen_file_def = "sync_pkt" + sm_idx = 0 + + genPkt.addAfterExc(genWriteTransLenCode(gen_file_def, sm_idx) + +genWriteTransPktCode(gen_file_def, sm_idx) + +genTrgTransPktCode(gen_file_def, sm_idx) + +genReadAckPktCode(gen_file_def, sm_idx) + +genDisableInsertTimeCode()) + + + genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1) + + #------------------------------------------------------------------------- #>>>>>>设置同步信号的数据包 @@ -576,7 +613,15 @@ if __name__ == '__main__': genPkt.addSubPkt(0x0, 0, random.randint(0, 65535), 0xb, 2, data) - genPkt.gen("./generated/shin/set_addr_pkt.vh", 1) + gen_file_def = "set_addr_pkt" + sm_idx = 0 + + genPkt.addAfterExc(genWriteTransLenCode(gen_file_def, sm_idx) + +genWriteTransPktCode(gen_file_def, sm_idx) + +genTrgTransPktCode(gen_file_def, sm_idx) + +genReadAckPktCode(gen_file_def, sm_idx)) + + genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1) #------------------------------------------------------------------------- @@ -595,7 +640,16 @@ if __name__ == '__main__': genPkt.addSubPkt(random.randint(0, 2048), 0, 0xc0, 0xd, 4, b"\0"*4) genPkt.addSubPkt(random.randint(0, 2048), 0, 0xc0, 0xd, 4, b"\0"*4) - genPkt.gen("./generated/shin/bc_r_pkt.vh", 1) + + gen_file_def = "bc_r_pkt" + sm_idx = 0 + + genPkt.addAfterExc(genWriteTransLenCode(gen_file_def, sm_idx) + +genWriteTransPktCode(gen_file_def, sm_idx) + +genTrgTransPktCode(gen_file_def, sm_idx) + +genReadAckPktCode(gen_file_def, sm_idx)) + + genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1) #------------------------------------------------------------------------- @@ -614,7 +668,15 @@ if __name__ == '__main__': data[i] = i + 1 genPkt.addSubPkt(random.randint(0, 2048), 0, 0x0800, 0xe, 32, data) - genPkt.gen("./generated/shin/bc_w_pkt.vh", 1) + gen_file_def = "bc_w_pkt" + sm_idx = 0 + + genPkt.addAfterExc(genWriteTransLenCode(gen_file_def, sm_idx) + +genWriteTransPktCode(gen_file_def, sm_idx) + +genTrgTransPktCode(gen_file_def, sm_idx) + +genReadAckPktCode(gen_file_def, sm_idx)) + + genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1) From 14832ac770f978f2f50a944d50aa3f64e87dc064 Mon Sep 17 00:00:00 2001 From: Ruige Lee Date: Thu, 29 May 2025 10:28:41 +0800 Subject: [PATCH 7/7] =?UTF-8?q?rplTimeStampTx=E5=AF=84=E5=AD=98=E5=99=A8?= =?UTF-8?q?=E5=9C=A8=E5=8F=91=E9=80=81=E5=AE=8C=E6=88=90=E5=90=8E=E6=B8=85?= =?UTF-8?q?=E9=9B=B6=EF=BC=8C=E4=BC=98=E5=85=88=E7=BA=A7=E6=9C=80=E9=AB=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/scala/backBoard/shin/Interface.scala | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/main/scala/backBoard/shin/Interface.scala b/src/main/scala/backBoard/shin/Interface.scala index c1ec329..41c20dd 100644 --- a/src/main/scala/backBoard/shin/Interface.scala +++ b/src/main/scala/backBoard/shin/Interface.scala @@ -473,14 +473,17 @@ trait InterfaceMCUop{ this: InterfaceBase => cReg.custom(i) := RegEnable( dataw, 0.U, isEnW & (addrw === ("h180".U(16.W) + i.U)) ) } + val rplTimeStampTx = RegInit(0.U(16.W)) + mReg.rplTimeStampTx := rplTimeStampTx - - mReg.rplTimeStampTx := - Cat( - RegEnable( dataw, 0.U, isEnW & addrw === "h25".U ), - RegEnable( dataw, 0.U, isEnW & addrw === "h24".U ) - ) + when( io.intMstTrig(0) ){ + rplTimeStampTx := rplTimeStampTx & "h3FFF".U(16.W) + } .elsewhen( isEnW & addrw === "h25".U ){ + rplTimeStampTx := Cat( dataw, rplTimeStampTx(7,0) ) + } .elsewhen( isEnW & addrw === "h24".U ){ + rplTimeStampTx := Cat(rplTimeStampTx(15,8), dataw ) + } when( isEnW & isSlvMode ){