修正QSPI/SPI,但没有通过测试,增加包生成工具,尚未完成

This commit is contained in:
2025-05-19 14:43:00 +08:00
4 changed files with 140 additions and 42 deletions

View File

@@ -268,12 +268,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]}}) |
@@ -313,7 +315,7 @@ always @(posedge clock) begin
bitCnt <= #5 ~3'b0;
spi_csn[idx] <= #5 1'b0;
exChangeReg <= txBuf[0];
exChangeRego <= txBuf[0];
end
end
@@ -321,6 +323,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
@@ -333,20 +353,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
@@ -579,8 +597,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) );
//读写