修改代码,QSPI的协议从四线改到了,1to4,测试代码也做了修改
This commit is contained in:
@@ -527,6 +527,9 @@ end
|
|||||||
reg [11:0] transCnt;
|
reg [11:0] transCnt;
|
||||||
reg [11:0] byteCnt;
|
reg [11:0] byteCnt;
|
||||||
reg [2:0] bitCnt;
|
reg [2:0] bitCnt;
|
||||||
|
`ifndef OLD_SPI_SUPPORT
|
||||||
|
reg spi_1to4 = 1;
|
||||||
|
`endif
|
||||||
|
|
||||||
|
|
||||||
always @(posedge clock) begin
|
always @(posedge clock) begin
|
||||||
@@ -553,7 +556,17 @@ always @(negedge sck) begin
|
|||||||
if( &bitCnt ) begin
|
if( &bitCnt ) begin
|
||||||
exChangeRego <= txBuf[nextByteCnt];
|
exChangeRego <= txBuf[nextByteCnt];
|
||||||
end else begin
|
end else begin
|
||||||
|
`ifdef OLD_SPI_SUPPORT
|
||||||
exChangeRego <= isQspi ? exChangeRego << 4 : exChangeRego << 1;
|
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
|
end
|
||||||
end
|
end
|
||||||
@@ -572,10 +585,22 @@ always @(posedge sck) begin
|
|||||||
if( isBusy ) begin
|
if( isBusy ) begin
|
||||||
if( transCnt <= length ) begin
|
if( transCnt <= length ) begin
|
||||||
if( isQspi ) begin
|
if( isQspi ) begin
|
||||||
|
`ifdef OLD_SPI_SUPPORT
|
||||||
bitCnt <= ~bitCnt;
|
bitCnt <= ~bitCnt;
|
||||||
|
`else
|
||||||
|
//当单线转4线的协议生效时,且传输命令+地址,使用单线;数据使用4线
|
||||||
|
if ((transCnt < 4) & (spi_1to4)) begin
|
||||||
|
bitCnt <= bitCnt + 1;
|
||||||
|
end else begin
|
||||||
|
bitCnt <= ~bitCnt;
|
||||||
|
end
|
||||||
|
`endif
|
||||||
end else begin
|
end else begin
|
||||||
bitCnt <= bitCnt + 1;
|
bitCnt <= bitCnt + 1;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
`ifdef OLD_SPI_SUPPORT
|
||||||
if ( idx >= (`ALL_DEV_NUM * 3) ) begin
|
if ( idx >= (`ALL_DEV_NUM * 3) ) begin
|
||||||
if( &bitCnt ) begin
|
if( &bitCnt ) begin
|
||||||
byteCnt <= byteCnt +1;
|
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};
|
exChangeRegi <= isQspi ? {exChangeRegi[3:0], qspi_mux_miso} : {exChangeRegi[6:0], spi_mux_miso};
|
||||||
end
|
end
|
||||||
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
|
end else begin
|
||||||
isBusy <= #5 1'b0;
|
isBusy <= #5 1'b0;
|
||||||
end
|
end
|
||||||
@@ -624,6 +675,7 @@ task spi_trans( input [15:0] saddress, input [7:0] scmd, input [12:0] slength, i
|
|||||||
begin
|
begin
|
||||||
txBuf[0] <= saddress[15:8];
|
txBuf[0] <= saddress[15:8];
|
||||||
txBuf[1] <= saddress[7:0];
|
txBuf[1] <= saddress[7:0];
|
||||||
|
`ifdef OLD_SPI_SUPPORT
|
||||||
if (sidx >=(`ALL_DEV_NUM * 3)) begin
|
if (sidx >=(`ALL_DEV_NUM * 3)) begin
|
||||||
txBuf[2] <= (scmd | slength[12:8]);
|
txBuf[2] <= (scmd | slength[12:8]);
|
||||||
txBuf[3] <= slength[7:0];
|
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;
|
txBuf[2] <= scmd;
|
||||||
length <= slength + 3;
|
length <= slength + 3;
|
||||||
end
|
end
|
||||||
|
`else
|
||||||
|
txBuf[2] <= (scmd | slength[12:8]);
|
||||||
|
txBuf[3] <= slength[7:0];
|
||||||
|
length <= slength + 4 + 1;
|
||||||
|
`endif
|
||||||
|
|
||||||
idx <= sidx;
|
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
|
@( negedge isBusy) #1000
|
||||||
begin
|
begin
|
||||||
//$fwrite(spidata_file, "------------%5t------------\n", $realtime);
|
//$fwrite(spidata_file, "------------%5t------------\n", $realtime);
|
||||||
|
`ifdef OLD_SPI_SUPPORT
|
||||||
if (sidx >=(`ALL_DEV_NUM * 3)) begin
|
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",
|
$fwrite(spidata_file, "T:%t \tdev:%4d(%4d), addr:0x%02h%02h, %s, len:%4d (0x%02h%02h)\n",
|
||||||
$realtime,
|
$realtime,
|
||||||
@@ -665,6 +723,19 @@ task spi_trans( input [15:0] saddress, input [7:0] scmd, input [12:0] slength, i
|
|||||||
|
|
||||||
if (sidx >=(`ALL_DEV_NUM * 3)) begin _pos = 4; end
|
if (sidx >=(`ALL_DEV_NUM * 3)) begin _pos = 4; end
|
||||||
else begin _pos = 3; 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)
|
if ( ((saddress == 16'h0800)
|
||||||
|| (saddress == 16'h1000)
|
|| (saddress == 16'h1000)
|
||||||
@@ -850,17 +921,17 @@ end
|
|||||||
|
|
||||||
`ifdef USING_IQSPI
|
`ifdef USING_IQSPI
|
||||||
`define INTERFACE_IDX 0//internal spi
|
`define INTERFACE_IDX 0//internal spi
|
||||||
`define ARRAY_IDX_OFF 3
|
`define ARRAY_IDX_OFF 4//3
|
||||||
`endif
|
`endif
|
||||||
|
|
||||||
`ifdef USING_OSPI
|
`ifdef USING_OSPI
|
||||||
`define INTERFACE_IDX (`ALL_DEV_NUM)//internal spi
|
`define INTERFACE_IDX (`ALL_DEV_NUM)//internal spi
|
||||||
`define ARRAY_IDX_OFF 3
|
`define ARRAY_IDX_OFF 4//3
|
||||||
`endif
|
`endif
|
||||||
|
|
||||||
`ifdef USING_OQSPI
|
`ifdef USING_OQSPI
|
||||||
`define INTERFACE_IDX (`ALL_DEV_NUM * 2)//internal spi
|
`define INTERFACE_IDX (`ALL_DEV_NUM * 2)//internal spi
|
||||||
`define ARRAY_IDX_OFF 3
|
`define ARRAY_IDX_OFF 4//3
|
||||||
`endif
|
`endif
|
||||||
|
|
||||||
`ifdef USING_AQSPI
|
`ifdef USING_AQSPI
|
||||||
@@ -941,6 +1012,7 @@ task wait_comm_finished(input [16:0] dev_idx);
|
|||||||
while (is_run == 1) begin
|
while (is_run == 1) begin
|
||||||
txBuf[0] = 8'h00;
|
txBuf[0] = 8'h00;
|
||||||
txBuf[1] = 8'h74;
|
txBuf[1] = 8'h74;
|
||||||
|
`ifdef OLD_SPI_SUPPORT
|
||||||
if (dev_idx >=(`ALL_DEV_NUM * 3)) begin
|
if (dev_idx >=(`ALL_DEV_NUM * 3)) begin
|
||||||
txBuf[2] <= (`SPI_READ | 8'h0);
|
txBuf[2] <= (`SPI_READ | 8'h0);
|
||||||
txBuf[3] <= 8'h04;
|
txBuf[3] <= 8'h04;
|
||||||
@@ -951,7 +1023,11 @@ task wait_comm_finished(input [16:0] dev_idx);
|
|||||||
length = 8'h07;
|
length = 8'h07;
|
||||||
//$display("using iqspi");
|
//$display("using iqspi");
|
||||||
end
|
end
|
||||||
|
`else
|
||||||
|
txBuf[2] <= (`SPI_READ | 8'h0);
|
||||||
|
txBuf[3] <= 8'h04;
|
||||||
|
length = 8'h08;
|
||||||
|
`endif
|
||||||
|
|
||||||
idx = dev_idx;
|
idx = dev_idx;
|
||||||
|
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ if __name__ == '__main__':
|
|||||||
environment.gen_slv_dev_num(4)
|
environment.gen_slv_dev_num(4)
|
||||||
environment.bringup()
|
environment.bringup()
|
||||||
|
|
||||||
#'''
|
'''
|
||||||
add_tc_2_runlist(errorPkt.tc1())
|
add_tc_2_runlist(errorPkt.tc1())
|
||||||
add_tc_2_runlist(errorPkt.tc2())
|
add_tc_2_runlist(errorPkt.tc2())
|
||||||
add_tc_2_runlist(errorPkt.tc3())
|
add_tc_2_runlist(errorPkt.tc3())
|
||||||
@@ -72,8 +72,10 @@ if __name__ == '__main__':
|
|||||||
add_tc_2_runlist(rwregs.tc3())
|
add_tc_2_runlist(rwregs.tc3())
|
||||||
#'''
|
#'''
|
||||||
|
|
||||||
#'''
|
|
||||||
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())
|
||||||
@@ -106,7 +108,7 @@ if __name__ == '__main__':
|
|||||||
add_tc_2_runlist(base.tc31())
|
add_tc_2_runlist(base.tc31())
|
||||||
#'''
|
#'''
|
||||||
|
|
||||||
#'''
|
'''
|
||||||
add_tc_2_runlist(broadcast.tc1())
|
add_tc_2_runlist(broadcast.tc1())
|
||||||
add_tc_2_runlist(broadcast.tc2())
|
add_tc_2_runlist(broadcast.tc2())
|
||||||
add_tc_2_runlist(broadcast.tc3())
|
add_tc_2_runlist(broadcast.tc3())
|
||||||
@@ -123,7 +125,7 @@ if __name__ == '__main__':
|
|||||||
add_tc_2_runlist(sync.tc8())
|
add_tc_2_runlist(sync.tc8())
|
||||||
#'''
|
#'''
|
||||||
|
|
||||||
#'''
|
'''
|
||||||
add_tc_2_runlist(ebmmu.tc1())
|
add_tc_2_runlist(ebmmu.tc1())
|
||||||
add_tc_2_runlist(ebmmu.tc2())
|
add_tc_2_runlist(ebmmu.tc2())
|
||||||
add_tc_2_runlist(ebmmu.tc3())
|
add_tc_2_runlist(ebmmu.tc3())
|
||||||
|
|||||||
@@ -275,13 +275,13 @@ def genIFRwDataCode(dev, addr, isWrite = False, data_len=0, data = None, wlog=Tr
|
|||||||
spi_offset = "`ARRAY_IDX_OFF"
|
spi_offset = "`ARRAY_IDX_OFF"
|
||||||
if iface == 0:
|
if iface == 0:
|
||||||
spi_api = "IF_IQSPI"
|
spi_api = "IF_IQSPI"
|
||||||
spi_offset = "3"
|
spi_offset = "4" #"3"
|
||||||
elif iface == 1:
|
elif iface == 1:
|
||||||
spi_api = "IF_OSPI"
|
spi_api = "IF_OSPI"
|
||||||
spi_offset = "3"
|
spi_offset = "4" #"3"
|
||||||
elif iface == 2:
|
elif iface == 2:
|
||||||
spi_api = "IF_OQSPI"
|
spi_api = "IF_OQSPI"
|
||||||
spi_offset = "3"
|
spi_offset = "4" #"3"
|
||||||
elif iface == 3:
|
elif iface == 3:
|
||||||
spi_api = "IF_AQSPI"
|
spi_api = "IF_AQSPI"
|
||||||
spi_offset = "4"
|
spi_offset = "4"
|
||||||
|
|||||||
Reference in New Issue
Block a user