SPI时序调整

This commit is contained in:
Ruige Lee
2025-05-19 14:13:47 +08:00
parent c4daca834c
commit 1e606d28c2
3 changed files with 91 additions and 44 deletions

View File

@@ -262,12 +262,14 @@ end
reg [7:0] txBuf[0:2047];
reg [7:0] rxBuf[0:2047];
reg [7:0] exChangeReg;
reg [7:0] exChangeRego;
reg [7:0] exChangeRegi;
assign spi_mosi = exChangeReg[7];
assign qspi_mosi = exChangeReg[7:4];
assign spi_mosi = exChangeRego[7];
assign qspi_mosi = exChangeRego[7:4];
wire [3:0] qspi_mux_miso =
( qspi_miso[4*0+3:4*0] & ~{4{spi_csn[ 0]}}) |
( qspi_miso[4*1+3:4*1] & ~{4{spi_csn[ 1]}}) |
@@ -307,7 +309,7 @@ always @(posedge clock) begin
bitCnt <= #5 ~3'b0;
spi_csn[idx] <= #5 1'b0;
exChangeReg <= txBuf[0];
exChangeRego <= txBuf[0];
end
end
@@ -315,6 +317,24 @@ end
wire isQspi = (idx >= 0 && idx <= 4) || idx >= 10;
wire [11:0] nextByteCnt = byteCnt +1;
//输出
always @(negedge sck) begin
if( isBusy ) begin
if( &bitCnt ) begin
if( txBuf[2] === 1 & nextByteCnt >= 3) begin
exChangeRego <= isQspi ? exChangeRego << 4 : exChangeRego << 1;
end else begin
exChangeRego <= txBuf[nextByteCnt];
end
end else begin
if( isQspi ) begin
exChangeRego <= isQspi ? exChangeRego << 4 : exChangeRego << 1;
end
end
end
end
//输入
always @(posedge sck) begin
if( isBusy ) begin
if( transCnt <= length ) begin
@@ -327,20 +347,18 @@ always @(posedge sck) begin
if( &bitCnt ) begin
byteCnt <= byteCnt +1;
transCnt <= transCnt + 1;
rxBuf[byteCnt] <= isQspi ? {exChangeReg[3:0], qspi_mux_miso} : {exChangeReg[6:0], spi_mux_miso};
rxBuf[byteCnt] <= isQspi ? {exChangeRegi[3:0], qspi_mux_miso} : {exChangeRegi[6:0], spi_mux_miso};
if( txBuf[2] === 1 & nextByteCnt >= 4) begin
$display("spi read out @ %x", exChangeReg);
$display("spi read out %x", exChangeRegi);
end
if( txBuf[2] === 1 & nextByteCnt >= 3) begin
exChangeReg <= isQspi ? {exChangeReg[3:0], qspi_mux_miso} : {exChangeReg[6:0], spi_mux_miso};
exChangeRegi <= isQspi ? {exChangeRegi[3:0], qspi_mux_miso} : {exChangeRegi[6:0], spi_mux_miso};
end else begin
exChangeReg <= txBuf[nextByteCnt];
exChangeRegi <= 0;
end
end else begin
if( isQspi ) begin
exChangeReg <= {exChangeReg[3:0], qspi_mux_miso};
end else begin
exChangeReg <= {exChangeReg[6:0], spi_mux_miso};
exChangeRegi <= isQspi ? {exChangeRegi[3:0], qspi_mux_miso} : {exChangeRegi[6:0], spi_mux_miso};
end
end
@@ -353,8 +371,6 @@ end
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];
@@ -482,8 +498,11 @@ initial begin
//测试
spi_trans( (16'hc0), (`SPI_READ), (6), (3) );//发送SM0 接收SM0, 请求发送
spi_trans( (16'hc0), (`SPI_READ), (6), (3) );
spi_trans( (16'h0a), (`SPI_READ), (2), (1) );
spi_trans( (16'h0a), (`SPI_READ), (2), (2) );
spi_trans( (16'h0a), (`SPI_READ), (2), (3) );
spi_trans( (16'h0a), (`SPI_READ), (2), (4) );
//读写