|
@@ -81,18 +81,72 @@ module InterfaceArbiter
|
|
|
reg [1:0] currState;
|
|
reg [1:0] currState;
|
|
|
|
|
|
|
|
reg rxDone;
|
|
reg rxDone;
|
|
|
|
|
+
|
|
|
|
|
+ wire plsToggleSyncSignal;
|
|
|
|
|
+ reg plsToggle;
|
|
|
|
|
+ reg plsToggleSyncA;
|
|
|
|
|
+ reg plsToggleSyncB;
|
|
|
|
|
+ reg plsToggleSyncC;
|
|
|
|
|
+ reg plsToggleSyncSignalR;
|
|
|
|
|
+
|
|
|
//================================================================================
|
|
//================================================================================
|
|
|
// ASSIGNMENTS
|
|
// ASSIGNMENTS
|
|
|
assign ssPos = ssRegR & !ssRegRR;
|
|
assign ssPos = ssRegR & !ssRegRR;
|
|
|
|
|
|
|
|
|
|
|
|
|
- assign DataVal_o = dataValReg;
|
|
|
|
|
|
|
+ assign DataVal_o = plsToggleSyncSignal;
|
|
|
assign Data_o = (spiMode)? dataRegQSpi:dataRegSSpi;
|
|
assign Data_o = (spiMode)? dataRegQSpi:dataRegSSpi;
|
|
|
|
|
|
|
|
|
|
+ assign plsToggleSyncSignal = plsToggleSyncB^plsToggleSyncA;
|
|
|
|
|
+
|
|
|
//assign ssCntRstThresh = (spiMode) ? QSPIWORDWIDTH-1:SSPIWORDWIDTH-1;
|
|
//assign ssCntRstThresh = (spiMode) ? QSPIWORDWIDTH-1:SSPIWORDWIDTH-1;
|
|
|
|
|
|
|
|
//================================================================================
|
|
//================================================================================
|
|
|
// CODING
|
|
// CODING
|
|
|
|
|
+
|
|
|
|
|
+ always @(posedge Clk_i) begin
|
|
|
|
|
+ if (Rst_i) begin
|
|
|
|
|
+ plsToggleSyncA <= 1'b0;
|
|
|
|
|
+ plsToggleSyncB <= 1'b0;
|
|
|
|
|
+ end
|
|
|
|
|
+ else begin
|
|
|
|
|
+ plsToggleSyncA <= plsToggle;
|
|
|
|
|
+ plsToggleSyncB <= plsToggleSyncA;
|
|
|
|
|
+ end
|
|
|
|
|
+ end
|
|
|
|
|
+
|
|
|
|
|
+ always @(posedge Clk_i) begin
|
|
|
|
|
+ if (Rst_i) begin
|
|
|
|
|
+ plsToggleSyncC <= 1'b0;
|
|
|
|
|
+ end
|
|
|
|
|
+ else begin
|
|
|
|
|
+ plsToggleSyncC <= plsToggleSyncB;
|
|
|
|
|
+ end
|
|
|
|
|
+ end
|
|
|
|
|
+
|
|
|
|
|
+ always @(posedge Ss_i or posedge Rst_i) begin
|
|
|
|
|
+ if (Rst_i) begin
|
|
|
|
|
+ plsToggle <= 1'b0;
|
|
|
|
|
+ end
|
|
|
|
|
+ else begin
|
|
|
|
|
+ if (Ss_i) begin
|
|
|
|
|
+ plsToggle <= ~plsToggle;
|
|
|
|
|
+ end
|
|
|
|
|
+ else begin
|
|
|
|
|
+ plsToggle <= plsToggle;
|
|
|
|
|
+ end
|
|
|
|
|
+ end
|
|
|
|
|
+ end
|
|
|
|
|
+
|
|
|
|
|
+ always @(posedge Clk_i) begin
|
|
|
|
|
+ if (Rst_i) begin
|
|
|
|
|
+ plsToggleSyncSignalR <= 1'b0;
|
|
|
|
|
+ end
|
|
|
|
|
+ else begin
|
|
|
|
|
+ plsToggleSyncSignalR <= plsToggleSyncSignal;
|
|
|
|
|
+ end
|
|
|
|
|
+ end
|
|
|
|
|
+
|
|
|
always @(posedge Sck_i or posedge Rst_i) begin
|
|
always @(posedge Sck_i or posedge Rst_i) begin
|
|
|
if (Rst_i) begin
|
|
if (Rst_i) begin
|
|
|
captRegSspi <= 0;
|
|
captRegSspi <= 0;
|
|
@@ -141,7 +195,7 @@ module InterfaceArbiter
|
|
|
always @(posedge Clk_i) begin
|
|
always @(posedge Clk_i) begin
|
|
|
if (!Rst_i) begin
|
|
if (!Rst_i) begin
|
|
|
if (currState == DATARX) begin
|
|
if (currState == DATARX) begin
|
|
|
- if (ssPos) begin
|
|
|
|
|
|
|
+ if (plsToggleSyncSignal) begin
|
|
|
if (wordsCnt == wordsNum-1) begin
|
|
if (wordsCnt == wordsNum-1) begin
|
|
|
wordsCnt <= 0;
|
|
wordsCnt <= 0;
|
|
|
rxDone <= 1'b1;
|
|
rxDone <= 1'b1;
|
|
@@ -208,7 +262,7 @@ module InterfaceArbiter
|
|
|
|
|
|
|
|
always @(posedge Clk_i) begin
|
|
always @(posedge Clk_i) begin
|
|
|
if (!Rst_i) begin
|
|
if (!Rst_i) begin
|
|
|
- if (ssPos) begin
|
|
|
|
|
|
|
+ if (plsToggleSyncSignal) begin
|
|
|
dataRegSSpi <= captRegSspi;
|
|
dataRegSSpi <= captRegSspi;
|
|
|
dataRegQSpi <= {captReg0,captReg1,captReg2,captReg3};
|
|
dataRegQSpi <= {captReg0,captReg1,captReg2,captReg3};
|
|
|
dataValReg <= 1'b1;
|
|
dataValReg <= 1'b1;
|
|
@@ -234,7 +288,7 @@ module InterfaceArbiter
|
|
|
nextState = IDLE;
|
|
nextState = IDLE;
|
|
|
case(currState)
|
|
case(currState)
|
|
|
IDLE :begin
|
|
IDLE :begin
|
|
|
- if (ssPosR) begin
|
|
|
|
|
|
|
+ if (plsToggleSyncSignalR) begin
|
|
|
nextState = DATARX;
|
|
nextState = DATARX;
|
|
|
end else begin
|
|
end else begin
|
|
|
nextState = IDLE;
|
|
nextState = IDLE;
|