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

Subversion Repositories ulpi_wrapper

[/] [ulpi_wrapper/] [trunk/] [testbench/] [ulpi_driver.h] - Blame information for rev 3

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 3 ultra_embe
#ifndef ULPI_DRIVER_H
2
#define ULPI_DRIVER_H
3
 
4
#include <systemc.h>
5
 
6
//-----------------------------------------------------------------
7
// Defines
8
//-----------------------------------------------------------------
9
#define ULPI_REG_VIDL            0x0
10
#define ULPI_REG_VIDH            0x1
11
#define ULPI_REG_PIDL            0x2
12
#define ULPI_REG_PIDH            0x3
13
#define ULPI_REG_FUNC            0x4
14
#define ULPI_REG_OTG             0xa
15
#define ULPI_REG_SCRATCH         0x16
16
#define ULPI_REG_NUM             0x20
17
 
18
#define ULPI_RXCMD_LS_L          0
19
#define ULPI_RXCMD_LS_H          1
20
#define ULPI_RXCMD_RXEVENT_L     4
21
#define ULPI_RXCMD_RXEVENT_H     5
22
#define ULPI_RXEVENT_INACTIVE    0
23
#define ULPI_RXEVENT_ACTIVE      1
24
#define ULPI_RXEVENT_HOSTDC      2
25
#define ULPI_RXEVENT_ERROR       3
26
 
27
//-----------------------------------------------------------------
28
// ulpi_driver: ULPI Master Driver (PHY TB component)
29
//-----------------------------------------------------------------
30
SC_MODULE (ulpi_driver)
31
{
32
public:
33
    //-------------------------------------------------------------
34
    // Interface I/O
35
    //-------------------------------------------------------------    
36
    // Clock and Reset
37
    sc_in<bool>             clk_i;
38
    sc_in<bool>             rst_i;
39
 
40
    // I/O
41
    sc_out <sc_uint<8> >    ulpi_data_o;
42
    sc_in  <sc_uint<8> >    ulpi_data_i;
43
    sc_out <bool>           ulpi_dir_o;
44
    sc_out <bool>           ulpi_nxt_o;
45
    sc_in  <bool>           ulpi_stp_i;
46
 
47
    //-------------------------------------------------------------
48
    // Constructor
49
    //-------------------------------------------------------------
50
    SC_HAS_PROCESS(ulpi_driver);
51
    ulpi_driver(sc_module_name name): sc_module(name),
52
                                      m_tx_fifo(1024),
53
                                      m_rx_fifo(1024)
54
    {
55
        SC_CTHREAD(drive, clk_i.pos());
56
 
57
        m_reg[ULPI_REG_VIDL]    = 0x24;
58
        m_reg[ULPI_REG_VIDH]    = 0x04;
59
        m_reg[ULPI_REG_PIDL]    = 0x04;
60
        m_reg[ULPI_REG_PIDH]    = 0x00;
61
        m_reg[ULPI_REG_FUNC]    = 0x41;
62
        m_reg[ULPI_REG_OTG]     = 0x06;
63
        m_reg[ULPI_REG_SCRATCH] = 0x00;
64
    }
65
 
66
    //-------------------------------------------------------------
67
    // Trace
68
    //-------------------------------------------------------------
69
    void add_trace(sc_trace_file *vcd, std::string prefix)
70
    {
71
        #undef  TRACE_SIGNAL
72
        #define TRACE_SIGNAL(s) sc_trace(vcd,s,prefix + #s)
73
 
74
        TRACE_SIGNAL(ulpi_data_o);
75
        TRACE_SIGNAL(ulpi_data_i);
76
        TRACE_SIGNAL(ulpi_dir_o);
77
        TRACE_SIGNAL(ulpi_nxt_o);
78
        TRACE_SIGNAL(ulpi_stp_i);
79
 
80
        #undef  TRACE_SIGNAL
81
    }
82
 
83
    //-------------------------------------------------------------
84
    // API
85
    //-------------------------------------------------------------
86
public:
87
    void write(sc_uint <8> data, bool last = false);
88
    bool read(sc_uint <8> &data);
89
 
90
    bool write_empty(void) { return m_tx_fifo.num_available() == 0; }
91
    bool read_ready(void)  { return m_rx_fifo.num_available() > 0; }
92
 
93
    //-------------------------------------------------------------
94
    // Internal
95
    //-------------------------------------------------------------
96
protected:
97
    void drive(void);
98
    void rx_write(sc_uint <8> data, bool last);
99
    bool tx_read(sc_uint <8> &data);
100
 
101
    void drive_rxcmd(sc_uint <2> linestate, bool rx_active, bool rx_error);
102
    void drive_rxdata(sc_uint <8> data);
103
    void drive_output(bool rx_data);
104
    void drive_input(void);
105
 
106
    void        reg_write(sc_uint <8> addr, sc_uint <8> data);
107
    sc_uint <8> reg_read(sc_uint <8> addr);
108
 
109
    //-------------------------------------------------------------
110
    // Members
111
    //-------------------------------------------------------------
112
    sc_fifo < sc_uint<9> >  m_tx_fifo;
113
    sc_fifo < sc_uint<9> >  m_rx_fifo;
114
    sc_uint <8>             m_reg[ULPI_REG_NUM];
115
};
116
 
117
#endif

powered by: WebSVN 2.1.0

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