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

Subversion Repositories spacewiresystemc

[/] [spacewiresystemc/] [trunk/] [systemC/] [tx_clock.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_CLOCK_H
35
#define SPW_TX_CLOCK_H
36
 
37
class CLOCK_WIRE_SC;
38
 
39
SC_MODULE(CLOCK_WIRE_SC)
40
{
41
        sc_in<bool> CLOCK_TX;
42
        sc_in<bool> ENABLE;
43
        sc_out<bool> CLOCK_TX_OUT;
44
 
45
        void TX_CLOCK_M()
46
        {
47
                if(ENABLE)
48
                        CLOCK_TX_OUT = CLOCK_TX;
49
        }
50
        SC_CTOR(CLOCK_WIRE_SC)
51
        {
52
                SC_METHOD(TX_CLOCK_M);
53
                sensitive << CLOCK_TX << ENABLE.pos();
54
        }
55
};
56
 
57
class SPW_TX_CLOCK_SC;
58
 
59
SC_MODULE(SPW_TX_CLOCK_SC)
60
{
61
 
62
        sc_clock CLOCK_2MHZ;
63
        sc_clock CLOCK_10MHZ;
64
        sc_clock CLOCK_20MHZ;
65
        sc_clock CLOCK_50MHZ;
66
        sc_clock CLOCK_100MHZ;
67
        sc_clock CLOCK_150MHZ;
68
        sc_clock CLOCK_200MHZ;
69
        sc_clock CLOCK_201MHZ;
70
        sc_clock CLOCK_250MHZ;
71
        sc_clock CLOCK_280MHZ;
72
        sc_clock CLOCK_500MHZ;
73
 
74
        sc_in<sc_uint<10> > CLOCK_GEN;
75
        sc_in<bool> RESET;
76
        sc_out<bool> CLOCK_TX_OUT;
77
 
78
        CLOCK_WIRE_SC DUT_2MHZ;
79
        sc_signal<bool> CLOCK_TX_OUT_2MHZ_ENABLE;
80
        sc_signal<bool> CLOCK_TX_OUT_2MHZ;
81
 
82
        CLOCK_WIRE_SC DUT_10MHZ;
83
        sc_signal<bool> CLOCK_TX_OUT_10MHZ_ENABLE;
84
        sc_signal<bool> CLOCK_TX_OUT_10MHZ;
85
 
86
        CLOCK_WIRE_SC DUT_20MHZ;
87
        sc_signal<bool> CLOCK_TX_OUT_20MHZ_ENABLE;
88
        sc_signal<bool> CLOCK_TX_OUT_20MHZ;
89
 
90
        CLOCK_WIRE_SC DUT_50MHZ;
91
        sc_signal<bool> CLOCK_TX_OUT_50MHZ_ENABLE;
92
        sc_signal<bool> CLOCK_TX_OUT_50MHZ;
93
 
94
        CLOCK_WIRE_SC DUT_100MHZ;
95
        sc_signal<bool> CLOCK_TX_OUT_100MHZ_ENABLE;
96
        sc_signal<bool> CLOCK_TX_OUT_100MHZ;
97
 
98
        CLOCK_WIRE_SC DUT_150MHZ;
99
        sc_signal<bool> CLOCK_TX_OUT_150MHZ_ENABLE;
100
        sc_signal<bool> CLOCK_TX_OUT_150MHZ;
101
 
102
        CLOCK_WIRE_SC DUT_200MHZ;
103
        sc_signal<bool> CLOCK_TX_OUT_200MHZ_ENABLE;
104
        sc_signal<bool> CLOCK_TX_OUT_200MHZ;
105
 
106
        CLOCK_WIRE_SC DUT_201MHZ;
107
        sc_signal<bool> CLOCK_TX_OUT_201MHZ_ENABLE;
108
        sc_signal<bool> CLOCK_TX_OUT_201MHZ;
109
 
110
        CLOCK_WIRE_SC DUT_250MHZ;
111
        sc_signal<bool> CLOCK_TX_OUT_250MHZ_ENABLE;
112
        sc_signal<bool> CLOCK_TX_OUT_250MHZ;
113
 
114
        CLOCK_WIRE_SC DUT_280MHZ;
115
        sc_signal<bool> CLOCK_TX_OUT_280MHZ_ENABLE;
116
        sc_signal<bool> CLOCK_TX_OUT_280MHZ;
117
 
118
        void ENABLE()
119
        {
120
                //cout << CLOCK_GEN.read() << endl;
121
                switch(CLOCK_GEN.read())
122
                {
123
                        case 1:
124
                                CLOCK_TX_OUT_2MHZ_ENABLE   = true;
125
                                CLOCK_TX_OUT_10MHZ_ENABLE  = false;
126
                                CLOCK_TX_OUT_20MHZ_ENABLE  = false;
127
                                CLOCK_TX_OUT_50MHZ_ENABLE  = false;
128
                                CLOCK_TX_OUT_100MHZ_ENABLE = false;
129
                                CLOCK_TX_OUT_150MHZ_ENABLE = false;
130
                                CLOCK_TX_OUT_200MHZ_ENABLE = false;
131
                                CLOCK_TX_OUT_201MHZ_ENABLE = false;
132
                                CLOCK_TX_OUT_250MHZ_ENABLE = false;
133
                                CLOCK_TX_OUT_280MHZ_ENABLE = false;
134
                        break;
135
                        case 2:
136
                                CLOCK_TX_OUT_2MHZ_ENABLE   = false;
137
                                CLOCK_TX_OUT_10MHZ_ENABLE  = true;
138
                                CLOCK_TX_OUT_20MHZ_ENABLE  = false;
139
                                CLOCK_TX_OUT_50MHZ_ENABLE  = false;
140
                                CLOCK_TX_OUT_100MHZ_ENABLE = false;
141
                                CLOCK_TX_OUT_150MHZ_ENABLE = false;
142
                                CLOCK_TX_OUT_200MHZ_ENABLE = false;
143
                                CLOCK_TX_OUT_201MHZ_ENABLE = false;
144
                                CLOCK_TX_OUT_250MHZ_ENABLE = false;
145
                                CLOCK_TX_OUT_280MHZ_ENABLE = false;
146
                        break;
147
                        case 4:
148
                                CLOCK_TX_OUT_2MHZ_ENABLE   = false;
149
                                CLOCK_TX_OUT_10MHZ_ENABLE  = false;
150
                                CLOCK_TX_OUT_20MHZ_ENABLE  = true;
151
                                CLOCK_TX_OUT_50MHZ_ENABLE  = false;
152
                                CLOCK_TX_OUT_100MHZ_ENABLE = false;
153
                                CLOCK_TX_OUT_150MHZ_ENABLE = false;
154
                                CLOCK_TX_OUT_200MHZ_ENABLE = false;
155
                                CLOCK_TX_OUT_201MHZ_ENABLE = false;
156
                                CLOCK_TX_OUT_250MHZ_ENABLE = false;
157
                                CLOCK_TX_OUT_280MHZ_ENABLE = false;
158
                        break;
159
                        case 8:
160
                                CLOCK_TX_OUT_2MHZ_ENABLE   = false;
161
                                CLOCK_TX_OUT_10MHZ_ENABLE  = false;
162
                                CLOCK_TX_OUT_20MHZ_ENABLE  = false;
163
                                CLOCK_TX_OUT_50MHZ_ENABLE  = true;
164
                                CLOCK_TX_OUT_100MHZ_ENABLE = false;
165
                                CLOCK_TX_OUT_150MHZ_ENABLE = false;
166
                                CLOCK_TX_OUT_200MHZ_ENABLE = false;
167
                                CLOCK_TX_OUT_201MHZ_ENABLE = false;
168
                                CLOCK_TX_OUT_250MHZ_ENABLE = false;
169
                                CLOCK_TX_OUT_280MHZ_ENABLE = false;
170
                        break;
171
                        case 16:
172
                                CLOCK_TX_OUT_2MHZ_ENABLE   = false;
173
                                CLOCK_TX_OUT_10MHZ_ENABLE  = false;
174
                                CLOCK_TX_OUT_20MHZ_ENABLE  = false;
175
                                CLOCK_TX_OUT_50MHZ_ENABLE  = false;
176
                                CLOCK_TX_OUT_100MHZ_ENABLE = true;
177
                                CLOCK_TX_OUT_150MHZ_ENABLE = false;
178
                                CLOCK_TX_OUT_200MHZ_ENABLE = false;
179
                                CLOCK_TX_OUT_201MHZ_ENABLE = false;
180
                                CLOCK_TX_OUT_250MHZ_ENABLE = false;
181
                                CLOCK_TX_OUT_280MHZ_ENABLE = false;
182
                        break;
183
                        case 32:
184
                                CLOCK_TX_OUT_2MHZ_ENABLE   = false;
185
                                CLOCK_TX_OUT_10MHZ_ENABLE  = false;
186
                                CLOCK_TX_OUT_20MHZ_ENABLE  = false;
187
                                CLOCK_TX_OUT_50MHZ_ENABLE  = false;
188
                                CLOCK_TX_OUT_100MHZ_ENABLE = false;
189
                                CLOCK_TX_OUT_150MHZ_ENABLE = true;
190
                                CLOCK_TX_OUT_200MHZ_ENABLE = false;
191
                                CLOCK_TX_OUT_201MHZ_ENABLE = false;
192
                                CLOCK_TX_OUT_250MHZ_ENABLE = false;
193
                                CLOCK_TX_OUT_280MHZ_ENABLE = false;
194
                        break;
195
                        case 64:
196
                                CLOCK_TX_OUT_2MHZ_ENABLE   = false;
197
                                CLOCK_TX_OUT_10MHZ_ENABLE  = false;
198
                                CLOCK_TX_OUT_20MHZ_ENABLE  = false;
199
                                CLOCK_TX_OUT_50MHZ_ENABLE  = false;
200
                                CLOCK_TX_OUT_100MHZ_ENABLE = false;
201
                                CLOCK_TX_OUT_150MHZ_ENABLE = false;
202
                                CLOCK_TX_OUT_200MHZ_ENABLE = true;
203
                                CLOCK_TX_OUT_201MHZ_ENABLE = false;
204
                                CLOCK_TX_OUT_250MHZ_ENABLE = false;
205
                                CLOCK_TX_OUT_280MHZ_ENABLE = false;
206
                        break;
207
                        case 128:
208
                                CLOCK_TX_OUT_2MHZ_ENABLE   = false;
209
                                CLOCK_TX_OUT_10MHZ_ENABLE  = false;
210
                                CLOCK_TX_OUT_20MHZ_ENABLE  = false;
211
                                CLOCK_TX_OUT_50MHZ_ENABLE  = false;
212
                                CLOCK_TX_OUT_100MHZ_ENABLE = false;
213
                                CLOCK_TX_OUT_150MHZ_ENABLE = false;
214
                                CLOCK_TX_OUT_200MHZ_ENABLE = false;
215
                                CLOCK_TX_OUT_201MHZ_ENABLE = true;
216
                                CLOCK_TX_OUT_250MHZ_ENABLE = false;
217
                                CLOCK_TX_OUT_280MHZ_ENABLE = false;
218
                        break;
219
                        case 256:
220
                                CLOCK_TX_OUT_2MHZ_ENABLE   = false;
221
                                CLOCK_TX_OUT_10MHZ_ENABLE  = false;
222
                                CLOCK_TX_OUT_20MHZ_ENABLE  = false;
223
                                CLOCK_TX_OUT_50MHZ_ENABLE  = false;
224
                                CLOCK_TX_OUT_100MHZ_ENABLE = false;
225
                                CLOCK_TX_OUT_150MHZ_ENABLE = false;
226
                                CLOCK_TX_OUT_200MHZ_ENABLE = false;
227
                                CLOCK_TX_OUT_201MHZ_ENABLE = false;
228
                                CLOCK_TX_OUT_250MHZ_ENABLE = true;
229
                                CLOCK_TX_OUT_280MHZ_ENABLE = false;
230
                        break;
231
                        case 512:
232
                                CLOCK_TX_OUT_2MHZ_ENABLE   = false;
233
                                CLOCK_TX_OUT_10MHZ_ENABLE  = false;
234
                                CLOCK_TX_OUT_20MHZ_ENABLE  = false;
235
                                CLOCK_TX_OUT_50MHZ_ENABLE  = false;
236
                                CLOCK_TX_OUT_100MHZ_ENABLE = false;
237
                                CLOCK_TX_OUT_150MHZ_ENABLE = false;
238
                                CLOCK_TX_OUT_200MHZ_ENABLE = false;
239
                                CLOCK_TX_OUT_201MHZ_ENABLE = false;
240
                                CLOCK_TX_OUT_250MHZ_ENABLE = false;
241
                                CLOCK_TX_OUT_280MHZ_ENABLE = true;
242
                        break;
243
                        default:
244
                                CLOCK_TX_OUT_2MHZ_ENABLE   = false;
245
                                CLOCK_TX_OUT_10MHZ_ENABLE  = true;
246
                                CLOCK_TX_OUT_20MHZ_ENABLE  = false;
247
                                CLOCK_TX_OUT_50MHZ_ENABLE  = false;
248
                                CLOCK_TX_OUT_100MHZ_ENABLE = false;
249
                                CLOCK_TX_OUT_150MHZ_ENABLE = false;
250
                                CLOCK_TX_OUT_200MHZ_ENABLE = false;
251
                                CLOCK_TX_OUT_201MHZ_ENABLE = false;
252
                                CLOCK_TX_OUT_250MHZ_ENABLE = false;
253
                                CLOCK_TX_OUT_280MHZ_ENABLE = false;
254
                        break;
255
                }
256
        }
257
 
258
        void CLK_GEN()
259
        {
260
                if(!RESET)
261
                {
262
                        CLOCK_TX_OUT = CLOCK_TX_OUT_2MHZ;
263
                }
264
                else
265
                {
266
                        if(CLOCK_TX_OUT_2MHZ_ENABLE)
267
                                CLOCK_TX_OUT = CLOCK_TX_OUT_2MHZ;
268
                        else if(CLOCK_TX_OUT_10MHZ_ENABLE)
269
                                CLOCK_TX_OUT = CLOCK_TX_OUT_10MHZ;
270
                        else if(CLOCK_TX_OUT_20MHZ_ENABLE)
271
                                CLOCK_TX_OUT = CLOCK_TX_OUT_20MHZ;
272
                        else if(CLOCK_TX_OUT_50MHZ_ENABLE)
273
                                CLOCK_TX_OUT = CLOCK_TX_OUT_50MHZ;
274
                        else if(CLOCK_TX_OUT_100MHZ_ENABLE)
275
                                CLOCK_TX_OUT = CLOCK_TX_OUT_100MHZ;
276
                        else if(CLOCK_TX_OUT_150MHZ_ENABLE)
277
                                CLOCK_TX_OUT = CLOCK_TX_OUT_150MHZ;
278
                        else if(CLOCK_TX_OUT_200MHZ_ENABLE)
279
                                CLOCK_TX_OUT = CLOCK_TX_OUT_200MHZ;
280
                        else if(CLOCK_TX_OUT_201MHZ_ENABLE)
281
                                CLOCK_TX_OUT = CLOCK_TX_OUT_201MHZ;
282
                        else if(CLOCK_TX_OUT_250MHZ_ENABLE)
283
                                CLOCK_TX_OUT = CLOCK_TX_OUT_250MHZ;
284
                        else if(CLOCK_TX_OUT_280MHZ_ENABLE)
285
                                CLOCK_TX_OUT = CLOCK_TX_OUT_280MHZ;
286
                }
287
                #ifdef TESTE
288
                cout << "2MHZ"   << " " << CLOCK_TX_OUT_2MHZ_ENABLE   <<endl;
289
                cout << "10MHZ"  << " " << CLOCK_TX_OUT_10MHZ_ENABLE  <<endl;
290
                cout << "20MHZ"  << " " << CLOCK_TX_OUT_20MHZ_ENABLE  <<endl;
291
                cout << "50MHZ"  << " " << CLOCK_TX_OUT_50MHZ_ENABLE  <<endl;
292
                cout << "100MHZ" << " " << CLOCK_TX_OUT_100MHZ_ENABLE <<endl;
293
                cout << "150MHZ" << " " << CLOCK_TX_OUT_150MHZ_ENABLE <<endl;
294
                cout << "200MHZ" << " " << CLOCK_TX_OUT_200MHZ_ENABLE <<endl;
295
                cout << "201MHZ" << " " << CLOCK_TX_OUT_201MHZ_ENABLE <<endl;
296
                cout << "250MHZ" << " " << CLOCK_TX_OUT_250MHZ_ENABLE <<endl;
297
                cout << "280MHZ" << " " << CLOCK_TX_OUT_280MHZ_ENABLE <<endl;
298
                #endif
299
        }
300
 
301
        SC_CTOR(SPW_TX_CLOCK_SC):CLOCK_2MHZ("CLOCK_2MHZ",500,SC_NS),
302
                                 CLOCK_10MHZ("CLOCK_10MHZ",100,SC_NS),
303
                                 CLOCK_20MHZ("CLOCK_20MHZ",50,SC_NS),
304
                                 CLOCK_50MHZ("CLOCK_50MHZ",20,SC_NS),
305
                                 CLOCK_100MHZ("CLOCK_100MHZ",10,SC_NS),
306
                                 CLOCK_150MHZ("CLOCK_150MHZ",6.667,SC_NS),
307
                                 CLOCK_200MHZ("CLOCK_200MHZ",5,SC_NS),
308
                                 CLOCK_201MHZ("CLOCK_201MHZ",4.975,SC_NS),
309
                                 CLOCK_250MHZ("CLOCK_250MHZ",4,SC_NS),
310
                                 CLOCK_280MHZ("CLOCK_280MHZ",3.571,SC_NS),
311
                                 DUT_2MHZ("DUT_2MHZ"),
312
                                 DUT_10MHZ("DUT_10MHZ"),
313
                                 DUT_20MHZ("DUT_20MHZ"),
314
                                 DUT_50MHZ("DUT_50MHZ"),
315
                                 DUT_100MHZ("DUT_100MHZ"),
316
                                 DUT_150MHZ("DUT_150MHZ"),
317
                                 DUT_200MHZ("DUT_200MHZ"),
318
                                 DUT_201MHZ("DUT_201MHZ"),
319
                                 DUT_250MHZ("DUT_250MHZ"),
320
                                 DUT_280MHZ("DUT_280MHZ")
321
        {
322
                SC_METHOD(ENABLE);
323
                sensitive << CLOCK_GEN << RESET;
324
 
325
                SC_METHOD(CLK_GEN);
326
                sensitive << CLOCK_500MHZ;
327
 
328
                DUT_2MHZ.CLOCK_TX(CLOCK_2MHZ);
329
                DUT_2MHZ.ENABLE(CLOCK_TX_OUT_2MHZ_ENABLE);
330
                DUT_2MHZ.CLOCK_TX_OUT(CLOCK_TX_OUT_2MHZ);
331
 
332
                DUT_10MHZ.CLOCK_TX(CLOCK_10MHZ);
333
                DUT_10MHZ.ENABLE(CLOCK_TX_OUT_10MHZ_ENABLE);
334
                DUT_10MHZ.CLOCK_TX_OUT(CLOCK_TX_OUT_10MHZ);
335
 
336
                DUT_20MHZ.CLOCK_TX(CLOCK_20MHZ);
337
                DUT_20MHZ.ENABLE(CLOCK_TX_OUT_20MHZ_ENABLE);
338
                DUT_20MHZ.CLOCK_TX_OUT(CLOCK_TX_OUT_20MHZ);
339
 
340
                DUT_50MHZ.CLOCK_TX(CLOCK_50MHZ);
341
                DUT_50MHZ.ENABLE(CLOCK_TX_OUT_50MHZ_ENABLE);
342
                DUT_50MHZ.CLOCK_TX_OUT(CLOCK_TX_OUT_50MHZ);
343
 
344
                DUT_100MHZ.CLOCK_TX(CLOCK_100MHZ);
345
                DUT_100MHZ.ENABLE(CLOCK_TX_OUT_100MHZ_ENABLE);
346
                DUT_100MHZ.CLOCK_TX_OUT(CLOCK_TX_OUT_100MHZ);
347
 
348
                DUT_150MHZ.CLOCK_TX(CLOCK_150MHZ);
349
                DUT_150MHZ.ENABLE(CLOCK_TX_OUT_150MHZ_ENABLE);
350
                DUT_150MHZ.CLOCK_TX_OUT(CLOCK_TX_OUT_150MHZ);
351
 
352
                DUT_200MHZ.CLOCK_TX(CLOCK_200MHZ);
353
                DUT_200MHZ.ENABLE(CLOCK_TX_OUT_200MHZ_ENABLE);
354
                DUT_200MHZ.CLOCK_TX_OUT(CLOCK_TX_OUT_200MHZ);
355
 
356
                DUT_201MHZ.CLOCK_TX(CLOCK_201MHZ);
357
                DUT_201MHZ.ENABLE(CLOCK_TX_OUT_201MHZ_ENABLE);
358
                DUT_201MHZ.CLOCK_TX_OUT(CLOCK_TX_OUT_201MHZ);
359
 
360
                DUT_250MHZ.CLOCK_TX(CLOCK_250MHZ);
361
                DUT_250MHZ.ENABLE(CLOCK_TX_OUT_250MHZ_ENABLE);
362
                DUT_250MHZ.CLOCK_TX_OUT(CLOCK_TX_OUT_250MHZ);
363
 
364
                DUT_280MHZ.CLOCK_TX(CLOCK_280MHZ);
365
                DUT_280MHZ.ENABLE(CLOCK_TX_OUT_280MHZ_ENABLE);
366
                DUT_280MHZ.CLOCK_TX_OUT(CLOCK_TX_OUT_280MHZ);
367
        }
368
};
369
#endif

powered by: WebSVN 2.1.0

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