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

Subversion Repositories systemc_cordic

[/] [systemc_cordic/] [trunk/] [cordic_ip/] [cordpipe.h] - Blame information for rev 4

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 3 wwcheng
// cordpipe.h: header file
2
/********************************************************************
3
//
4
// Module:
5
//   Cordic Engine 12-stage Pipeline
6
//
7
// Interface:
8
//   This module connects the 12-stages together.
9
//   Registered input, non-registered output
10
//
11
//
12
// Authors:     Winnie Cheng <wwcheng@stanford.edu>,
13
//              Peter Wu <peter5@stanford.edu>
14
//
15
 *********************************************************************/
16
 
17
#include "systemc.h"
18
#include "cordic.h"
19
#include "opcode.h"
20
 
21
SC_MODULE(cordpipe) {
22
 
23
    // Clock Declaration
24
    sc_in_clk clk;
25
 
26
    // Input ports Declaration
27
    sc_in<bool> start;
28
    sc_in<bool> reset;
29
 
30
    // Input data - first stage results
31
    sc_in<short> in_x;
32
    sc_in<short> in_y;
33
    sc_in<short> in_acc_phase;
34
 
35
    // Input data - propagated instruction info
36
    sc_in<sc_uint<UNIT_SEL_WIDTH> > in_opcode;
37
    sc_in<short> in_desired_phase;
38
 
39
    // Output ports Declaration
40
    sc_out<bool> done;
41
 
42
    // Output data - results of this stage
43
    sc_out<short> out_x;
44
    sc_out<short> out_y;
45
    sc_out<short> out_acc_phase;
46
 
47
    // Output data - propagated instruction info 
48
    sc_out<sc_uint<UNIT_SEL_WIDTH> > out_opcode;
49
    sc_out<short> out_desired_phase;
50
 
51
    // constants to parametrize pipeline module on system reset
52
    sc_in<short> stage0;
53
    sc_in<short> stage1;
54
    sc_in<short> stage2;
55
    sc_in<short> stage3;
56
    sc_in<short> stage4;
57
    sc_in<short> stage5;
58
    sc_in<short> stage6;
59
    sc_in<short> stage7;
60
    sc_in<short> stage8;
61
    sc_in<short> stage9;
62
    sc_in<short> stage10;
63
    sc_in<short> stage11;
64
 
65
    sc_in<short> tablep_0;
66
    sc_in<short> tablep_1;
67
    sc_in<short> tablep_2;
68
    sc_in<short> tablep_3;
69
    sc_in<short> tablep_4;
70
    sc_in<short> tablep_5;
71
    sc_in<short> tablep_6;
72
    sc_in<short> tablep_7;
73
    sc_in<short> tablep_8;
74
    sc_in<short> tablep_9;
75
    sc_in<short> tablep_10;
76
    sc_in<short> tablep_11;
77
 
78
    sc_in<short> tableh_0;
79
    sc_in<short> tableh_1;
80
    sc_in<short> tableh_2;
81
    sc_in<short> tableh_3;
82
    sc_in<short> tableh_4;
83
    sc_in<short> tableh_5;
84
    sc_in<short> tableh_6;
85
    sc_in<short> tableh_7;
86
    sc_in<short> tableh_8;
87
    sc_in<short> tableh_9;
88
    sc_in<short> tableh_10;
89
    sc_in<short> tableh_11;
90
 
91
    // Signals
92
    sc_signal<short> out0_x;
93
    sc_signal<short> out1_x;
94
    sc_signal<short> out2_x;
95
    sc_signal<short> out3_x;
96
    sc_signal<short> out4_x;
97
    sc_signal<short> out5_x;
98
    sc_signal<short> out6_x;
99
    sc_signal<short> out7_x;
100
    sc_signal<short> out8_x;
101
    sc_signal<short> out9_x;
102
    sc_signal<short> out10_x;
103
 
104
    sc_signal<short> out0_y;
105
    sc_signal<short> out1_y;
106
    sc_signal<short> out2_y;
107
    sc_signal<short> out3_y;
108
    sc_signal<short> out4_y;
109
    sc_signal<short> out5_y;
110
    sc_signal<short> out6_y;
111
    sc_signal<short> out7_y;
112
    sc_signal<short> out8_y;
113
    sc_signal<short> out9_y;
114
    sc_signal<short> out10_y;
115
 
116
    sc_signal<short> out0_acc_phase;
117
    sc_signal<short> out1_acc_phase;
118
    sc_signal<short> out2_acc_phase;
119
    sc_signal<short> out3_acc_phase;
120
    sc_signal<short> out4_acc_phase;
121
    sc_signal<short> out5_acc_phase;
122
    sc_signal<short> out6_acc_phase;
123
    sc_signal<short> out7_acc_phase;
124
    sc_signal<short> out8_acc_phase;
125
    sc_signal<short> out9_acc_phase;
126
    sc_signal<short> out10_acc_phase;
127
 
128
    sc_signal<sc_uint<UNIT_SEL_WIDTH> > out0_opcode;
129
    sc_signal<sc_uint<UNIT_SEL_WIDTH> > out1_opcode;
130
    sc_signal<sc_uint<UNIT_SEL_WIDTH> > out2_opcode;
131
    sc_signal<sc_uint<UNIT_SEL_WIDTH> > out3_opcode;
132
    sc_signal<sc_uint<UNIT_SEL_WIDTH> > out4_opcode;
133
    sc_signal<sc_uint<UNIT_SEL_WIDTH> > out5_opcode;
134
    sc_signal<sc_uint<UNIT_SEL_WIDTH> > out6_opcode;
135
    sc_signal<sc_uint<UNIT_SEL_WIDTH> > out7_opcode;
136
    sc_signal<sc_uint<UNIT_SEL_WIDTH> > out8_opcode;
137
    sc_signal<sc_uint<UNIT_SEL_WIDTH> > out9_opcode;
138
    sc_signal<sc_uint<UNIT_SEL_WIDTH> > out10_opcode;
139
 
140
    sc_signal<short> out0_desired_phase;
141
    sc_signal<short> out1_desired_phase;
142
    sc_signal<short> out2_desired_phase;
143
    sc_signal<short> out3_desired_phase;
144
    sc_signal<short> out4_desired_phase;
145
    sc_signal<short> out5_desired_phase;
146
    sc_signal<short> out6_desired_phase;
147
    sc_signal<short> out7_desired_phase;
148
    sc_signal<short> out8_desired_phase;
149
    sc_signal<short> out9_desired_phase;
150
    sc_signal<short> out10_desired_phase;
151
 
152
    sc_signal<bool> stage0_done;
153
    sc_signal<bool> stage1_done;
154
    sc_signal<bool> stage2_done;
155
    sc_signal<bool> stage3_done;
156
    sc_signal<bool> stage4_done;
157
    sc_signal<bool> stage5_done;
158
    sc_signal<bool> stage6_done;
159
    sc_signal<bool> stage7_done;
160
    sc_signal<bool> stage8_done;
161
    sc_signal<bool> stage9_done;
162
    sc_signal<bool> stage10_done;
163
 
164
    // 12 stage instances
165
    cordic *s0_instance;
166
    cordic *s1_instance;
167
    cordic *s2_instance;
168
    cordic *s3_instance;
169
    cordic *s4_instance;
170
    cordic *s5_instance;
171
    cordic *s6_instance;
172
    cordic *s7_instance;
173
    cordic *s8_instance;
174
    cordic *s9_instance;
175
    cordic *s10_instance;
176
    cordic *s11_instance;
177
 
178
    // Constructor
179
    SC_CTOR(cordpipe)
180
    {
181
         // instantiate and connect stage 0
182
         s0_instance = new cordic("stage0_in_pipe");
183
         s0_instance->clk(clk);
184
         s0_instance->start(start);
185
         s0_instance->reset(reset);
186
         s0_instance->in_x(in_x);
187
         s0_instance->in_y(in_y);
188
         s0_instance->in_acc_phase(in_acc_phase);
189
         s0_instance->in_opcode(in_opcode);
190
         s0_instance->in_desired_phase(in_desired_phase);
191
         s0_instance->stage_num(stage0);
192
         s0_instance->tablep(tablep_0);
193
         s0_instance->tableh(tableh_0);
194
         s0_instance->done(stage0_done);
195
         s0_instance->out_x(out0_x);
196
         s0_instance->out_y(out0_y);
197
         s0_instance->out_acc_phase(out0_acc_phase);
198
         s0_instance->out_opcode(out0_opcode);
199
         s0_instance->out_desired_phase(out0_desired_phase);
200
 
201
         // instantiate and connect stage 1
202
         s1_instance = new cordic("stage1_in_pipe");
203
         s1_instance->clk(clk);
204
         s1_instance->start(start);
205
         s1_instance->reset(reset);
206
         s1_instance->in_x(out0_x);
207
         s1_instance->in_y(out0_y);
208
         s1_instance->in_acc_phase(out0_acc_phase);
209
         s1_instance->in_opcode(out0_opcode);
210
         s1_instance->in_desired_phase(out0_desired_phase);
211
         s1_instance->stage_num(stage1);
212
         s1_instance->tablep(tablep_1);
213
         s1_instance->tableh(tableh_1);
214
         s1_instance->done(stage1_done);
215
         s1_instance->out_x(out1_x);
216
         s1_instance->out_y(out1_y);
217
         s1_instance->out_acc_phase(out1_acc_phase);
218
         s1_instance->out_opcode(out1_opcode);
219
         s1_instance->out_desired_phase(out1_desired_phase);
220
 
221
         // instantiate and connect stage 2
222
         s2_instance = new cordic("stage2_in_pipe");
223
         s2_instance->clk(clk);
224
         s2_instance->start(start);
225
         s2_instance->reset(reset);
226
         s2_instance->in_x(out1_x);
227
         s2_instance->in_y(out1_y);
228
         s2_instance->in_acc_phase(out1_acc_phase);
229
         s2_instance->in_opcode(out1_opcode);
230
         s2_instance->in_desired_phase(out1_desired_phase);
231
         s2_instance->stage_num(stage2);
232
         s2_instance->tablep(tablep_2);
233
         s2_instance->tableh(tableh_2);
234
         s2_instance->done(stage2_done);
235
         s2_instance->out_x(out2_x);
236
         s2_instance->out_y(out2_y);
237
         s2_instance->out_acc_phase(out2_acc_phase);
238
         s2_instance->out_opcode(out2_opcode);
239
         s2_instance->out_desired_phase(out2_desired_phase);
240
 
241
         // instantiate and connect stage 3
242
         s3_instance = new cordic("stage3_in_pipe");
243
         s3_instance->clk(clk);
244
         s3_instance->start(start);
245
         s3_instance->reset(reset);
246
         s3_instance->in_x(out2_x);
247
         s3_instance->in_y(out2_y);
248
         s3_instance->in_acc_phase(out2_acc_phase);
249
         s3_instance->in_opcode(out2_opcode);
250
         s3_instance->in_desired_phase(out2_desired_phase);
251
         s3_instance->stage_num(stage3);
252
         s3_instance->tablep(tablep_3);
253
         s3_instance->tableh(tableh_3);
254
         s3_instance->done(stage3_done);
255
         s3_instance->out_x(out3_x);
256
         s3_instance->out_y(out3_y);
257
         s3_instance->out_acc_phase(out3_acc_phase);
258
         s3_instance->out_opcode(out3_opcode);
259
         s3_instance->out_desired_phase(out3_desired_phase);
260
 
261
         // instantiate and connect stage 4
262
         s4_instance = new cordic("stage4_in_pipe");
263
         s4_instance->clk(clk);
264
         s4_instance->start(start);
265
         s4_instance->reset(reset);
266
         s4_instance->in_x(out3_x);
267
         s4_instance->in_y(out3_y);
268
         s4_instance->in_acc_phase(out3_acc_phase);
269
         s4_instance->in_opcode(out3_opcode);
270
         s4_instance->in_desired_phase(out3_desired_phase);
271
         s4_instance->stage_num(stage4);
272
         s4_instance->tablep(tablep_4);
273
         s4_instance->tableh(tableh_4);
274
         s4_instance->done(stage4_done);
275
         s4_instance->out_x(out4_x);
276
         s4_instance->out_y(out4_y);
277
         s4_instance->out_acc_phase(out4_acc_phase);
278
         s4_instance->out_opcode(out4_opcode);
279
         s4_instance->out_desired_phase(out4_desired_phase);
280
 
281
         // instantiate and connect stage 5
282
         s5_instance = new cordic("stage5_in_pipe");
283
         s5_instance->clk(clk);
284
         s5_instance->start(start);
285
         s5_instance->reset(reset);
286
         s5_instance->in_x(out4_x);
287
         s5_instance->in_y(out4_y);
288
         s5_instance->in_acc_phase(out4_acc_phase);
289
         s5_instance->in_opcode(out4_opcode);
290
         s5_instance->in_desired_phase(out4_desired_phase);
291
         s5_instance->stage_num(stage5);
292
         s5_instance->tablep(tablep_5);
293
         s5_instance->tableh(tableh_5);
294
         s5_instance->done(stage5_done);
295
         s5_instance->out_x(out5_x);
296
         s5_instance->out_y(out5_y);
297
         s5_instance->out_acc_phase(out5_acc_phase);
298
         s5_instance->out_opcode(out5_opcode);
299
         s5_instance->out_desired_phase(out5_desired_phase);
300
 
301
         // instantiate and connect stage 6
302
         s6_instance = new cordic("stage6_in_pipe");
303
         s6_instance->clk(clk);
304
         s6_instance->start(start);
305
         s6_instance->reset(reset);
306
         s6_instance->in_x(out5_x);
307
         s6_instance->in_y(out5_y);
308
         s6_instance->in_acc_phase(out5_acc_phase);
309
         s6_instance->in_opcode(out5_opcode);
310
         s6_instance->in_desired_phase(out5_desired_phase);
311
         s6_instance->stage_num(stage6);
312
         s6_instance->tablep(tablep_6);
313
         s6_instance->tableh(tableh_6);
314
         s6_instance->done(stage6_done);
315
         s6_instance->out_x(out6_x);
316
         s6_instance->out_y(out6_y);
317
         s6_instance->out_acc_phase(out6_acc_phase);
318
         s6_instance->out_opcode(out6_opcode);
319
         s6_instance->out_desired_phase(out6_desired_phase);
320
 
321
         // instantiate and connect stage 7
322
         s7_instance = new cordic("stage7_in_pipe");
323
         s7_instance->clk(clk);
324
         s7_instance->start(start);
325
         s7_instance->reset(reset);
326
         s7_instance->in_x(out6_x);
327
         s7_instance->in_y(out6_y);
328
         s7_instance->in_acc_phase(out6_acc_phase);
329
         s7_instance->in_opcode(out6_opcode);
330
         s7_instance->in_desired_phase(out6_desired_phase);
331
         s7_instance->stage_num(stage7);
332
         s7_instance->tablep(tablep_7);
333
         s7_instance->tableh(tableh_7);
334
         s7_instance->done(stage7_done);
335
         s7_instance->out_x(out7_x);
336
         s7_instance->out_y(out7_y);
337
         s7_instance->out_acc_phase(out7_acc_phase);
338
         s7_instance->out_opcode(out7_opcode);
339
         s7_instance->out_desired_phase(out7_desired_phase);
340
 
341
         // instantiate and connect stage 8
342
         s8_instance = new cordic("stage8_in_pipe");
343
         s8_instance->clk(clk);
344
         s8_instance->start(start);
345
         s8_instance->reset(reset);
346
         s8_instance->in_x(out7_x);
347
         s8_instance->in_y(out7_y);
348
         s8_instance->in_acc_phase(out7_acc_phase);
349
         s8_instance->in_opcode(out7_opcode);
350
         s8_instance->in_desired_phase(out7_desired_phase);
351
         s8_instance->stage_num(stage8);
352
         s8_instance->tablep(tablep_8);
353
         s8_instance->tableh(tableh_8);
354
         s8_instance->done(stage8_done);
355
         s8_instance->out_x(out8_x);
356
         s8_instance->out_y(out8_y);
357
         s8_instance->out_acc_phase(out8_acc_phase);
358
         s8_instance->out_opcode(out8_opcode);
359
         s8_instance->out_desired_phase(out8_desired_phase);
360
 
361
         // instantiate and connect stage 9
362
         s9_instance = new cordic("stage9_in_pipe");
363
         s9_instance->clk(clk);
364
         s9_instance->start(start);
365
         s9_instance->reset(reset);
366
         s9_instance->in_x(out8_x);
367
         s9_instance->in_y(out8_y);
368
         s9_instance->in_acc_phase(out8_acc_phase);
369
         s9_instance->in_opcode(out8_opcode);
370
         s9_instance->in_desired_phase(out8_desired_phase);
371
         s9_instance->stage_num(stage9);
372
         s9_instance->tablep(tablep_9);
373
         s9_instance->tableh(tableh_9);
374
         s9_instance->done(stage9_done);
375
         s9_instance->out_x(out9_x);
376
         s9_instance->out_y(out9_y);
377
         s9_instance->out_acc_phase(out9_acc_phase);
378
         s9_instance->out_opcode(out9_opcode);
379
         s9_instance->out_desired_phase(out9_desired_phase);
380
 
381
         // instantiate and connect stage 10
382
         s10_instance = new cordic("stage10_in_pipe");
383
         s10_instance->clk(clk);
384
         s10_instance->start(start);
385
         s10_instance->reset(reset);
386
         s10_instance->in_x(out9_x);
387
         s10_instance->in_y(out9_y);
388
         s10_instance->in_acc_phase(out9_acc_phase);
389
         s10_instance->in_opcode(out9_opcode);
390
         s10_instance->in_desired_phase(out9_desired_phase);
391
         s10_instance->stage_num(stage10);
392
         s10_instance->tablep(tablep_10);
393
         s10_instance->tableh(tableh_10);
394
         s10_instance->done(stage10_done);
395
         s10_instance->out_x(out10_x);
396
         s10_instance->out_y(out10_y);
397
         s10_instance->out_acc_phase(out10_acc_phase);
398
         s10_instance->out_opcode(out10_opcode);
399
         s10_instance->out_desired_phase(out10_desired_phase);
400
 
401
         // instantiate and connect stage 11
402
         s11_instance = new cordic("stage11_in_pipe");
403
         s11_instance->clk(clk);
404
         s11_instance->start(start);
405
         s11_instance->reset(reset);
406
         s11_instance->in_x(out10_x);
407
         s11_instance->in_y(out10_y);
408
         s11_instance->in_acc_phase(out10_acc_phase);
409
         s11_instance->in_opcode(out10_opcode);
410
         s11_instance->in_desired_phase(out10_desired_phase);
411
         s11_instance->stage_num(stage11);
412
         s11_instance->tablep(tablep_11);
413
         s11_instance->tableh(tableh_11);
414
         s11_instance->done(done);
415
         s11_instance->out_x(out_x);
416
         s11_instance->out_y(out_y);
417
         s11_instance->out_acc_phase(out_acc_phase);
418
         s11_instance->out_opcode(out_opcode);
419
         s11_instance->out_desired_phase(out_desired_phase);
420
 
421
    }
422
 
423
}; // end module cordpipe 

powered by: WebSVN 2.1.0

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