Line 46... |
Line 46... |
`include "usbSerialInterfaceEngine_h.v"
|
`include "usbSerialInterfaceEngine_h.v"
|
`include "usbConstants_h.v"
|
`include "usbConstants_h.v"
|
|
|
|
|
|
|
module sendPacket (clk, fifoData, fifoEmpty, fifoReadEn, frameNum, HCTxPortCntl, HCTxPortData, HCTxPortGnt, HCTxPortRdy, HCTxPortReq, HCTxPortWEn, PID, rst, sendPacketRdy, sendPacketWEn, TxAddr, TxEndP);
|
module sendPacket (clk, fifoData, fifoEmpty, fifoReadEn, frameNum, fullSpeedPolarity, HCTxPortCntl, HCTxPortData, HCTxPortGnt, HCTxPortRdy, HCTxPortReq, HCTxPortWEn, PID, rst, sendPacketRdy, sendPacketWEn, TxAddr, TxEndP);
|
input clk;
|
input clk;
|
input [7:0]fifoData;
|
input [7:0]fifoData;
|
input fifoEmpty;
|
input fifoEmpty;
|
|
input fullSpeedPolarity;
|
input HCTxPortGnt;
|
input HCTxPortGnt;
|
input HCTxPortRdy;
|
input HCTxPortRdy;
|
input [3:0]PID;
|
input [3:0]PID;
|
input rst;
|
input rst;
|
input sendPacketWEn;
|
input sendPacketWEn;
|
Line 70... |
Line 71... |
wire clk;
|
wire clk;
|
wire [7:0]fifoData;
|
wire [7:0]fifoData;
|
wire fifoEmpty;
|
wire fifoEmpty;
|
reg fifoReadEn, next_fifoReadEn;
|
reg fifoReadEn, next_fifoReadEn;
|
reg [10:0]frameNum, next_frameNum;
|
reg [10:0]frameNum, next_frameNum;
|
|
wire fullSpeedPolarity;
|
reg [7:0]HCTxPortCntl, next_HCTxPortCntl;
|
reg [7:0]HCTxPortCntl, next_HCTxPortCntl;
|
reg [7:0]HCTxPortData, next_HCTxPortData;
|
reg [7:0]HCTxPortData, next_HCTxPortData;
|
wire HCTxPortGnt;
|
wire HCTxPortGnt;
|
wire HCTxPortRdy;
|
wire HCTxPortRdy;
|
reg HCTxPortReq, next_HCTxPortReq;
|
reg HCTxPortReq, next_HCTxPortReq;
|
Line 109... |
Line 111... |
`define DATA0_DATA1_TERM_BYTE 5'b10000
|
`define DATA0_DATA1_TERM_BYTE 5'b10000
|
`define OUT_IN_SETUP_CLR_WEN1 5'b10001
|
`define OUT_IN_SETUP_CLR_WEN1 5'b10001
|
`define SEND_SOF_CLR_WEN1 5'b10010
|
`define SEND_SOF_CLR_WEN1 5'b10010
|
`define DATA0_DATA1_CLR_WEN 5'b10011
|
`define DATA0_DATA1_CLR_WEN 5'b10011
|
`define DATA0_DATA1_CLR_REN 5'b10100
|
`define DATA0_DATA1_CLR_REN 5'b10100
|
|
`define LS_EOP_WAIT_RDY 5'b10101
|
|
`define LS_EOP_FIN 5'b10110
|
|
|
reg [4:0]CurrState_sndPkt, NextState_sndPkt;
|
reg [4:0]CurrState_sndPkt, NextState_sndPkt;
|
|
|
// Diagram actions (continuous assignments allowed only: assign ...)
|
// Diagram actions (continuous assignments allowed only: assign ...)
|
always @(PID)
|
always @(PID)
|
Line 122... |
Line 126... |
|
|
|
|
// Machine: sndPkt
|
// Machine: sndPkt
|
|
|
// NextState logic (combinatorial)
|
// NextState logic (combinatorial)
|
always @ (sendPacketWEn or HCTxPortGnt or HCTxPortRdy or PIDNotPID or PID or TxEndP or TxAddr or frameNum or fifoData or fifoEmpty or sendPacketRdy or fifoReadEn or HCTxPortData or HCTxPortCntl or HCTxPortWEn or HCTxPortReq or CurrState_sndPkt)
|
always @ (sendPacketWEn or HCTxPortGnt or fullSpeedPolarity or HCTxPortRdy or PIDNotPID or PID or TxEndP or TxAddr or frameNum or fifoData or fifoEmpty or sendPacketRdy or fifoReadEn or HCTxPortData or HCTxPortCntl or HCTxPortWEn or HCTxPortReq or CurrState_sndPkt)
|
begin
|
begin
|
NextState_sndPkt <= CurrState_sndPkt;
|
NextState_sndPkt <= CurrState_sndPkt;
|
// Set default values for outputs and signals
|
// Set default values for outputs and signals
|
next_sendPacketRdy <= sendPacketRdy;
|
next_sendPacketRdy <= sendPacketRdy;
|
next_fifoReadEn <= fifoReadEn;
|
next_fifoReadEn <= fifoReadEn;
|
Line 149... |
Line 153... |
next_HCTxPortReq <= 1'b1;
|
next_HCTxPortReq <= 1'b1;
|
end
|
end
|
end
|
end
|
`SP_WAIT_GNT:
|
`SP_WAIT_GNT:
|
begin
|
begin
|
if (HCTxPortGnt == 1'b1)
|
if ((HCTxPortGnt == 1'b1) && (PID == `SOF && fullSpeedPolarity == 1'b0))
|
|
begin
|
|
NextState_sndPkt <= `LS_EOP_WAIT_RDY;
|
|
end
|
|
else if (HCTxPortGnt == 1'b1)
|
begin
|
begin
|
NextState_sndPkt <= `SEND_PID_WAIT_RDY;
|
NextState_sndPkt <= `SEND_PID_WAIT_RDY;
|
end
|
end
|
end
|
end
|
`FIN_SP:
|
`FIN_SP:
|
Line 307... |
Line 315... |
`DATA0_DATA1_CLR_REN:
|
`DATA0_DATA1_CLR_REN:
|
begin
|
begin
|
next_fifoReadEn <= 1'b0;
|
next_fifoReadEn <= 1'b0;
|
NextState_sndPkt <= `DATA0_DATA1_READ_FIFO;
|
NextState_sndPkt <= `DATA0_DATA1_READ_FIFO;
|
end
|
end
|
|
`LS_EOP_WAIT_RDY:
|
|
begin
|
|
if (HCTxPortRdy == 1'b1)
|
|
begin
|
|
NextState_sndPkt <= `LS_EOP_FIN;
|
|
next_HCTxPortWEn <= 1'b1;
|
|
next_HCTxPortData <= 8'h00;
|
|
next_HCTxPortCntl <= `TX_LS_KEEP_ALIVE;
|
|
end
|
|
end
|
|
`LS_EOP_FIN:
|
|
begin
|
|
next_HCTxPortWEn <= 1'b0;
|
|
NextState_sndPkt <= `FIN_SP;
|
|
end
|
endcase
|
endcase
|
end
|
end
|
|
|
// Current State Logic (sequential)
|
// Current State Logic (sequential)
|
always @ (posedge clk)
|
always @ (posedge clk)
|