|
@@ -46,11 +46,18 @@ module InterfaceArbiter
|
|
|
// REG/WIRE
|
|
// REG/WIRE
|
|
|
|
|
|
|
|
localparam [1:0] IDLE = 0;
|
|
localparam [1:0] IDLE = 0;
|
|
|
- localparam [1:0] DATARX = 1;
|
|
|
|
|
|
|
+ localparam [1:0] DEL = 1;
|
|
|
|
|
+ localparam [1:0] DATARX = 2;
|
|
|
|
|
|
|
|
reg [OUTWORDWIDTH-1:0] dataRegSSpi;
|
|
reg [OUTWORDWIDTH-1:0] dataRegSSpi;
|
|
|
reg [OUTWORDWIDTH-1:0] dataRegQSpi;
|
|
reg [OUTWORDWIDTH-1:0] dataRegQSpi;
|
|
|
|
|
+
|
|
|
|
|
+ reg [OUTWORDWIDTH-1:0] dataRegSSpiR;
|
|
|
|
|
+ reg [OUTWORDWIDTH-1:0] dataRegQSpiR;
|
|
|
|
|
|
|
|
|
|
+ reg [OUTWORDWIDTH-1:0] dataRegSSpiRR;
|
|
|
|
|
+ reg [OUTWORDWIDTH-1:0] dataRegQSpiRR;
|
|
|
|
|
+
|
|
|
reg [OUTWORDWIDTH-1:0] captRegSspi;
|
|
reg [OUTWORDWIDTH-1:0] captRegSspi;
|
|
|
|
|
|
|
|
reg [QSPIWORDWIDTH-1:0] captReg0;
|
|
reg [QSPIWORDWIDTH-1:0] captReg0;
|
|
@@ -176,10 +183,18 @@ module InterfaceArbiter
|
|
|
if (Rst_i) begin
|
|
if (Rst_i) begin
|
|
|
spiModeSyncA <= 1'b0;
|
|
spiModeSyncA <= 1'b0;
|
|
|
spiModeSyncB <= 1'b0;
|
|
spiModeSyncB <= 1'b0;
|
|
|
|
|
+ dataRegSSpiR <= 0;
|
|
|
|
|
+ dataRegQSpiR <= 0;
|
|
|
|
|
+ dataRegSSpiRR <= 0;
|
|
|
|
|
+ dataRegQSpiRR <= 0;
|
|
|
end
|
|
end
|
|
|
else begin
|
|
else begin
|
|
|
spiModeSyncA <= spiMode;
|
|
spiModeSyncA <= spiMode;
|
|
|
spiModeSyncB <= spiModeSyncA;
|
|
spiModeSyncB <= spiModeSyncA;
|
|
|
|
|
+ dataRegSSpiR <= captRegSspi;
|
|
|
|
|
+ dataRegQSpiR <= {captReg0,captReg1,captReg2,captReg3};
|
|
|
|
|
+ dataRegSSpiRR <= dataRegSSpiR;
|
|
|
|
|
+ dataRegQSpiRR <= dataRegQSpiR;
|
|
|
end
|
|
end
|
|
|
end
|
|
end
|
|
|
|
|
|
|
@@ -187,8 +202,8 @@ module InterfaceArbiter
|
|
|
if (!Rst_i) begin
|
|
if (!Rst_i) begin
|
|
|
dataValReg <= dataVal;
|
|
dataValReg <= dataVal;
|
|
|
if (dataVal) begin
|
|
if (dataVal) begin
|
|
|
- dataRegSSpi <= captRegSspi;
|
|
|
|
|
- dataRegQSpi <= {captReg0,captReg1,captReg2,captReg3};
|
|
|
|
|
|
|
+ dataRegSSpi <= dataRegSSpiRR;
|
|
|
|
|
+ dataRegQSpi <= dataRegQSpiRR;
|
|
|
end
|
|
end
|
|
|
end else begin
|
|
end else begin
|
|
|
dataRegSSpi <= 0;
|
|
dataRegSSpi <= 0;
|
|
@@ -199,11 +214,11 @@ module InterfaceArbiter
|
|
|
|
|
|
|
|
always @(posedge Clk_i) begin
|
|
always @(posedge Clk_i) begin
|
|
|
if (!Rst_i) begin
|
|
if (!Rst_i) begin
|
|
|
- if (currState == IDLE) begin
|
|
|
|
|
|
|
+ if (currState == DEL) begin
|
|
|
if (!spiModeSyncB) begin
|
|
if (!spiModeSyncB) begin
|
|
|
- wordsNum <= dataRegSSpi[17:1];
|
|
|
|
|
|
|
+ wordsNum <= dataRegSSpiRR[17:1];
|
|
|
end else begin
|
|
end else begin
|
|
|
- wordsNum <= dataRegQSpi[21:19]+dataRegQSpi[17:16]+dataRegQSpi[15:12]+dataRegQSpi[10:9]+dataRegQSpi[7:6]+dataRegQSpi[4:3]+dataRegQSpi[2]+dataRegQSpi[1];
|
|
|
|
|
|
|
+ wordsNum <= dataRegQSpiRR[21:19]+dataRegQSpiRR[17:16]+dataRegQSpiRR[15:12]+dataRegQSpiRR[10:9]+dataRegQSpiRR[7:6]+dataRegQSpiRR[4:3]+dataRegQSpiRR[2]+dataRegQSpiRR[1];
|
|
|
end
|
|
end
|
|
|
end
|
|
end
|
|
|
end else begin
|
|
end else begin
|
|
@@ -223,13 +238,21 @@ module InterfaceArbiter
|
|
|
nextState = IDLE;
|
|
nextState = IDLE;
|
|
|
case(currState)
|
|
case(currState)
|
|
|
IDLE :begin
|
|
IDLE :begin
|
|
|
- if (dataValReg) begin
|
|
|
|
|
- nextState = DATARX;
|
|
|
|
|
|
|
+ if (ssCnt == 6) begin
|
|
|
|
|
+ nextState = DEL;
|
|
|
end else begin
|
|
end else begin
|
|
|
nextState = IDLE;
|
|
nextState = IDLE;
|
|
|
end
|
|
end
|
|
|
end
|
|
end
|
|
|
|
|
|
|
|
|
|
+ DEL :begin
|
|
|
|
|
+ if (dataVal) begin
|
|
|
|
|
+ nextState = DATARX;
|
|
|
|
|
+ end else begin
|
|
|
|
|
+ nextState = DEL;
|
|
|
|
|
+ end
|
|
|
|
|
+ end
|
|
|
|
|
+
|
|
|
DATARX :begin
|
|
DATARX :begin
|
|
|
if (rxDone) begin
|
|
if (rxDone) begin
|
|
|
nextState = IDLE;
|
|
nextState = IDLE;
|