Line 44... |
Line 44... |
//
|
//
|
`timescale 1ns / 1ps
|
`timescale 1ns / 1ps
|
`include "usbSerialInterfaceEngine_h.v"
|
`include "usbSerialInterfaceEngine_h.v"
|
`include "usbConstants_h.v"
|
`include "usbConstants_h.v"
|
|
|
module slaveGetPacket (ACKRxed, bitStuffError, clk, CRCError, dataSequence, getPacketEn, rst, RXDataIn, RXDataValid, RXFifoData, RXFifoFull, RXFifoWEn, RXOverflow, RXPacketRdy, RxPID, RXStreamStatusIn, RXTimeOut, SIERxTimeOut);
|
module slaveGetPacket (ACKRxed, bitStuffError, clk, CRCError, dataSequence, endPointReady, getPacketEn, rst, RXDataIn, RXDataValid, RXFifoData, RXFifoFull, RXFifoWEn, RXOverflow, RXPacketRdy, RxPID, RXStreamStatusIn, RXTimeOut, SIERxTimeOut);
|
input clk;
|
input clk;
|
|
input endPointReady;
|
input getPacketEn;
|
input getPacketEn;
|
input rst;
|
input rst;
|
input [7:0]RXDataIn;
|
input [7:0]RXDataIn;
|
input RXDataValid;
|
input RXDataValid;
|
input RXFifoFull;
|
input RXFifoFull;
|
Line 69... |
Line 70... |
reg ACKRxed, next_ACKRxed;
|
reg ACKRxed, next_ACKRxed;
|
reg bitStuffError, next_bitStuffError;
|
reg bitStuffError, next_bitStuffError;
|
wire clk;
|
wire clk;
|
reg CRCError, next_CRCError;
|
reg CRCError, next_CRCError;
|
reg dataSequence, next_dataSequence;
|
reg dataSequence, next_dataSequence;
|
|
wire endPointReady;
|
wire getPacketEn;
|
wire getPacketEn;
|
wire rst;
|
wire rst;
|
wire [7:0]RXDataIn;
|
wire [7:0]RXDataIn;
|
wire RXDataValid;
|
wire RXDataValid;
|
reg [7:0]RXFifoData, next_RXFifoData;
|
reg [7:0]RXFifoData, next_RXFifoData;
|
Line 109... |
Line 111... |
`define WAIT_PKT 5'b01101
|
`define WAIT_PKT 5'b01101
|
`define CHK_PKT_START 5'b01110
|
`define CHK_PKT_START 5'b01110
|
`define WAIT_EN 5'b01111
|
`define WAIT_EN 5'b01111
|
`define PKT_RDY 5'b10000
|
`define PKT_RDY 5'b10000
|
`define PROC_PKT_DATA_LOOP_DELAY 5'b10001
|
`define PROC_PKT_DATA_LOOP_DELAY 5'b10001
|
|
`define PROC_PKT_DATA_LOOP_EP_N_RDY 5'b10010
|
|
|
reg [4:0]CurrState_slvGetPkt, NextState_slvGetPkt;
|
reg [4:0]CurrState_slvGetPkt, NextState_slvGetPkt;
|
|
|
|
|
// Machine: slvGetPkt
|
// Machine: slvGetPkt
|
|
|
// NextState logic (combinatorial)
|
// NextState logic (combinatorial)
|
always @ (RXByte or RXDataValid or RXDataIn or RXStreamStatusIn or RXStreamStatus or RXFifoFull or RXByteOldest or RXByteOld or SIERxTimeOut or getPacketEn or RXOverflow or ACKRxed or CRCError or bitStuffError or dataSequence or RXFifoWEn or RXFifoData or RXPacketRdy or RXTimeOut or RxPID or CurrState_slvGetPkt)
|
always @ (RXByte or RXDataValid or RXDataIn or RXStreamStatusIn or RXStreamStatus or endPointReady or RXFifoFull or RXByteOldest or RXByteOld or SIERxTimeOut or getPacketEn or RXOverflow or ACKRxed or CRCError or bitStuffError or dataSequence or RXFifoWEn or RXFifoData or RXPacketRdy or RXTimeOut or RxPID or CurrState_slvGetPkt)
|
begin
|
begin
|
NextState_slvGetPkt <= CurrState_slvGetPkt;
|
NextState_slvGetPkt <= CurrState_slvGetPkt;
|
// Set default values for outputs and signals
|
// Set default values for outputs and signals
|
next_RXOverflow <= RXOverflow;
|
next_RXOverflow <= RXOverflow;
|
next_ACKRxed <= ACKRxed;
|
next_ACKRxed <= ACKRxed;
|
Line 280... |
Line 283... |
NextState_slvGetPkt <= `PROC_PKT_DATA_FIN;
|
NextState_slvGetPkt <= `PROC_PKT_DATA_FIN;
|
end
|
end
|
end
|
end
|
`PROC_PKT_DATA_LOOP_CHK_FIFO:
|
`PROC_PKT_DATA_LOOP_CHK_FIFO:
|
begin
|
begin
|
if (RXFifoFull == 1'b1)
|
if (endPointReady == 1'b0)
|
|
begin
|
|
NextState_slvGetPkt <= `PROC_PKT_DATA_LOOP_EP_N_RDY;
|
|
end
|
|
else if (RXFifoFull == 1'b1)
|
begin
|
begin
|
NextState_slvGetPkt <= `PROC_PKT_DATA_LOOP_FIFO_FULL;
|
NextState_slvGetPkt <= `PROC_PKT_DATA_LOOP_FIFO_FULL;
|
next_RXOverflow <= 1'b1;
|
next_RXOverflow <= 1'b1;
|
end
|
end
|
else
|
else
|
Line 316... |
Line 323... |
end
|
end
|
`PROC_PKT_DATA_LOOP_DELAY:
|
`PROC_PKT_DATA_LOOP_DELAY:
|
begin
|
begin
|
NextState_slvGetPkt <= `PROC_PKT_DATA_LOOP_CHK_FIFO;
|
NextState_slvGetPkt <= `PROC_PKT_DATA_LOOP_CHK_FIFO;
|
end
|
end
|
|
`PROC_PKT_DATA_LOOP_EP_N_RDY: // Discard data
|
|
begin
|
|
NextState_slvGetPkt <= `PROC_PKT_DATA_LOOP_W_D;
|
|
end
|
endcase
|
endcase
|
end
|
end
|
|
|
// Current State Logic (sequential)
|
// Current State Logic (sequential)
|
always @ (posedge clk)
|
always @ (posedge clk)
|