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

Subversion Repositories ulpi_wrapper

[/] [ulpi_wrapper/] [trunk/] [testbench/] [utmi_driver.cpp] - Blame information for rev 3

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 3 ultra_embe
#include "utmi_driver.h"
2
 
3
//-----------------------------------------------------------------
4
// tx_drive
5
//-----------------------------------------------------------------
6
void utmi_driver::tx_drive(void)
7
{
8
    // Wait until reset complete
9
    while (rst_i.read())
10
        wait();
11
 
12
    // I/O
13
    // utmi_txvalid_o
14
    // utmi_data_o
15
    // utmi_txready_i
16
 
17
    utmi_txvalid_o.write(false);
18
    utmi_data_o.write(false);
19
 
20
    while (true)
21
    {
22
        bool last;
23
        sc_uint <8> data;
24
 
25
        do
26
        {
27
            last = tx_read(data);
28
 
29
            utmi_txvalid_o.write(true);
30
            utmi_data_o.write(data);
31
 
32
            do
33
            {
34
                wait();
35
            }
36
            while (!utmi_txready_i.read());
37
 
38
            utmi_txvalid_o.write(false);
39
            utmi_data_o.write(0);
40
        }
41
        while (!last);
42
 
43
        wait();
44
    }
45
}
46
//-----------------------------------------------------------------
47
// rx_mon
48
//-----------------------------------------------------------------
49
void utmi_driver::rx_mon(void)
50
{
51
    // Wait until reset complete
52
    while (rst_i.read())
53
        wait();
54
 
55
    // I/O
56
    // utmi_data_i
57
    // utmi_rxvalid_i
58
    // utmi_rxactive_i
59
 
60
    bool last_valid = false;
61
    sc_uint <8> last_data = 0;
62
    while (true)
63
    {
64
        if (utmi_rxvalid_i.read())
65
        {
66
            if (last_valid)
67
                rx_write(last_data, false);
68
 
69
            last_valid = true;
70
            last_data  = utmi_data_i.read();
71
        }
72
 
73
        if (!utmi_rxactive_i.read() && last_valid)
74
        {
75
            rx_write(last_data, true);
76
            last_valid = false;
77
        }
78
        wait();
79
    }
80
}
81
//-----------------------------------------------------------------
82
// write
83
//-----------------------------------------------------------------
84
void utmi_driver::write(sc_uint <8> data, bool last)
85
{
86
    sc_uint <9> fifo_data;
87
 
88
    fifo_data.range(7,0) = data;
89
    fifo_data.range(8,8) = last;
90
 
91
    m_tx_fifo.write(fifo_data);
92
}
93
//-----------------------------------------------------------------
94
// read
95
//-----------------------------------------------------------------
96
bool utmi_driver::read(sc_uint <8> &data)
97
{
98
    sc_uint <9> fifo_data = m_rx_fifo.read();
99
    data = fifo_data.range(7,0);
100
    return (bool)fifo_data.range(8,8);
101
}
102
//-----------------------------------------------------------------
103
// rx_write
104
//-----------------------------------------------------------------
105
void utmi_driver::rx_write(sc_uint <8> data, bool last)
106
{
107
    sc_uint <9> fifo_data;
108
 
109
    fifo_data.range(7,0) = data;
110
    fifo_data.range(8,8) = last;
111
 
112
    m_rx_fifo.write(fifo_data);
113
}
114
//-----------------------------------------------------------------
115
// tx_read
116
//-----------------------------------------------------------------
117
bool utmi_driver::tx_read(sc_uint <8> &data)
118
{
119
    sc_uint <9> fifo_data = m_tx_fifo.read();
120
    data = fifo_data.range(7,0);
121
    return (bool)fifo_data.range(8,8);
122
}

powered by: WebSVN 2.1.0

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