增加新的测试用例,调整内部的延时。±176ppm测试通过,184ppm测试未通过,但差得字节数并不多,最终偏差大概在180ppm上下
This commit is contained in:
@@ -385,16 +385,16 @@ initial begin
|
|||||||
spi_csn = {`SPI_CSN_NUM{1'b1}}; //~15'b0;
|
spi_csn = {`SPI_CSN_NUM{1'b1}}; //~15'b0;
|
||||||
|
|
||||||
//#125000
|
//#125000
|
||||||
#250000
|
#1250000
|
||||||
reset <= 1;
|
reset <= 1;
|
||||||
|
|
||||||
//#300000
|
//#300000
|
||||||
#600000
|
#3000000
|
||||||
reset <= 0;
|
reset <= 0;
|
||||||
|
|
||||||
#200000000000
|
#1000000000000
|
||||||
#200000000000
|
#1000000000000
|
||||||
#200000000000
|
#1000000000000
|
||||||
|
|
||||||
$display("Time Out !!!");
|
$display("Time Out !!!");
|
||||||
$fclose(spidata_file);
|
$fclose(spidata_file);
|
||||||
@@ -402,7 +402,7 @@ initial begin
|
|||||||
end
|
end
|
||||||
|
|
||||||
initial begin
|
initial begin
|
||||||
forever begin #200000 clock <= ~clock; end
|
forever begin #1000000 clock <= ~clock; end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
@@ -411,20 +411,32 @@ generate
|
|||||||
initial begin
|
initial begin
|
||||||
multiCLK[i] = 0;
|
multiCLK[i] = 0;
|
||||||
for( integer j = 0; j < i; j = j + 1 ) begin
|
for( integer j = 0; j < i; j = j + 1 ) begin
|
||||||
#12500
|
#125000
|
||||||
;
|
;
|
||||||
end
|
end
|
||||||
forever begin #200000 multiCLK[i] <= ~multiCLK[i]; end
|
forever begin #1000000 multiCLK[i] <= ~multiCLK[i]; end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
endgenerate
|
endgenerate
|
||||||
|
|
||||||
//如果频率差到 80ppm,参数是: 200016/25002/20016
|
//如果频率差到 80ppm,参数是: 1000080/125010/1000080 [pass]
|
||||||
//如果频率差到120ppm,参数是: 200024/25003/20024
|
//如果频率差到120ppm,参数是: 1000120/125015/1000160 [pass]
|
||||||
//如果频率差到160ppm,参数是: 200032/25004/20032
|
//如果频率差到160ppm,参数是: 1000160/125020/1000160 [pass]
|
||||||
//如果频率差到200ppm,参数是: 200040/25005/20040
|
//如果频率差到168ppm,参数是: 1000168/125021/1000168 [pass]
|
||||||
|
|
||||||
|
//如果频率差到176ppm,参数是: 1000176/125022/1000176 [pass]
|
||||||
|
//如果频率差到-176ppm,参数是: 999824/124978/ 999824 [pass]
|
||||||
|
|
||||||
|
//如果频率差到184ppm,参数是: 1000184/125023/1000184 [failed] //差得字节数不多,大概在180ppm上下
|
||||||
|
//如果频率差到-184ppm,参数是: 999816/124977/ 999816
|
||||||
|
|
||||||
|
//如果频率差到192ppm,参数是: 1000192/125024/1000192
|
||||||
|
//如果频率差到-192ppm,参数是: 999808/124976/ 999808
|
||||||
|
|
||||||
|
//如果频率差到200ppm,参数是: 1000200/125025/1000200
|
||||||
|
//如果频率差到-200ppm,参数是: 999800/124975/ 999800
|
||||||
initial begin
|
initial begin
|
||||||
forever begin #200040 clock2 <= ~clock2; end
|
forever begin #1000184 clock2 <= ~clock2; end
|
||||||
end
|
end
|
||||||
|
|
||||||
generate
|
generate
|
||||||
@@ -432,10 +444,10 @@ generate
|
|||||||
initial begin
|
initial begin
|
||||||
multiCLK2[i] = 0;
|
multiCLK2[i] = 0;
|
||||||
for( integer j = 0; j < i; j = j + 1 ) begin
|
for( integer j = 0; j < i; j = j + 1 ) begin
|
||||||
#25005
|
#125023
|
||||||
;
|
;
|
||||||
end
|
end
|
||||||
forever begin #200040 multiCLK2[i] <= ~multiCLK2[i]; end
|
forever begin #1000184 multiCLK2[i] <= ~multiCLK2[i]; end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
endgenerate
|
endgenerate
|
||||||
@@ -458,7 +470,7 @@ always @(negedge reset) begin
|
|||||||
_reset_deactive <= 1'b1;
|
_reset_deactive <= 1'b1;
|
||||||
end
|
end
|
||||||
|
|
||||||
`define SCKFRE #1600000
|
`define SCKFRE #8000000
|
||||||
|
|
||||||
reg sck = 0;
|
reg sck = 0;
|
||||||
|
|
||||||
@@ -533,13 +545,13 @@ end
|
|||||||
|
|
||||||
always @(posedge clock) begin
|
always @(posedge clock) begin
|
||||||
if( isReq & sck == 0 ) begin
|
if( isReq & sck == 0 ) begin
|
||||||
isBusy <= #12500 1'b1;
|
isBusy <= #62500 1'b1;
|
||||||
transCnt <= #12500 0;
|
transCnt <= #62500 0;
|
||||||
|
|
||||||
byteCnt <= #12500 ~12'b0;
|
byteCnt <= #62500 ~12'b0;
|
||||||
bitCnt <= #12500 ~3'b0;
|
bitCnt <= #62500 ~3'b0;
|
||||||
|
|
||||||
spi_csn[idx] <= #12500 1'b0;
|
spi_csn[idx] <= #62500 1'b0;
|
||||||
exChangeRego <= txBuf[0];
|
exChangeRego <= txBuf[0];
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -586,8 +598,8 @@ always @(posedge sck) begin
|
|||||||
exChangeRegi <= isQspi ? {exChangeRegi[3:0], qspi_mux_miso} : {exChangeRegi[6:0], spi_mux_miso};
|
exChangeRegi <= isQspi ? {exChangeRegi[3:0], qspi_mux_miso} : {exChangeRegi[6:0], spi_mux_miso};
|
||||||
end
|
end
|
||||||
end else begin
|
end else begin
|
||||||
isBusy <= #12500 1'b0;
|
isBusy <= #62500 1'b0;
|
||||||
spi_csn[idx] <= #12500 1'b1;
|
spi_csn[idx] <= #62500 1'b1;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -606,13 +618,13 @@ task spi_trans( input [15:0] saddress, input [7:0] scmd, input [12:0] slength,in
|
|||||||
length <= slength + 3;
|
length <= slength + 3;
|
||||||
idx <= sidx;
|
idx <= sidx;
|
||||||
|
|
||||||
#12500
|
#62500
|
||||||
@(negedge sck)
|
@(negedge sck)
|
||||||
isReq <= 1;
|
isReq <= 1;
|
||||||
@(posedge sck) #12500
|
@(posedge sck) #62500
|
||||||
isReq <= 0;
|
isReq <= 0;
|
||||||
|
|
||||||
@( negedge isBusy) #2500000
|
@( negedge isBusy) #12500000
|
||||||
begin
|
begin
|
||||||
//$fwrite(spidata_file, "------------%5t------------\n", $realtime);
|
//$fwrite(spidata_file, "------------%5t------------\n", $realtime);
|
||||||
$fwrite(spidata_file, "T:%t \tdev:%4d, addr:0x%02h%02h, %s, len:%4d\n",
|
$fwrite(spidata_file, "T:%t \tdev:%4d, addr:0x%02h%02h, %s, len:%4d\n",
|
||||||
@@ -890,13 +902,13 @@ task wait_comm_finished();
|
|||||||
length = 8'h07;
|
length = 8'h07;
|
||||||
idx = `IF_IQSPI(0);
|
idx = `IF_IQSPI(0);
|
||||||
|
|
||||||
#12500
|
#62500
|
||||||
@(negedge sck)
|
@(negedge sck)
|
||||||
isReq <= 1;
|
isReq <= 1;
|
||||||
@(posedge sck) #12500
|
@(posedge sck) #62500
|
||||||
isReq <= 0;
|
isReq <= 0;
|
||||||
|
|
||||||
@( negedge isBusy) #2500000
|
@( negedge isBusy) #12500000
|
||||||
begin
|
begin
|
||||||
|
|
||||||
end
|
end
|
||||||
@@ -910,17 +922,17 @@ task wait_comm_finished();
|
|||||||
length = 8'h07;
|
length = 8'h07;
|
||||||
idx = `IF_IQSPI(0);
|
idx = `IF_IQSPI(0);
|
||||||
|
|
||||||
#12500
|
#62500
|
||||||
@(negedge sck)
|
@(negedge sck)
|
||||||
isReq <= 1;
|
isReq <= 1;
|
||||||
@(posedge sck) #12500
|
@(posedge sck) #62500
|
||||||
isReq <= 0;
|
isReq <= 0;
|
||||||
|
|
||||||
@( negedge isBusy) #2500000
|
@( negedge isBusy) #12500000
|
||||||
begin
|
begin
|
||||||
|
|
||||||
end
|
end
|
||||||
#2500000
|
#12500000
|
||||||
//$display("%x %x", rxBuf[3], rxBuf[6]);
|
//$display("%x %x", rxBuf[3], rxBuf[6]);
|
||||||
if ((rxBuf[3] & 8'h02) == 8'h02)
|
if ((rxBuf[3] & 8'h02) == 8'h02)
|
||||||
begin
|
begin
|
||||||
@@ -931,7 +943,7 @@ task wait_comm_finished();
|
|||||||
$display("error occur");
|
$display("error occur");
|
||||||
is_run = 0;
|
is_run = 0;
|
||||||
end
|
end
|
||||||
if (($realtime - st) >= 12500000000.0)
|
if (($realtime - st) >= 62500000000.0)
|
||||||
begin
|
begin
|
||||||
$display("comm timeout.");
|
$display("comm timeout.");
|
||||||
is_run = 0;
|
is_run = 0;
|
||||||
@@ -943,7 +955,7 @@ endtask
|
|||||||
|
|
||||||
initial begin
|
initial begin
|
||||||
|
|
||||||
#1250000
|
#6250000
|
||||||
|
|
||||||
`ifdef ENABLE_REG_RW1_TEST
|
`ifdef ENABLE_REG_RW1_TEST
|
||||||
/*---------------------------------------------------------------------------------------------------------
|
/*---------------------------------------------------------------------------------------------------------
|
||||||
@@ -1096,7 +1108,7 @@ initial begin
|
|||||||
|
|
||||||
`include "tc_runlist.vh"
|
`include "tc_runlist.vh"
|
||||||
|
|
||||||
#2500000000
|
#12500000000
|
||||||
$display("Testcase Finished! Time Out !!!");
|
$display("Testcase Finished! Time Out !!!");
|
||||||
$fclose(spidata_file);
|
$fclose(spidata_file);
|
||||||
$stop;
|
$stop;
|
||||||
|
|||||||
@@ -14,9 +14,9 @@ if __name__ == '__main__':
|
|||||||
#add_tc_2_runlist(errorPkt.tc5())
|
#add_tc_2_runlist(errorPkt.tc5())
|
||||||
#add_tc_2_runlist(errorPkt.tc6())
|
#add_tc_2_runlist(errorPkt.tc6())
|
||||||
|
|
||||||
add_tc_2_runlist(base.tc1())
|
#add_tc_2_runlist(base.tc1())
|
||||||
add_tc_2_runlist(base.tc2())
|
#add_tc_2_runlist(base.tc2())
|
||||||
add_tc_2_runlist(base.tc3())
|
#add_tc_2_runlist(base.tc3())
|
||||||
#add_tc_2_runlist(base.tc4())
|
#add_tc_2_runlist(base.tc4())
|
||||||
#add_tc_2_runlist(base.tc5())
|
#add_tc_2_runlist(base.tc5())
|
||||||
#add_tc_2_runlist(base.tc6())
|
#add_tc_2_runlist(base.tc6())
|
||||||
@@ -40,7 +40,9 @@ if __name__ == '__main__':
|
|||||||
#add_tc_2_runlist(base.tc24())
|
#add_tc_2_runlist(base.tc24())
|
||||||
#add_tc_2_runlist(base.tc25())
|
#add_tc_2_runlist(base.tc25())
|
||||||
#add_tc_2_runlist(base.tc26())
|
#add_tc_2_runlist(base.tc26())
|
||||||
add_tc_2_runlist(base.tc29())
|
#add_tc_2_runlist(base.tc29())
|
||||||
|
add_tc_2_runlist(base.tc30())
|
||||||
|
|
||||||
|
|
||||||
#add_tc_2_runlist(broadcast.tc1())
|
#add_tc_2_runlist(broadcast.tc1())
|
||||||
#add_tc_2_runlist(broadcast.tc2())
|
#add_tc_2_runlist(broadcast.tc2())
|
||||||
|
|||||||
@@ -1884,4 +1884,76 @@ def tc29():
|
|||||||
+genTcEndFrameCode(gen_file_def))
|
+genTcEndFrameCode(gen_file_def))
|
||||||
genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1)
|
genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1)
|
||||||
|
|
||||||
|
return gen_file_def
|
||||||
|
|
||||||
|
|
||||||
|
def tc30():
|
||||||
|
genPkt = GenPkt()
|
||||||
|
|
||||||
|
|
||||||
|
gen_file_def = "base_tc30"
|
||||||
|
sm_idx = 0
|
||||||
|
tc_des = ("写,单次通讯2048个字节。每个子包包含数据502个字节,最多4个子包。 \\n"
|
||||||
|
+"(502 + 8) * 4 + 4(HEAD) + 4(CRC) = 2048\\n"
|
||||||
|
+"可以通过屏蔽子包的方式,增大或者缩小发送的数据量。最大的数据量不超过2048个字节。"
|
||||||
|
)
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
#>>>>>>普通数据包 sm2,广播读
|
||||||
|
genPkt.clean()
|
||||||
|
genPkt.setPktType(0)
|
||||||
|
data_len = 502
|
||||||
|
data_len_wr = [(data_len & 0xff), ((data_len >> 8) & 0xff)]
|
||||||
|
#genPkt.addSubPkt(0x00, 0, 0x302, 0xe, 2, data_len_wr) #500
|
||||||
|
#subPkt参数:索引、索引类型、地址、命令、长度、数据
|
||||||
|
genPkt.addSubPkt(0x01, 0, 0x800, 0x1, data_len, list(range(256)) + list(range(256)))
|
||||||
|
genPkt.addSubPkt(0x02, 0, 0x800, 0x1, data_len, list(range(256)) + list(range(256)))
|
||||||
|
genPkt.addSubPkt(0x03, 0, 0x800, 0x1, data_len, list(range(256)) + list(range(256)))
|
||||||
|
genPkt.addSubPkt(0x04, 0, 0x800, 0x1, data_len, list(range(256)) + list(range(256)))
|
||||||
|
|
||||||
|
sm_idx = 2
|
||||||
|
|
||||||
|
|
||||||
|
genPkt.addBeforeExc(genTcStartFrameCode(gen_file_def, tc_des)
|
||||||
|
+genIFRwDataCode(1, 0x0302, True, 2, data_len_wr)
|
||||||
|
+genIFRwDataCode(2, 0x0302, True, 2, data_len_wr)
|
||||||
|
+genIFRwDataCode(3, 0x0302, True, 2, data_len_wr)
|
||||||
|
+genIFRwDataCode(4, 0x0302, True, 2, data_len_wr)
|
||||||
|
)
|
||||||
|
|
||||||
|
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)
|
||||||
|
|
||||||
|
+genMessageCode("--读取中断")
|
||||||
|
+genIFRwDataCode(0, 0x74, False, 4)
|
||||||
|
+genIFRwDataCode(1, 0x74, False, 4)
|
||||||
|
+genIFRwDataCode(2, 0x74, False, 4)
|
||||||
|
+genIFRwDataCode(3, 0x74, False, 4)
|
||||||
|
+genIFRwDataCode(4, 0x74, False, 4)
|
||||||
|
|
||||||
|
+genMessageCode("--清除中断")
|
||||||
|
+genIFRwDataCode(0, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||||
|
+genIFRwDataCode(1, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||||
|
+genIFRwDataCode(2, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||||
|
+genIFRwDataCode(3, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||||
|
+genIFRwDataCode(4, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||||
|
|
||||||
|
+genMessageCode("--读取中断")
|
||||||
|
+genIFRwDataCode(0, 0x74, False, 4)
|
||||||
|
+genIFRwDataCode(1, 0x74, False, 4)
|
||||||
|
+genIFRwDataCode(2, 0x74, False, 4)
|
||||||
|
+genIFRwDataCode(3, 0x74, False, 4)
|
||||||
|
+genIFRwDataCode(4, 0x74, False, 4)
|
||||||
|
|
||||||
|
+genMessageCode("--读取数据")
|
||||||
|
+genIFRwDataCode(1, 0x800, False, data_len)
|
||||||
|
+genIFRwDataCode(2, 0x800, False, data_len)
|
||||||
|
+genIFRwDataCode(3, 0x800, False, data_len)
|
||||||
|
+genIFRwDataCode(4, 0x800, False, data_len)
|
||||||
|
|
||||||
|
+genTcEndFrameCode(gen_file_def))
|
||||||
|
genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1)
|
||||||
|
|
||||||
return gen_file_def
|
return gen_file_def
|
||||||
Reference in New Issue
Block a user