修改代码,QSPI的协议从四线改到了,1to4,测试代码也做了修改

This commit is contained in:
2026-01-26 00:15:41 +08:00
parent 8d18719587
commit aac6e215d7
3 changed files with 90 additions and 12 deletions

View File

@@ -527,6 +527,9 @@ end
reg [11:0] transCnt;
reg [11:0] byteCnt;
reg [2:0] bitCnt;
`ifndef OLD_SPI_SUPPORT
reg spi_1to4 = 1;
`endif
always @(posedge clock) begin
@@ -553,7 +556,17 @@ always @(negedge sck) begin
if( &bitCnt ) begin
exChangeRego <= txBuf[nextByteCnt];
end else begin
`ifdef OLD_SPI_SUPPORT
exChangeRego <= isQspi ? exChangeRego << 4 : exChangeRego << 1;
`else
//当单线转4线的协议生效时且传输命令+地址使用单线
//否则使用接口的固定模式
if (spi_1to4 & transCnt < 4) begin
exChangeRego <= exChangeRego << 1;
end else begin
exChangeRego <= isQspi ? exChangeRego << 4 : exChangeRego << 1;
end
`endif
end
end
end
@@ -572,10 +585,22 @@ always @(posedge sck) begin
if( isBusy ) begin
if( transCnt <= length ) begin
if( isQspi ) begin
`ifdef OLD_SPI_SUPPORT
bitCnt <= ~bitCnt;
`else
//当单线转4线的协议生效时且传输命令+地址使用单线;数据使用4线
if ((transCnt < 4) & (spi_1to4)) begin
bitCnt <= bitCnt + 1;
end else begin
bitCnt <= ~bitCnt;
end
`endif
end else begin
bitCnt <= bitCnt + 1;
end
`ifdef OLD_SPI_SUPPORT
if ( idx >= (`ALL_DEV_NUM * 3) ) begin
if( &bitCnt ) begin
byteCnt <= byteCnt +1;
@@ -609,6 +634,32 @@ always @(posedge sck) begin
exChangeRegi <= isQspi ? {exChangeRegi[3:0], qspi_mux_miso} : {exChangeRegi[6:0], spi_mux_miso};
end
end
`else
if( &bitCnt ) begin
byteCnt <= byteCnt +1;
transCnt <= transCnt + 1;
//且超过6个字节
if( (txBuf[2] & 8'h80) === 8'h80 & nextByteCnt >= 5) begin
rxBuf[byteCnt] <= exChangeRegi;
//$display("spi read out %x", exChangeRegi);
end
//且超过了4个字节
if( (txBuf[2] & 8'h80) === 8'h80 & nextByteCnt >= 4) begin
exChangeRegi <= isQspi ? {exChangeRegi[3:0], qspi_mux_miso} : {exChangeRegi[6:0], spi_mux_miso};
end else begin
// 读没有超过4个字节
exChangeRegi <= 0;
end
end else begin
//字节数小于4个字节且启动了QSPI的1线命令4线数据
if ((transCnt < 4) & (spi_1to4)) begin
exChangeRegi <= isQspi ? {exChangeRegi[6:0], qspi_mux_miso[0]} : {exChangeRegi[6:0], spi_mux_miso};
end else begin
exChangeRegi <= isQspi ? {exChangeRegi[3:0], qspi_mux_miso} : {exChangeRegi[6:0], spi_mux_miso};
end
end
`endif
end else begin
isBusy <= #5 1'b0;
end
@@ -624,6 +675,7 @@ task spi_trans( input [15:0] saddress, input [7:0] scmd, input [12:0] slength, i
begin
txBuf[0] <= saddress[15:8];
txBuf[1] <= saddress[7:0];
`ifdef OLD_SPI_SUPPORT
if (sidx >=(`ALL_DEV_NUM * 3)) begin
txBuf[2] <= (scmd | slength[12:8]);
txBuf[3] <= slength[7:0];
@@ -632,6 +684,11 @@ task spi_trans( input [15:0] saddress, input [7:0] scmd, input [12:0] slength, i
txBuf[2] <= scmd;
length <= slength + 3;
end
`else
txBuf[2] <= (scmd | slength[12:8]);
txBuf[3] <= slength[7:0];
length <= slength + 4 + 1;
`endif
idx <= sidx;
@@ -644,6 +701,7 @@ task spi_trans( input [15:0] saddress, input [7:0] scmd, input [12:0] slength, i
@( negedge isBusy) #1000
begin
//$fwrite(spidata_file, "------------%5t------------\n", $realtime);
`ifdef OLD_SPI_SUPPORT
if (sidx >=(`ALL_DEV_NUM * 3)) begin
$fwrite(spidata_file, "T:%t \tdev:%4d(%4d), addr:0x%02h%02h, %s, len:%4d (0x%02h%02h)\n",
$realtime,
@@ -662,9 +720,22 @@ task spi_trans( input [15:0] saddress, input [7:0] scmd, input [12:0] slength, i
(((txBuf[2] & 8'h80) == 0)? "Write":" Read"),
slength);
end
if (sidx >=(`ALL_DEV_NUM * 3)) begin _pos = 4; end
else begin _pos = 3; end
`else
$fwrite(spidata_file, "T:%t \tdev:%4d(%4d), addr:0x%02h%02h, %s, len:%4d (0x%02h%02h)\n",
$realtime,
sidx % (`ALL_DEV_NUM), sidx,
txBuf[0],
txBuf[1],
(((txBuf[2] & 8'h80) == 0)? "Write":" Read"),
slength,
txBuf[2], txBuf[3]);
_pos = 4;
`endif
if ( ((saddress == 16'h0800)
|| (saddress == 16'h1000)
@@ -850,17 +921,17 @@ end
`ifdef USING_IQSPI
`define INTERFACE_IDX 0//internal spi
`define ARRAY_IDX_OFF 3
`define ARRAY_IDX_OFF 4//3
`endif
`ifdef USING_OSPI
`define INTERFACE_IDX (`ALL_DEV_NUM)//internal spi
`define ARRAY_IDX_OFF 3
`define ARRAY_IDX_OFF 4//3
`endif
`ifdef USING_OQSPI
`define INTERFACE_IDX (`ALL_DEV_NUM * 2)//internal spi
`define ARRAY_IDX_OFF 3
`define ARRAY_IDX_OFF 4//3
`endif
`ifdef USING_AQSPI
@@ -941,6 +1012,7 @@ task wait_comm_finished(input [16:0] dev_idx);
while (is_run == 1) begin
txBuf[0] = 8'h00;
txBuf[1] = 8'h74;
`ifdef OLD_SPI_SUPPORT
if (dev_idx >=(`ALL_DEV_NUM * 3)) begin
txBuf[2] <= (`SPI_READ | 8'h0);
txBuf[3] <= 8'h04;
@@ -951,7 +1023,11 @@ task wait_comm_finished(input [16:0] dev_idx);
length = 8'h07;
//$display("using iqspi");
end
`else
txBuf[2] <= (`SPI_READ | 8'h0);
txBuf[3] <= 8'h04;
length = 8'h08;
`endif
idx = dev_idx;

View File

@@ -25,7 +25,7 @@ if __name__ == '__main__':
environment.gen_slv_dev_num(4)
environment.bringup()
#'''
'''
add_tc_2_runlist(errorPkt.tc1())
add_tc_2_runlist(errorPkt.tc2())
add_tc_2_runlist(errorPkt.tc3())
@@ -72,8 +72,10 @@ if __name__ == '__main__':
add_tc_2_runlist(rwregs.tc3())
#'''
#'''
add_tc_2_runlist(base.tc1())
'''
add_tc_2_runlist(base.tc2())
add_tc_2_runlist(base.tc3())
add_tc_2_runlist(base.tc4())
@@ -106,7 +108,7 @@ if __name__ == '__main__':
add_tc_2_runlist(base.tc31())
#'''
#'''
'''
add_tc_2_runlist(broadcast.tc1())
add_tc_2_runlist(broadcast.tc2())
add_tc_2_runlist(broadcast.tc3())
@@ -123,7 +125,7 @@ if __name__ == '__main__':
add_tc_2_runlist(sync.tc8())
#'''
#'''
'''
add_tc_2_runlist(ebmmu.tc1())
add_tc_2_runlist(ebmmu.tc2())
add_tc_2_runlist(ebmmu.tc3())

View File

@@ -275,13 +275,13 @@ def genIFRwDataCode(dev, addr, isWrite = False, data_len=0, data = None, wlog=Tr
spi_offset = "`ARRAY_IDX_OFF"
if iface == 0:
spi_api = "IF_IQSPI"
spi_offset = "3"
spi_offset = "4" #"3"
elif iface == 1:
spi_api = "IF_OSPI"
spi_offset = "3"
spi_offset = "4" #"3"
elif iface == 2:
spi_api = "IF_OQSPI"
spi_offset = "3"
spi_offset = "4" #"3"
elif iface == 3:
spi_api = "IF_AQSPI"
spi_offset = "4"