增加生成从站造SM数据的python代码,生成verilog测试代码;修改相关的测试用例;修改打印的输出信息
This commit is contained in:
@@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
`define ENABLE_EXCHG_DATA_SEQ0_TEST
|
`define ENABLE_EXCHG_DATA_SEQ0_TEST
|
||||||
//`define ENABLE_EXCHG_DATA_SEQ1_TEST
|
//`define ENABLE_EXCHG_DATA_SEQ1_TEST
|
||||||
//`define ENABLE_EXCHG_DATA_SEQ2_TEST
|
`define ENABLE_EXCHG_DATA_SEQ2_TEST
|
||||||
//`define ENABLE_EXCHG_DATA_SEQ3_TEST
|
//`define ENABLE_EXCHG_DATA_SEQ3_TEST
|
||||||
|
|
||||||
//`define ENABLE_BC_R_TEST
|
//`define ENABLE_BC_R_TEST
|
||||||
@@ -17,9 +17,9 @@
|
|||||||
//`define ENABLE_BC_RW_TEST
|
//`define ENABLE_BC_RW_TEST
|
||||||
|
|
||||||
`define ENABLE_SYNC_TEST
|
`define ENABLE_SYNC_TEST
|
||||||
`define ENABLE_SYNC_SIG0_TEST
|
//`define ENABLE_SYNC_SIG0_TEST
|
||||||
`define ENABLE_SYNC_SIG1_TEST
|
//`define ENABLE_SYNC_SIG1_TEST
|
||||||
`define ENABLE_RESET_TEST
|
//`define ENABLE_RESET_TEST
|
||||||
|
|
||||||
//`define ENABLE_EBMMU_TC1_TEST
|
//`define ENABLE_EBMMU_TC1_TEST
|
||||||
//`define ENABLE_EBMMU_TC2_TEST
|
//`define ENABLE_EBMMU_TC2_TEST
|
||||||
@@ -457,6 +457,35 @@ task spi_trans( input [15:0] saddress, input [7:0] scmd, input [12:0] slength,in
|
|||||||
_len = rxBuf[_pos + 5] + (rxBuf[_pos + 4] & 8'h0f) * 256;
|
_len = rxBuf[_pos + 5] + (rxBuf[_pos + 4] & 8'h0f) * 256;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
begin:PRINT_PKT_COMMENT
|
||||||
|
integer dev;
|
||||||
|
integer addr_type;
|
||||||
|
integer addr;
|
||||||
|
integer cmd;
|
||||||
|
integer len;
|
||||||
|
|
||||||
|
if (scmd == 0) begin
|
||||||
|
addr_type = txBuf[_pos + 1] & 8'h3;
|
||||||
|
dev = txBuf[_pos] * 256 + ((txBuf[_pos + 1] >> 2) & 8'hff);
|
||||||
|
addr = txBuf[_pos + 2] * 256 + (txBuf[_pos + 3] & 8'hff);
|
||||||
|
cmd = (txBuf[_pos + 4] >> 4) & 8'h0f;
|
||||||
|
len = (txBuf[_pos + 4] & 8'h0f) * 256 + (txBuf[_pos + 5] & 8'hff);
|
||||||
|
end else begin
|
||||||
|
addr_type = rxBuf[_pos + 1] & 8'h3;
|
||||||
|
dev = rxBuf[_pos] * 256 + ((rxBuf[_pos + 1] >> 2) & 8'hff);
|
||||||
|
addr = rxBuf[_pos + 2] * 256 + (rxBuf[_pos + 3] & 8'hff);
|
||||||
|
cmd = (rxBuf[_pos + 4] >> 4) & 8'h0f;
|
||||||
|
len = (rxBuf[_pos + 4] & 8'h0f) * 256 + (rxBuf[_pos + 5] & 8'hff);
|
||||||
|
end
|
||||||
|
|
||||||
|
if (addr_type == 0)
|
||||||
|
$fwrite(spidata_file, "// type:%3d dev:%3d addr:0x%04x cmd:0x%1x len:%3d", addr_type, dev, addr[15:0], cmd[3:0], len);
|
||||||
|
else begin
|
||||||
|
addr = dev * 65536 + addr;
|
||||||
|
$fwrite(spidata_file, "// type:%3d addr:0x08x cmd:0x%1x len:%3d", addr_type, addr, cmd[3:0], len);
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
$fwrite(spidata_file, "\n{{ ");
|
$fwrite(spidata_file, "\n{{ ");
|
||||||
_pos = _pos + 6;
|
_pos = _pos + 6;
|
||||||
@@ -991,43 +1020,6 @@ initial begin
|
|||||||
$fdisplay(spidata_file, "\n\n测试用例:交换数据读dev1_sm1/dev2_sm3/dev3_sm5/dev4_sm7");
|
$fdisplay(spidata_file, "\n\n测试用例:交换数据读dev1_sm1/dev2_sm3/dev3_sm5/dev4_sm7");
|
||||||
$display("read&write @ %d", s_ShinTop_Mst.interface__io_cReg_timeStamp);
|
$display("read&write @ %d", s_ShinTop_Mst.interface__io_cReg_timeStamp);
|
||||||
|
|
||||||
txBuf[3] = 8'h80;
|
|
||||||
txBuf[4] = 8'h00;
|
|
||||||
spi_trans((16'h0306), (`SPI_WRITE), (2), (`IF_IDX(1)) );//dev1_sm1
|
|
||||||
|
|
||||||
txBuf[3] = 8'h98;
|
|
||||||
txBuf[4] = 8'h00;
|
|
||||||
spi_trans((16'h030e), (`SPI_WRITE), (2), (`IF_IDX(2)) );//dev2_sm3
|
|
||||||
|
|
||||||
txBuf[3] = 8'h81;
|
|
||||||
txBuf[4] = 8'h00;
|
|
||||||
spi_trans((16'h0316), (`SPI_WRITE), (2), (`IF_IDX(3)) );//dev2_sm3
|
|
||||||
|
|
||||||
txBuf[3] = 8'h8c;
|
|
||||||
txBuf[4] = 8'h00;
|
|
||||||
spi_trans((16'h031e), (`SPI_WRITE), (2), (`IF_IDX(4)) );//dev2_sm3
|
|
||||||
|
|
||||||
|
|
||||||
for (integer i=0; i < 128; i++) begin
|
|
||||||
txBuf[i + 3] = i + 1;
|
|
||||||
end
|
|
||||||
spi_trans( (16'h1000), (`SPI_WRITE), (128), (`IF_IDX(1)) );
|
|
||||||
|
|
||||||
for (integer i=0; i < 152; i++) begin
|
|
||||||
txBuf[i + 3] = i + 2;
|
|
||||||
end
|
|
||||||
spi_trans( (16'h2000), (`SPI_WRITE), (152), (`IF_IDX(2)) );
|
|
||||||
|
|
||||||
for (integer i=0; i < 129; i++) begin
|
|
||||||
txBuf[i + 3] = i + 3;
|
|
||||||
end
|
|
||||||
spi_trans( (16'h3000), (`SPI_WRITE), (129), (`IF_IDX(3)) );
|
|
||||||
|
|
||||||
for (integer i=0; i < 140; i++) begin
|
|
||||||
txBuf[i + 3] = i + 4;
|
|
||||||
end
|
|
||||||
spi_trans( (16'h4000), (`SPI_WRITE), (140), (`IF_IDX(4)) );
|
|
||||||
|
|
||||||
`include "seq_2_pkt.vh"
|
`include "seq_2_pkt.vh"
|
||||||
|
|
||||||
_t_end = $realtime;
|
_t_end = $realtime;
|
||||||
|
|||||||
@@ -231,7 +231,48 @@ def genCheckInsertTimeCode():
|
|||||||
return '''\n//检查替换时间戳替换地址\n'''\
|
return '''\n//检查替换时间戳替换地址\n'''\
|
||||||
+ '''$fdisplay(spidata_file, "--检查时间戳插入");\n'''\
|
+ '''$fdisplay(spidata_file, "--检查时间戳插入");\n'''\
|
||||||
+ '''spi_trans( (16'h24), (`SPI_READ), (2), (`IF_IDX(0)) ); //检查替换时间戳替换地址寄存器\n'''
|
+ '''spi_trans( (16'h24), (`SPI_READ), (2), (`IF_IDX(0)) ); //检查替换时间戳替换地址寄存器\n'''
|
||||||
|
|
||||||
|
def genSlvSMWriteData(dev, sm, data_len, data = None):
|
||||||
|
smaddr = list()
|
||||||
|
for i in range(8):
|
||||||
|
smaddr.append(0x300 + i * 4 + 2)
|
||||||
|
if not ((sm == 1) or (sm == 3) or (sm == 5) or (sm == 7)):
|
||||||
|
#写入数据,lvds读;这个空间是lvds写,mcu读
|
||||||
|
return ''
|
||||||
|
if data_len > 2032:
|
||||||
|
return ''
|
||||||
|
|
||||||
|
if (data != None) and (len(data) != 0) and (len(data) < data_len):
|
||||||
|
return ''
|
||||||
|
|
||||||
|
if (data == None) or (len(data) == 0):
|
||||||
|
data = list()
|
||||||
|
for i in range(data_len):
|
||||||
|
data.append((i + dev) & 0xff)
|
||||||
|
|
||||||
|
code = '''txBuf[3] = 8'h%02x;\n'''%(data_len & 0xff, )\
|
||||||
|
+ '''txBuf[4] = 8'h%02x;\n'''%(int(data_len/256) & 0xff,)\
|
||||||
|
+ '''spi_trans((16'h0%04x), (`SPI_WRITE), (2), (`IF_IDX(%d)) );\n'''%(smaddr[sm], dev)
|
||||||
|
|
||||||
|
for i in range(data_len):
|
||||||
|
code = code + '''txBuf[%d + 3] = 8'h%02x;\n'''%(i, data[i])
|
||||||
|
|
||||||
|
code = code + '''spi_trans( (16'h%04x), (`SPI_WRITE), (%d), (`IF_IDX(%d)) );\n'''%(0x800 + sm * 2048, data_len, dev)
|
||||||
|
return code
|
||||||
|
|
||||||
|
def genSlvSMReadData(dev, sm, data_len):
|
||||||
|
if not ((sm == 0) or (sm == 2) or (sm == 4) or (sm == 6)):
|
||||||
|
#写入数据,lvds读;这个空间是lvds写,mcu读
|
||||||
|
return ''
|
||||||
|
if data_len > 2032:
|
||||||
|
return ''
|
||||||
|
|
||||||
|
code = ""
|
||||||
|
code = code + '''spi_trans( (16'h%04x), (`SPI_READ), (%d), (`IF_IDX(%d)) );\n'''%(0x800 + sm * 2048, data_len, dev)
|
||||||
|
|
||||||
|
return code
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
genPkt = GenPkt()
|
genPkt = GenPkt()
|
||||||
|
|
||||||
@@ -418,12 +459,17 @@ if __name__ == '__main__':
|
|||||||
#>>>>>>普通数据包2
|
#>>>>>>普通数据包2
|
||||||
genPkt.clean()
|
genPkt.clean()
|
||||||
genPkt.setPktType(0)
|
genPkt.setPktType(0)
|
||||||
|
|
||||||
|
genPkt.addBeforeExc( genSlvSMWriteData(3, 1, 129)
|
||||||
|
+ genSlvSMWriteData(4, 1, 140)
|
||||||
|
+ genSlvSMWriteData(1, 1, 128)
|
||||||
|
+ genSlvSMWriteData(2, 1, 152))
|
||||||
|
|
||||||
#subPkt参数:索引、索引类型、地址、命令、长度、数据
|
#subPkt参数:索引、索引类型、地址、命令、长度、数据
|
||||||
genPkt.addSubPkt(3, 0, 0x3000, 0x0, 129, b"\0"*129)
|
genPkt.addSubPkt(3, 0, 0x1000, 0x0, 129, b"\0"*129)
|
||||||
genPkt.addSubPkt(4, 0, 0x4000, 0x0, 140, b"\0"*140)
|
genPkt.addSubPkt(4, 0, 0x1000, 0x0, 140, b"\0"*140)
|
||||||
genPkt.addSubPkt(1, 0, 0x1000, 0x0, 128, b"\0"*128)
|
genPkt.addSubPkt(1, 0, 0x1000, 0x0, 128, b"\0"*128)
|
||||||
genPkt.addSubPkt(2, 0, 0x2000, 0x0, 152, b"\0"*152)
|
genPkt.addSubPkt(2, 0, 0x1000, 0x0, 152, b"\0"*152)
|
||||||
genPkt.addSubPkt(1, 0, 0x0306, 0x0, 2, b"\0"*2)
|
genPkt.addSubPkt(1, 0, 0x0306, 0x0, 2, b"\0"*2)
|
||||||
genPkt.addSubPkt(2, 0, 0x030e, 0x0, 2, b"\0"*2)
|
genPkt.addSubPkt(2, 0, 0x030e, 0x0, 2, b"\0"*2)
|
||||||
genPkt.addSubPkt(3, 0, 0x0316, 0x0, 2, b"\0"*2)
|
genPkt.addSubPkt(3, 0, 0x0316, 0x0, 2, b"\0"*2)
|
||||||
|
|||||||
Reference in New Issue
Block a user