修正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) );
|
||||
|
||||
|
||||
//读写
|
||||
|
||||
49
tb/shinTest/gen_pkt.py
Executable file
49
tb/shinTest/gen_pkt.py
Executable file
@@ -0,0 +1,49 @@
|
||||
#!/usr/bin/env python
|
||||
#encoding=utf-8
|
||||
|
||||
from ctypes import *
|
||||
|
||||
class TPkt(BigEndianStructure):
|
||||
pass
|
||||
TPkt._pack_ = 1
|
||||
TPkt._fields_=[
|
||||
('len', c_uint, 12),
|
||||
('rsv1', c_uint, 2),
|
||||
('type', c_uint, 2),
|
||||
('rsv2', c_uint16),
|
||||
('data', c_uint8 * 2040),
|
||||
]
|
||||
|
||||
class TSubPkt(BigEndianStructure):
|
||||
pass
|
||||
|
||||
TSubPkt._pack_ = 1
|
||||
TSubPkt._fields_=[
|
||||
('dev', c_uint, 14),
|
||||
('mode', c_uint, 2),
|
||||
('addr', c_uint16),
|
||||
('cmd', c_uint, 4),
|
||||
('slen', c_uint, 12),
|
||||
('wkr', c_uint16)
|
||||
]
|
||||
|
||||
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
packet = b'\0' * 2048
|
||||
|
||||
pkt = cast (packet, POINTER(TPkt)).contents
|
||||
pkt.len = 512
|
||||
pkt.rsv1 = 0
|
||||
pkt.type = 0
|
||||
pkt.rsv2 = 0
|
||||
pkt.data[0] = 1
|
||||
pkt.data[1] = 2
|
||||
pkt.data[2] = 3
|
||||
pkt.data[3] = 4
|
||||
|
||||
for i in range(10):
|
||||
print(hex(packet[i]), ' ')
|
||||
|
||||
|
||||
Reference in New Issue
Block a user