OpenCores
URL https://opencores.org/ocsvn/usbhostslave/usbhostslave/trunk

Subversion Repositories usbhostslave

[/] [usbhostslave/] [trunk/] [RTL/] [hostController/] [softransmit.v] - Blame information for rev 2

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 sfielding
//--------------------------------------------------------------------------------------------------
2
//
3
// Title       : No Title
4
// Design      : usbhostslave
5
// Author      : 
6
// Company     : 
7
//
8
//-------------------------------------------------------------------------------------------------
9
//
10
// File        : c:\projects\USBHostSlave\Aldec\usbhostslave\usbhostslave\compile\softransmit.v
11
// Generated   : 09/14/04 21:51:27
12
// From        : c:\projects\USBHostSlave\RTL\hostController\softransmit.asf
13
// By          : FSM2VHDL ver. 4.0.3.8
14
//
15
//-------------------------------------------------------------------------------------------------
16
//
17
// Description : 
18
//
19
//-------------------------------------------------------------------------------------------------
20
 
21
`timescale 1ns / 1ps
22
`include "usbHostControl_h.v"
23
 
24
 
25
module SOFTransmit (SOFEnable, SOFSent, SOFSyncEn, SOFTimerClr, SOFTimer, clk, rst, sendPacketArbiterGnt, sendPacketArbiterReq, sendPacketRdy, sendPacketWEn);
26
input   SOFEnable;              // After host software asserts SOFEnable, must wait TBD time before asserting SOFSyncEn
27
input   SOFSyncEn;
28
input   [15:0] SOFTimer;
29
input   clk;
30
input   rst;
31
input   sendPacketArbiterGnt;
32
input   sendPacketRdy;
33
output  SOFSent;                // single cycle pulse
34
output  SOFTimerClr;            // Single cycle pulse
35
output  sendPacketArbiterReq;
36
output  sendPacketWEn;
37
 
38
wire    SOFEnable;
39
reg     SOFSent, next_SOFSent;
40
wire    SOFSyncEn;
41
reg     SOFTimerClr, next_SOFTimerClr;
42
wire    [15:0] SOFTimer;
43
wire    clk;
44
wire    rst;
45
wire    sendPacketArbiterGnt;
46
reg     sendPacketArbiterReq, next_sendPacketArbiterReq;
47
wire    sendPacketRdy;
48
reg     sendPacketWEn, next_sendPacketWEn;
49
 
50
// BINARY ENCODED state machine: SOFTx
51
// State codes definitions:
52
`define START_STX 3'b000
53
`define WAIT_SOF_NEAR 3'b001
54
`define WAIT_SP_GNT 3'b010
55
`define WAIT_SOF_NOW 3'b011
56
`define SOF_FIN 3'b100
57
 
58
reg [2:0] CurrState_SOFTx;
59
reg [2:0] NextState_SOFTx;
60
 
61
 
62
//--------------------------------------------------------------------
63
// Machine: SOFTx
64
//--------------------------------------------------------------------
65
//----------------------------------
66
// NextState logic (combinatorial)
67
//----------------------------------
68
always @ (SOFTimer or SOFSyncEn or SOFEnable or sendPacketArbiterGnt or sendPacketRdy or sendPacketArbiterReq or sendPacketWEn or SOFTimerClr or SOFSent or CurrState_SOFTx)
69
begin : SOFTx_NextState
70
        NextState_SOFTx <= CurrState_SOFTx;
71
        // Set default values for outputs and signals
72
        next_sendPacketArbiterReq <= sendPacketArbiterReq;
73
        next_sendPacketWEn <= sendPacketWEn;
74
        next_SOFTimerClr <= SOFTimerClr;
75
        next_SOFSent <= SOFSent;
76
        case (CurrState_SOFTx) // synopsys parallel_case full_case
77
                `START_STX:
78
                        NextState_SOFTx <= `WAIT_SOF_NEAR;
79
                `WAIT_SOF_NEAR:
80
                        if (SOFTimer >= `SOF_TX_TIME - `SOF_TX_MARGIN ||
81
                                (SOFSyncEn == 1'b1 &&
82
                                SOFEnable == 1'b1))
83
                        begin
84
                                NextState_SOFTx <= `WAIT_SP_GNT;
85
                                next_sendPacketArbiterReq <= 1'b1;
86
                        end
87
                `WAIT_SP_GNT:
88
                        if (sendPacketArbiterGnt == 1'b1 && sendPacketRdy == 1'b1)
89
                                NextState_SOFTx <= `WAIT_SOF_NOW;
90
                `WAIT_SOF_NOW:
91
                        if (SOFTimer >= `SOF_TX_TIME)
92
                        begin
93
                                NextState_SOFTx <= `SOF_FIN;
94
                                next_sendPacketWEn <= 1'b1;
95
                                next_SOFTimerClr <= 1'b1;
96
                                next_SOFSent <= 1'b1;
97
                        end
98
                        else if (SOFEnable == 1'b0)
99
                        begin
100
                                NextState_SOFTx <= `SOF_FIN;
101
                                next_SOFTimerClr <= 1'b1;
102
                        end
103
                `SOF_FIN:
104
                begin
105
                        next_sendPacketWEn <= 1'b0;
106
                        next_SOFTimerClr <= 1'b0;
107
                        next_SOFSent <= 1'b0;
108
                        NextState_SOFTx <= `WAIT_SOF_NEAR;
109
                        next_sendPacketArbiterReq <= 1'b0;
110
                end
111
        endcase
112
end
113
 
114
//----------------------------------
115
// Current State Logic (sequential)
116
//----------------------------------
117
always @ (posedge clk)
118
begin : SOFTx_CurrentState
119
        if (rst)
120
                CurrState_SOFTx <= `START_STX;
121
        else
122
                CurrState_SOFTx <= NextState_SOFTx;
123
end
124
 
125
//----------------------------------
126
// Registered outputs logic
127
//----------------------------------
128
always @ (posedge clk)
129
begin : SOFTx_RegOutput
130
        if (rst)
131
        begin
132
                SOFSent <= 1'b0;
133
                SOFTimerClr <= 1'b0;
134
                sendPacketArbiterReq <= 1'b0;
135
                sendPacketWEn <= 1'b0;
136
        end
137
        else
138
        begin
139
                SOFSent <= next_SOFSent;
140
                SOFTimerClr <= next_SOFTimerClr;
141
                sendPacketArbiterReq <= next_sendPacketArbiterReq;
142
                sendPacketWEn <= next_sendPacketWEn;
143
        end
144
end
145
 
146
endmodule

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.