修正QSPI/SPI,但没有通过测试,增加包生成工具,尚未完成
This commit is contained in:
@@ -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) );
|
||||
|
||||
|
||||
//读写
|
||||
|
||||
Reference in New Issue
Block a user