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

Subversion Repositories spacewiresystemc

[/] [spacewiresystemc/] [trunk/] [systemC/] [send_module_sc.h] - Blame information for rev 29

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

Line No. Rev Author Line
1 29 redbear
//+FHDR------------------------------------------------------------------------
2
//Copyright (c) 2013 Latin Group American Integhrated Circuit, Inc. All rights reserved
3
//GLADIC Open Source RTL
4
//-----------------------------------------------------------------------------
5
//FILE NAME      :
6
//DEPARTMENT     : IC Design / Verification
7
//AUTHOR         : Felipe Fernandes da Costa
8
//AUTHOR’S EMAIL :
9
//-----------------------------------------------------------------------------
10
//RELEASE HISTORY
11
//VERSION DATE AUTHOR DESCRIPTION
12
//1.0 YYYY-MM-DD name
13
//-----------------------------------------------------------------------------
14
//KEYWORDS : General file searching keywords, leave blank if none.
15
//-----------------------------------------------------------------------------
16
//PURPOSE  : ECSS_E_ST_50_12C_31_july_2008
17
//-----------------------------------------------------------------------------
18
//PARAMETERS
19
//PARAM NAME            RANGE   : DESCRIPTION : DEFAULT : UNITS
20
//e.g.DATA_WIDTH        [32,16] : width of the DATA : 32:
21
//-----------------------------------------------------------------------------
22
//REUSE ISSUES
23
//Reset Strategy        :
24
//Clock Domains         :
25
//Critical Timing       :
26
//Test Features         :
27
//Asynchronous I/F      :
28
//Scan Methodology      :
29
//Instantiations        :
30
//Synthesizable (y/n)   :
31
//Other                 :
32
//-FHDR------------------------------------------------------------------------
33
 
34
#ifndef SPW_TX_SEND
35
#define SPW_TX_SEND
36
 
37
class SPW_TX_SEND_DATA;
38
 
39
SC_MODULE(SPW_TX_SEND_DATA)
40
{
41
        sc_in<bool> CLOCK_SEND_DATA;
42
        sc_in<bool> RESET_SEND_DATA;
43
        sc_in<bool> E_SEND_DATA;
44
 
45
        sc_out<bool> TICKIN_TX_SEND_DATA;
46
        sc_out<sc_uint<8> > TIMEIN_CONTROL_FLAG_TX_SEND_DATA;
47
 
48
        sc_out<bool> TXWRITE_TX_SEND_DATA;
49
        sc_out<sc_uint<9> > TXDATA_FLAGCTRL_TX_SEND_DATA;
50
 
51
        sc_in<bool> READY_TX_SEND_DATA;
52
        sc_in<bool> READY_TICK_DATA;
53
 
54
        sc_uint<9> data_send;
55
 
56
        int a = 0;
57
        int c = 0;
58
 
59
        void SEND_DATA()
60
        {
61
                if(!RESET_SEND_DATA)
62
                {
63
                        TXWRITE_TX_SEND_DATA = false;
64
                        a=0;
65
                }
66
                else
67
                {
68
                        if(E_SEND_DATA && data_generated_sc.size() > 0)
69
                        {
70
 
71
                                if(a < data_generated_sc.size()-(unsigned int)1)
72
                                {
73
                                        data_send = data_generated_sc[a];
74
                                        if(!READY_TX_SEND_DATA)
75
                                        {
76
                                                TXWRITE_TX_SEND_DATA = true;
77
                                        }else
78
                                        {
79
                                                TXWRITE_TX_SEND_DATA = false;
80
                                                TXDATA_FLAGCTRL_TX_SEND_DATA= data_send;
81
                                        }
82
                                }
83
                                //cout << TXDATA_FLAGCTRL_TX_SEND_DATA.read().to_string(SC_HEX) << " " << READY_TX_SEND_DATA << " " << TXWRITE_TX_SEND_DATA << endl;
84
 
85
                        }
86
 
87
                }
88
        }
89
 
90
 
91
        void INCREMMENT_DATA()
92
        {
93
                if(a < data_generated_sc.size()-(unsigned int)1)
94
                        a++;
95
                else
96
                        a=0;
97
        }
98
 
99
        void SEND_TIME_CODE()
100
        {
101
                if(!RESET_SEND_DATA)
102
                {
103
                        TICKIN_TX_SEND_DATA = false;
104
                        TIMEIN_CONTROL_FLAG_TX_SEND_DATA = 0;
105
                        c=0;
106
                }
107
                else
108
                {
109
                        if(start_tick_data)
110
                        {
111
                                if( c < 256)
112
                                {
113
 
114
                                        if(!READY_TICK_DATA)
115
                                        {
116
                                                TICKIN_TX_SEND_DATA = true;
117
                                        }
118
                                        else
119
                                        {
120
                                                TICKIN_TX_SEND_DATA = false;
121
                                                c++;
122
                                                TIMEIN_CONTROL_FLAG_TX_SEND_DATA = TIMEIN_CONTROL_FLAG_TX_SEND_DATA.read() +1;
123
                                        }
124
                                }
125
                                else
126
                                {
127
                                        c=0;
128
                                        TIMEIN_CONTROL_FLAG_TX_SEND_DATA = 0;
129
                                }
130
                        }
131
                }
132
        }
133
        SC_CTOR(SPW_TX_SEND_DATA)
134
        {
135
                SC_METHOD(SEND_DATA);
136
                sensitive << CLOCK_SEND_DATA;
137
                SC_METHOD(INCREMMENT_DATA);
138
                sensitive << READY_TX_SEND_DATA.pos();
139
                SC_METHOD(SEND_TIME_CODE);
140
                sensitive << CLOCK_SEND_DATA.pos();
141
        }
142
};
143
#endif

powered by: WebSVN 2.1.0

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