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

Subversion Repositories theia_gpu

[/] [theia_gpu/] [branches/] [beta_1.2/] [rtl/] [CONTROL/] [Unit_Control.v] - Blame information for rev 76

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

Line No. Rev Author Line
1 18 diegovalve
/**********************************************************************************
2
Theia, Ray Cast Programable graphic Processing Unit.
3
Copyright (C) 2010  Diego Valverde (diego.valverde.g@gmail.com)
4
 
5
This program is free software; you can redistribute it and/or
6
modify it under the terms of the GNU General Public License
7
as published by the Free Software Foundation; either version 2
8
of the License, or (at your option) any later version.
9
 
10
This program is distributed in the hope that it will be useful,
11
but WITHOUT ANY WARRANTY; without even the implied warranty of
12
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
GNU General Public License for more details.
14
 
15
You should have received a copy of the GNU General Public License
16
along with this program; if not, write to the Free Software
17
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
18
 
19
***********************************************************************************/
20
/**********************************************************************************
21
Description:
22
 
23
This is the main Finite State Machine.
24
 
25
**********************************************************************************/
26
 
27
`timescale 1ns / 1ps
28
`include "aDefinitions.v"
29
 
30
`define CU_AFTER_RESET_STATE 0
31
`define CU_WAIT_FOR_INITIAL_CONFIGURATION 1
32
`define CU_TRIGGER_CONFIGURATION_DATA_READ 2
33
`define CU_WAIT_FOR_CONFIG_DATA_READ    3
34
`define CU_ACK_CONFIG_DATA_READ 4
35
`define CU_PRECALCULATE_CONSTANTS 5
36
`define CU_WAIT_FOR_CONSTANT 6
37
`define CU_ACK_PRECALCULATE_CONSTANTS 7
38
`define CU_WAIT_FOR_TASK 8
39
`define CU_READ_TASK_DATA 9
40
`define CU_WAIT_TASK_DATA_READ 10
41
`define CU_ACK_TASK_DATA_READ 11
42
`define CU_TRIGGER_RGU 12
43
`define CU_WAIT_FOR_RGU 13
44
`define CU_ACK_RGU 14
45
`define CU_TRIGGER_GEO 15
46
`define CU_WAIT_FOR_GEO_SYNC 16
47
//`define CU_CHECK_AABBIU_REQUEST 17
48
`define CU_TRIGGER_TCC 17
49
//`define CU_CHECK_BIU_REQUEST 18
50
`define CU_TRIGGER_TFF 18
51
//`define CU_CHECK_GEO_DONE 19
52
`define CU_WAIT_FOR_TFF 19
53
`define CU_TRIGGER_AABBIU 20
54
`define CU_WAIT_FOR_AABBIU 21
55
`define CU_TRIGGER_BIU 22
56
`define CU_WAIT_FOR_BIU 23
57
`define CU_ACK_UCODE 24
58
`define CU_TRIGGER_PSU 25
59
`define CU_WAIT_FOR_PSU 26
60
`define CU_ACK_PSU 27
61
`define CU_TRIGGER_PCU 28
62
`define CU_WAIT_FOR_PCU 29
63
`define CU_ACK_PCU 30
64
`define CU_CHECK_HIT 31
65
`define CU_CLEAR_REGISTERS 32
66
`define CU_WAIT_CLEAR_REGISTERS 33
67
`define CU_ACK_CLEAR_REGISTERS  34
68
`define CU_TRIGGER_PSU_WITH_TEXTURE 35
69
`define WAIT_FOR_TCC 36
70
`define CU_TRIGGER_NPU 37
71
`define CU_WAIT_NPU 38
72
`define CU_ACK_NPU 39
73
`define CU_PERFORM_INTIAL_CONFIGURATION 40
74
`define CU_SET_PICTH 41
75 63 diegovalve
`define CU_TRIGGER_USERCONSTANTS 42
76
`define CU_WAIT_USERCONSTANTS           43
77
`define CU_ACK_USERCONSTANTS 44
78
`define CU_TRIGGER_USERPIXELSHADER 45
79
`define CU_WAIT_FOR_USERPIXELSHADER 46
80 76 diegovalve
`define CU_ACK_USERPIXELSHADER 47
81
`define CU_DONE 48
82
`define CU_WAIT_FOR_RENDER_ENABLE 49
83 18 diegovalve
 
84
//--------------------------------------------------------------
85
module ControlUnit
86
(
87
 
88
input  wire                                  Clock,
89
input  wire                                  Reset,
90
input  wire[15:0]                            iControlRegister,
91
output reg                                   oGFUEnable,
92
input    wire                                  iTriggerAABBIURequest,
93
input   wire                                   iTriggerBIURequest,
94
input wire                                   iTriggertTCCRequest,
95
output reg                                   oUCodeEnable,
96 60 diegovalve
output reg[`ROM_ADDRESS_WIDTH-1:0]           oCodeInstructioPointer,
97 18 diegovalve
input   wire                                   iUCodeDone,
98
input wire                                   iUCodeReturnValue,
99
input wire                                   iGFUDone,
100
input wire                                   iGEOSync,
101
output reg                                   oTriggerTFF,
102
input wire                                   iTFFDone,
103
input wire                                   MST_I,
104
output reg[2:0]                              oRamBusOwner,
105
input wire                                   iIODone,
106
output reg                                   oSetCurrentPitch,
107 71 diegovalve
output reg                                   oFlipMemEnabled,
108
output reg                                   oFlipMem,
109 76 diegovalve
output reg                                   oIOWritePixel,
110
input wire                                  iRenderEnable,
111
 
112
`ifdef DEBUG
113
input wire[`MAX_CORES-1:0]                  iDebug_CoreID,
114
`endif
115
 
116
output reg                                   oDone
117 18 diegovalve
 
118
);
119
 
120
//Internal State Machine varibles
121
reg     [5:0]    CurrentState;
122
reg     [5:0]    NextState;
123
integer ucode_file;
124
reg rResetHitFlop,rHitFlopEnable;
125
wire wHit;
126
 
127
`ifdef DUMP_CODE
128
        integer log;
129
 
130
        initial
131
        begin
132
 
133 76 diegovalve
        //$display("Opening ucode dump file....\n");
134 18 diegovalve
        ucode_file = $fopen("CU.log","w");
135
        end
136
 
137
`endif
138
 
139
//--------------------------------------------------------------
140
FFToggleOnce_1Bit FFTO1
141
(
142
        .Clock( Clock ),
143
        .Reset( rResetHitFlop ),
144
        .Enable( rHitFlopEnable && iUCodeDone ),
145
        .S( iUCodeReturnValue ),
146
        .Q( wHit )
147
);
148
//--------------------------------------------------------------
149
 
150
`ifdef DEBUG
151
        always @ ( wHit )
152
        begin
153
                `LOGME "*** Triangle HIT ***\n");
154
        end
155
`endif
156
 
157
//Next states logic and Reset sequence
158
always @(posedge Clock or posedge Reset)
159
  begin
160
 
161
    if (Reset)
162
                CurrentState <= `CU_AFTER_RESET_STATE;
163
    else
164
                CurrentState <= NextState;
165
 
166
  end
167
 
168
//--------------------------------------------------------------
169
always @ ( * )
170
begin
171
        case (CurrentState)
172
        //-----------------------------------------
173
        `CU_AFTER_RESET_STATE:
174
        begin
175
 
176
        `ifdef DEBUG
177
                `LOGME"%d CU_AFTER_RESET_STATE\n",$time);
178
        `endif
179
 
180
                oRamBusOwner                            <= 0;
181 60 diegovalve
                oCodeInstructioPointer  <= `ENTRYPOINT_INDEX_INITIAL;
182 18 diegovalve
                oGFUEnable                                      <= 0;
183
                oUCodeEnable                            <= 0;
184
                oIOWritePixel                           <= 0;
185
                rResetHitFlop                           <= 1;
186
                rHitFlopEnable                          <= 0;
187
                oTriggerTFF             <= 0;
188
                oSetCurrentPitch        <= 1;
189 71 diegovalve
                oFlipMemEnabled         <= 0;
190 76 diegovalve
                oFlipMem                                                <= 0;
191
                oDone                   <= 0;
192 18 diegovalve
                //oIncCurrentPitch        <= 0;
193
 
194
                NextState                                       <= `CU_WAIT_FOR_INITIAL_CONFIGURATION;
195
 
196
        end
197
        //-----------------------------------------
198
 
199
        `CU_WAIT_FOR_INITIAL_CONFIGURATION:
200
        begin
201 76 diegovalve
        //$display("CORE: %d CU_WAIT_FOR_INITIAL_CONFIGURATION", iDebug_CoreID);
202 18 diegovalve
//              `ifdef DEBUG
203
//                      `LOGME"%d Control: CU_WAIT_FOR_INITIAL_CONFIGURATION\n",$time);
204
//              `endif
205
 
206
                oRamBusOwner                            <= 0;
207 60 diegovalve
                oCodeInstructioPointer  <= 0;
208 18 diegovalve
                oGFUEnable                                      <= 0;
209
                oUCodeEnable                            <= 0;
210
                oIOWritePixel                           <= 0;
211
                rResetHitFlop                           <= 1;
212
                rHitFlopEnable                          <= 0;
213
      oTriggerTFF             <= 0;
214
                oSetCurrentPitch        <= 0;
215 71 diegovalve
                oFlipMemEnabled         <= 0;
216 76 diegovalve
                oFlipMem                                                <= 0;
217
                oDone                   <= 0;
218 18 diegovalve
                //oIncCurrentPitch        <= 0;         
219
 
220
                if ( MST_I  )
221
                        NextState <= `CU_PERFORM_INTIAL_CONFIGURATION;//`CU_WAIT_FOR_CONFIG_DATA_READ;
222
                else
223
                        NextState <= `CU_WAIT_FOR_INITIAL_CONFIGURATION;
224
 
225
 
226
        end
227
        //-----------------------------------------
228
        `CU_PERFORM_INTIAL_CONFIGURATION:
229 76 diegovalve
        begin
230
        //$display("CORE: %d CU_PERFORM_INTIAL_CONFIGURATION", iDebug_CoreID);
231 18 diegovalve
        oRamBusOwner                            <= 0;
232 60 diegovalve
                oCodeInstructioPointer  <= 0;
233 18 diegovalve
                oGFUEnable                                      <= 0;
234
                oUCodeEnable                            <= 0;
235
                oIOWritePixel                           <= 0;
236
                rResetHitFlop                           <= 1;
237
                rHitFlopEnable                          <= 0;
238
      oTriggerTFF             <= 0;
239
                oSetCurrentPitch        <= 0;
240 71 diegovalve
                oFlipMemEnabled         <= 0;
241 76 diegovalve
                oFlipMem                                                <= 0;
242
                oDone                   <= 0;
243 18 diegovalve
                //oIncCurrentPitch        <= 0;         
244
 
245 76 diegovalve
                if ( MST_I  == 0 && iRenderEnable == 1'b1)
246
                        NextState <= `CU_CLEAR_REGISTERS;//`CU_WAIT_FOR_CONFIG_DATA_READ;
247
                else
248
                        NextState <= `CU_PERFORM_INTIAL_CONFIGURATION;
249
 
250 18 diegovalve
 
251
        end
252
        //-----------------------------------------
253
        `CU_CLEAR_REGISTERS:
254 76 diegovalve
        begin
255
        //$display("CORE: %d CU_CLEAR_REGISTERS", iDebug_CoreID);
256 18 diegovalve
        `ifdef DEBUG
257
                `LOGME"%d CU_CLEAR_REGISTERS\n",$time);
258
        `endif
259
 
260
                oRamBusOwner                            <= `REG_BUS_OWNED_BY_UCODE;
261 60 diegovalve
                oCodeInstructioPointer  <= `ENTRYPOINT_INDEX_INITIAL;
262 18 diegovalve
                oGFUEnable                                      <= 0;
263
                oUCodeEnable                            <= 1;   //*
264
                oIOWritePixel                           <= 0;
265
                rResetHitFlop                           <= 0;
266
                rHitFlopEnable                          <= 0;
267
                oTriggerTFF             <= 0;
268
                oSetCurrentPitch        <= 0;
269 71 diegovalve
                oFlipMemEnabled         <= 1;
270 76 diegovalve
                oFlipMem                                                <= 1;
271
                oDone                   <= 0;
272
                ////$display("\n\n %d XOXOXOXOX FLIP XOXOXOXOXOX\n\n",$time);
273 18 diegovalve
                //oIncCurrentPitch        <= 0;
274
 
275
                NextState                                       <= `CU_WAIT_CLEAR_REGISTERS;
276
        end
277
//-----------------------------------------     
278
        `CU_WAIT_CLEAR_REGISTERS:
279
        begin
280
//      `ifdef DEBUG
281
//              `LOGME"%d CU_WAIT_CLEAR_REGISTERS\n",$time);
282
//      `endif  
283 76 diegovalve
                //$display("CORE: %d CU_WAIT_CLEAR_REGISTERS", iDebug_CoreID);
284 18 diegovalve
                oRamBusOwner                            <= `REG_BUS_OWNED_BY_UCODE;
285 60 diegovalve
                oCodeInstructioPointer  <= `ENTRYPOINT_INDEX_INITIAL;
286 18 diegovalve
                oGFUEnable                                      <= 0;
287
                oUCodeEnable                            <= 0;
288
                oIOWritePixel                           <= 0;
289
                rResetHitFlop                           <= 0;
290
                rHitFlopEnable                          <= 0;
291
      oTriggerTFF             <= 0;
292
                oSetCurrentPitch        <= 0;
293 71 diegovalve
                oFlipMemEnabled         <= 1;
294 76 diegovalve
                oFlipMem                                                <= 0;
295
                oDone                   <= 0;
296 18 diegovalve
                //oIncCurrentPitch        <= 0;
297
 
298
                if ( iUCodeDone )
299
                        NextState <= `CU_ACK_CLEAR_REGISTERS;
300
                else
301
                        NextState <= `CU_WAIT_CLEAR_REGISTERS;
302
 
303
        end
304
        //-----------------------------------------
305
        `CU_ACK_CLEAR_REGISTERS:
306 76 diegovalve
        begin
307
 
308 18 diegovalve
        `ifdef DEBUG
309
                `LOGME"%d CU_ACK_CLEAR_REGISTERS\n", $time);
310
        `endif
311 76 diegovalve
 
312
        //$display("CORE: %d CU_ACK_CLEAR_REGISTERS", iDebug_CoreID);
313 18 diegovalve
 
314
                oRamBusOwner                            <= 0;
315 60 diegovalve
                oCodeInstructioPointer  <= 0;
316 18 diegovalve
                oGFUEnable                                      <= 0;
317
                oUCodeEnable                            <= 0; //*        
318
                oIOWritePixel                           <= 0;
319
                rResetHitFlop                           <= 0;
320
                rHitFlopEnable                          <= 0;
321
      oTriggerTFF             <= 0;
322
                oSetCurrentPitch        <= 0;
323 71 diegovalve
                oFlipMemEnabled         <= 0;
324 76 diegovalve
                oFlipMem                                                <= 0;
325
                oDone                   <= 0;
326 18 diegovalve
                //oIncCurrentPitch        <= 0;
327
 
328
                NextState <= `CU_WAIT_FOR_CONFIG_DATA_READ;
329
        end
330
 
331
 
332
 
333
        //-----------------------------------------
334
        `CU_WAIT_FOR_CONFIG_DATA_READ:
335
        begin
336 76 diegovalve
 
337 18 diegovalve
//              `ifdef DEBUG
338
//                      `LOGME"%d Control: CU_WAIT_FOR_CONFIG_DATA_READ\n",$time);
339
//              `endif
340 76 diegovalve
 
341
 
342
//$display("CORE: %d CU_WAIT_FOR_CONFIG_DATA_READ", iDebug_CoreID);
343 18 diegovalve
 
344
                oRamBusOwner                            <= 0;//`REG_BUS_OWNED_BY_BCU;
345 60 diegovalve
                oCodeInstructioPointer  <= 0;
346 18 diegovalve
                oGFUEnable                                      <= 0;
347
                oUCodeEnable                            <= 0;
348
                oIOWritePixel                           <= 0;
349
                rResetHitFlop                           <= 0;
350
                rHitFlopEnable                          <= 0;
351
      oTriggerTFF             <= 0;
352
                oSetCurrentPitch        <= 0;
353 71 diegovalve
                oFlipMemEnabled         <= 0;
354 76 diegovalve
                oFlipMem                                                <= 0;
355
                oDone                   <= 0;
356 18 diegovalve
                //oIncCurrentPitch        <= 0;
357
 
358
                if ( MST_I == 0  )
359
                        NextState <= `CU_PRECALCULATE_CONSTANTS;
360
                else
361
                        NextState <= `CU_WAIT_FOR_CONFIG_DATA_READ;
362
 
363
        end
364
        //-----------------------------------------
365
        `CU_PRECALCULATE_CONSTANTS:
366
        begin
367 76 diegovalve
//$display("CORE: %d CU_PRECALCULATE_CONSTANTS", iDebug_CoreID);
368 18 diegovalve
        `ifdef DEBUG
369
                `LOGME"%d Control: CU_PRECALCULATE_CONSTANTS\n", $time);
370
        `endif
371
 
372
                oRamBusOwner                            <= `REG_BUS_OWNED_BY_UCODE;
373 60 diegovalve
                oCodeInstructioPointer  <= `ENTRYPOINT_INDEX_CPPU;
374 18 diegovalve
                oGFUEnable                              <= 0;
375
                oUCodeEnable                            <= 1; //*       
376
                oIOWritePixel                           <= 0;
377
                rResetHitFlop                           <= 0;
378
                rHitFlopEnable                          <= 0;
379
      oTriggerTFF             <= 0;
380
                oSetCurrentPitch        <= 0;
381 71 diegovalve
                oFlipMemEnabled         <= 0;
382 76 diegovalve
                oFlipMem                                                <= 0;
383
                oDone                   <= 0;
384 18 diegovalve
                //oIncCurrentPitch        <= 0;
385
 
386
                NextState <= `CU_WAIT_FOR_CONSTANT;
387
 
388
        end
389
        //-----------------------------------------
390
        `CU_WAIT_FOR_CONSTANT:
391
        begin
392
//      `ifdef DEBUG
393
//              `LOGME"%d Control: CU_WAIT_FOR_CONSTANT\n", $time);
394
//      `endif
395
 
396
 
397
                oRamBusOwner                            <= `REG_BUS_OWNED_BY_UCODE;
398 60 diegovalve
                oCodeInstructioPointer  <= `ENTRYPOINT_INDEX_CPPU;
399 18 diegovalve
                oGFUEnable                                 <= 0;
400
                oUCodeEnable                            <= 0; //*        
401
                oIOWritePixel                           <= 0;
402
                rResetHitFlop                           <= 0;
403
                rHitFlopEnable                          <= 0;
404
      oTriggerTFF             <= 0;
405
                oSetCurrentPitch        <= 0;
406 71 diegovalve
                oFlipMemEnabled         <= 0;
407 76 diegovalve
                oFlipMem                                                <= 0;
408
                oDone                   <= 0;
409 18 diegovalve
                //oIncCurrentPitch        <= 0;
410
 
411
                if ( iUCodeDone )
412
                        NextState <= `CU_ACK_PRECALCULATE_CONSTANTS;
413
                else
414
                        NextState <= `CU_WAIT_FOR_CONSTANT;
415
 
416
        end
417
        //-----------------------------------------
418
        `CU_ACK_PRECALCULATE_CONSTANTS:
419
        begin
420 76 diegovalve
        //$display("CORE: %d CU_ACK_PRECALCULATE_CONSTANTS", iDebug_CoreID);
421 18 diegovalve
        `ifdef DEBUG
422
                `LOGME"%d Control: CU_ACK_PRECALCULATE_CONSTANTS\n", $time);
423
        `endif
424
 
425
 
426
                oRamBusOwner                            <= 0;//`REG_BUS_OWNED_BY_BCU;
427 60 diegovalve
                oCodeInstructioPointer  <= 0;
428 18 diegovalve
                oGFUEnable                                 <= 0;
429
                oUCodeEnable                            <= 0; //*        
430
                oIOWritePixel                           <= 0;
431
                rResetHitFlop                           <= 0;
432
                rHitFlopEnable                          <= 0;
433
      oTriggerTFF             <= 0;
434
                oSetCurrentPitch        <= 0;
435 71 diegovalve
                oFlipMemEnabled         <= 0;
436 76 diegovalve
                oFlipMem                                                <= 0;
437
                oDone                   <= 0;
438 18 diegovalve
                //oIncCurrentPitch        <= 0;
439
 
440 63 diegovalve
                NextState <= `CU_TRIGGER_USERCONSTANTS;//CU_WAIT_FOR_TASK;
441 18 diegovalve
 
442
        end
443
        //-----------------------------------------
444 71 diegovalve
 
445 63 diegovalve
        `CU_TRIGGER_USERCONSTANTS:
446
        begin
447
        `ifdef DEBUG
448
                `LOGME"%d Control: CU_TRIGGER_RGU\n",$time);
449
        `endif
450 76 diegovalve
 
451
                //$display("CORE: %d CU_TRIGGER_USERCONSTANTS", iDebug_CoreID);
452 63 diegovalve
 
453
                oRamBusOwner                            <= `REG_BUS_OWNED_BY_UCODE;
454
                oCodeInstructioPointer  <= `ENTRYPOINT_INDEX_USERCONSTANTS;
455
                oGFUEnable                                      <= 0;
456
                oUCodeEnable                            <= 1;   //*
457
                oIOWritePixel                           <= 0;
458
                rResetHitFlop                           <= 0;
459
                rHitFlopEnable                          <= 0;
460
      oTriggerTFF             <= 0;
461
                oSetCurrentPitch        <= 0;
462 71 diegovalve
                oFlipMemEnabled         <= 0;
463 76 diegovalve
                oFlipMem                                                <= 0;
464
                oDone                   <= 0;
465 63 diegovalve
                //oIncCurrentPitch        <= 0;
466
 
467
                NextState <= `CU_WAIT_USERCONSTANTS;
468
        end
469
        //-----------------------------------------
470
        `CU_WAIT_USERCONSTANTS:
471
        begin
472
 
473
//      `ifdef DEBUG
474
//              `LOGME"%d Control: CU_WAIT_FOR_RGU\n",$time);
475
//      `endif
476
 
477
                oRamBusOwner                            <= `REG_BUS_OWNED_BY_UCODE;
478
                oCodeInstructioPointer  <= `ENTRYPOINT_INDEX_USERCONSTANTS;
479
                oGFUEnable                                      <= 0;
480
                oUCodeEnable                            <= 0;
481
                oIOWritePixel                           <= 0;
482
                rResetHitFlop                           <= 0;
483
                rHitFlopEnable                          <= 0;
484
      oTriggerTFF             <= 0;
485
                oSetCurrentPitch        <= 0;
486 71 diegovalve
                oFlipMemEnabled         <= 0;
487 76 diegovalve
                oFlipMem                                                <= 0;
488
                oDone                   <= 0;
489 63 diegovalve
                //oIncCurrentPitch        <= 0;
490
 
491
                if ( iUCodeDone )
492
                        NextState <= `CU_ACK_USERCONSTANTS;
493
                else
494
                        NextState <= `CU_WAIT_USERCONSTANTS;
495
        end
496
        //-----------------------------------------
497
        `CU_ACK_USERCONSTANTS:
498
        begin
499
 
500
        `ifdef DEBUG
501
                `LOGME"%d Control: CU_ACK_RGU\n",$time);
502 76 diegovalve
        `endif
503
 
504
        //$display("CORE: %d CU_ACK_USERCONSTANTS", iDebug_CoreID);
505
 
506 63 diegovalve
                oRamBusOwner                            <= `REG_BUS_OWNED_BY_UCODE;
507
                oCodeInstructioPointer  <= 0;
508
                oGFUEnable                                      <= 0;
509
                oUCodeEnable                            <= 0; //*        
510
                oIOWritePixel                           <= 0;
511
                rResetHitFlop                           <= 0;
512
                rHitFlopEnable                          <= 0;
513
      oTriggerTFF             <= 0;
514
                oSetCurrentPitch        <= 0;
515 71 diegovalve
                oFlipMemEnabled         <= 0;
516 76 diegovalve
                oFlipMem                                                <= 0;
517
                oDone                   <= 0;
518 63 diegovalve
                //oIncCurrentPitch        <= 0;
519
 
520
                if ( iUCodeDone  == 0)
521 76 diegovalve
                        NextState <= `CU_WAIT_FOR_RENDER_ENABLE;
522 63 diegovalve
                else
523
                        NextState <= `CU_ACK_USERCONSTANTS;
524
 
525
        end
526 76 diegovalve
        //-----------------------------------------
527
        `CU_WAIT_FOR_RENDER_ENABLE:
528
        begin
529
        //$display("CORE: %d CU_WAIT_FOR_RENDER_ENABLE", iDebug_CoreID);
530
 
531
                oRamBusOwner                            <= `REG_BUS_OWNED_BY_UCODE;
532
                oCodeInstructioPointer  <= 0;
533
                oGFUEnable                                      <= 0;
534
                oUCodeEnable                            <= 0; //*        
535
                oIOWritePixel                           <= 0;
536
                rResetHitFlop                           <= 0;
537
                rHitFlopEnable                          <= 0;
538
      oTriggerTFF             <= 0;
539
                oSetCurrentPitch        <= 0;
540
                oFlipMemEnabled         <= 0;
541
                oFlipMem                                                <= 0;
542
                oDone                   <= 0;
543
                //oIncCurrentPitch        <= 0;
544
 
545
                if ( iRenderEnable)
546
                        NextState <= `CU_TRIGGER_RGU;
547
                else
548
                        NextState <= `CU_WAIT_FOR_RENDER_ENABLE;
549
        end
550 63 diegovalve
        //-----------------------------------------
551 18 diegovalve
        `CU_TRIGGER_RGU:
552
        begin
553
 
554
        `ifdef DEBUG
555
                `LOGME"%d Control: CU_TRIGGER_RGU\n",$time);
556 76 diegovalve
        `endif
557
 
558
        //$display("CORE: %d CU_TRIGGER_RGU", iDebug_CoreID);
559 18 diegovalve
 
560
                oRamBusOwner                            <= `REG_BUS_OWNED_BY_UCODE;
561 60 diegovalve
                oCodeInstructioPointer  <= `ENTRYPOINT_INDEX_RGU;
562 18 diegovalve
                oGFUEnable                                      <= 0;
563
                oUCodeEnable                            <= 1;   //*
564
                oIOWritePixel                           <= 0;
565
                rResetHitFlop                           <= 0;
566
                rHitFlopEnable                          <= 0;
567
      oTriggerTFF             <= 0;
568
                oSetCurrentPitch        <= 0;
569 71 diegovalve
                oFlipMemEnabled         <= 0;
570 76 diegovalve
                oFlipMem                                                <= 0;
571
                oDone                   <= 0;
572 18 diegovalve
                //oIncCurrentPitch        <= 0;
573
 
574
                NextState <= `CU_WAIT_FOR_RGU;
575
        end
576
        //-----------------------------------------
577
        `CU_WAIT_FOR_RGU:
578
        begin
579
 
580
//      `ifdef DEBUG
581
//              `LOGME"%d Control: CU_WAIT_FOR_RGU\n",$time);
582
//      `endif
583
 
584
                oRamBusOwner                            <= `REG_BUS_OWNED_BY_UCODE;
585 60 diegovalve
                oCodeInstructioPointer  <= 0;
586 18 diegovalve
                oGFUEnable                                      <= 0;
587
                oUCodeEnable                            <= 0;
588
                oIOWritePixel                           <= 0;
589
                rResetHitFlop                           <= 0;
590
                rHitFlopEnable                          <= 0;
591
      oTriggerTFF             <= 0;
592
                oSetCurrentPitch        <= 0;
593 71 diegovalve
                oFlipMemEnabled         <= 0;
594 76 diegovalve
                oFlipMem                                                <= 0;
595
                oDone                   <= 0;
596 18 diegovalve
                //oIncCurrentPitch        <= 0;
597
 
598
                if ( iUCodeDone )
599
                        NextState <= `CU_ACK_RGU;
600
                else
601
                        NextState <= `CU_WAIT_FOR_RGU;
602
        end
603
        //-----------------------------------------
604
        `CU_ACK_RGU:
605
        begin
606
 
607
        `ifdef DEBUG
608
                `LOGME"%d Control: CU_ACK_RGU\n",$time);
609
        `endif
610
                oRamBusOwner                            <= `REG_BUS_OWNED_BY_UCODE;
611 60 diegovalve
                oCodeInstructioPointer  <= 0;
612 18 diegovalve
                oGFUEnable                                      <= 0;
613
                oUCodeEnable                            <= 0; //*        
614
                oIOWritePixel                           <= 0;
615
                rResetHitFlop                           <= 0;
616
                rHitFlopEnable                          <= 0;
617
      oTriggerTFF             <= 0;
618
                oSetCurrentPitch        <= 0;
619 71 diegovalve
                oFlipMemEnabled         <= 0;
620 76 diegovalve
                oFlipMem                                                <= 0;
621
                oDone                   <= 0;
622 18 diegovalve
                //oIncCurrentPitch        <= 0;
623
 
624
                if ( iUCodeDone  == 0)
625
                        NextState <= `CU_TRIGGER_GEO;
626
                else
627
                        NextState <= `CU_ACK_RGU;
628
 
629
        end
630
        //-----------------------------------------
631
        `CU_TRIGGER_GEO:
632
        begin
633 76 diegovalve
 
634
        //$display("CORE: %d CU_TRIGGER_GEO", iDebug_CoreID);
635
 
636 18 diegovalve
 
637
        `ifdef DEBUG
638
                `LOGME"%d Control: CU_TRIGGER_GEO\n",$time);
639
        `endif
640
 
641
                oRamBusOwner                            <= `REG_BUS_OWNED_BY_GFU;
642 60 diegovalve
                oCodeInstructioPointer  <= 0;
643 18 diegovalve
                oUCodeEnable                            <= 0;
644
                oGFUEnable                                      <= 1;
645
                oIOWritePixel                           <= 0;
646
                rResetHitFlop                           <= 1;   //*
647
                rHitFlopEnable                          <= 0;
648
      oTriggerTFF             <= 0;
649
                oSetCurrentPitch        <= 0;
650 71 diegovalve
                oFlipMemEnabled         <= 0;
651 76 diegovalve
                oFlipMem                                                <= 0;
652
                oDone                   <= 0;
653 18 diegovalve
                //oIncCurrentPitch        <= 0;
654
 
655
                NextState <= `CU_WAIT_FOR_GEO_SYNC;
656
 
657
        end
658
        //-----------------------------------------
659
        `CU_WAIT_FOR_GEO_SYNC:
660
        begin
661
 
662
        `ifdef DEBUG
663
                `LOGME"%d Control: CU_WAIT_FOR_GEO_SYNC\n",$time);
664
        `endif
665
 
666
                oRamBusOwner                            <= `REG_BUS_OWNED_BY_GFU;
667 60 diegovalve
                oCodeInstructioPointer  <= 0;
668 18 diegovalve
                oUCodeEnable                            <= 0;
669
                oGFUEnable                                      <= 0; //Change AUg 15
670
                oIOWritePixel                           <= 0;
671
                rResetHitFlop                           <= 0;
672
                rHitFlopEnable                          <= 0;
673
      oTriggerTFF             <= 0;
674
                oSetCurrentPitch        <= 0;
675 71 diegovalve
                oFlipMemEnabled         <= 0;
676 76 diegovalve
                oFlipMem                                                <= 0;
677
                oDone                   <= 0;
678 18 diegovalve
                //oIncCurrentPitch        <= 0;
679
 
680
        if (iGEOSync & iTriggerAABBIURequest )
681
                NextState <= `CU_TRIGGER_AABBIU;
682
        else if (iGEOSync & iTriggerBIURequest)
683
                NextState <= `CU_TRIGGER_BIU;
684
        else if (iGEOSync & iTriggertTCCRequest )
685
      NextState <= `CU_TRIGGER_TCC;
686
   else if (iGEOSync & iGFUDone )
687
      NextState <= `CU_CHECK_HIT;
688
   else
689
      NextState <= `CU_WAIT_FOR_GEO_SYNC;
690
 
691
        end
692
        //-----------------------------------------
693
        `CU_TRIGGER_TCC:
694
        begin
695 76 diegovalve
        ////$display("CU_TRIGGER_TCC");
696 18 diegovalve
        `ifdef DEBUG
697
                `LOGME"%d Control: CU_TRIGGER_TCC\n",$time);
698
        `endif
699
 
700
           oRamBusOwner                                 <= `REG_BUS_OWNED_BY_UCODE;
701 60 diegovalve
                oCodeInstructioPointer  <= `ENTRYPOINT_INDEX_TCC;
702 18 diegovalve
                oUCodeEnable                            <= 1;   //*
703
                oGFUEnable                                      <= 0;
704
                oIOWritePixel                           <= 0;
705
                rResetHitFlop                           <= 0;
706
                rHitFlopEnable                          <= 0;
707
      oTriggerTFF             <= 0;
708
                oSetCurrentPitch        <= 0;
709 71 diegovalve
                oFlipMemEnabled         <= 1;
710
                oFlipMem                                                <= 1; //We need u,v from last IO read cycle
711 76 diegovalve
                ////$display("\n\n %d XOXOXOXOX FLIP XOXOXOXOXOX\n\n",$time);
712 18 diegovalve
                //oIncCurrentPitch        <= 0;
713 76 diegovalve
                oDone                   <= 0;
714 18 diegovalve
 
715
          NextState  <= `WAIT_FOR_TCC;
716
        end
717
        //-----------------------------------------
718
        `WAIT_FOR_TCC:
719
        begin
720
 
721 76 diegovalve
        ////$display("WAIT_FOR_TCC");
722 18 diegovalve
           oRamBusOwner                                 <= `REG_BUS_OWNED_BY_UCODE;
723 60 diegovalve
                oCodeInstructioPointer  <= `ENTRYPOINT_INDEX_TCC;
724 18 diegovalve
                oUCodeEnable                            <= 0;    //*
725
                oGFUEnable                                      <= 0;
726
                oIOWritePixel                           <= 0;
727
                rResetHitFlop                           <= 0;
728
                rHitFlopEnable                          <= 0;
729
      oTriggerTFF             <= 0;
730
                oSetCurrentPitch        <= 0;
731 71 diegovalve
                oFlipMemEnabled         <= 1;
732 76 diegovalve
                oFlipMem                                                <= 0;
733
                oDone                   <= 0;
734 18 diegovalve
                //oIncCurrentPitch        <= 0;
735
 
736
           if ( iUCodeDone )
737
                        NextState <= `CU_ACK_UCODE;
738
                else
739
                        NextState <= `WAIT_FOR_TCC;
740
 
741
        end
742
        //-----------------------------------------
743
        /*
744
        Was there any hit at all?
745
        At this point, all the triangles in the list
746
        have been traversed looking for a hit with our ray.
747
        There are 3 possibilities:
748
        1) The was not a single hit, then just paint a black
749
        pixel on the screen and send it via PCU.
750
        2)There was a hit and Texturing is not enabled, then trigger the PSU with
751
        no texturing
752
        2) There was a hit and Texturing is enabled, then fetch the texture
753
        values corresponding to the triangle that we hitted.
754
        */
755
        `CU_CHECK_HIT:
756
        begin
757
 
758
        `ifdef DEBUG
759
                `LOGME"%d Control: CU_CHECK_HIT\n",$time);
760
        `endif
761
 
762
                oRamBusOwner                            <= `REG_BUS_OWNED_BY_GFU;
763 60 diegovalve
                oCodeInstructioPointer  <= 0;
764 18 diegovalve
                oUCodeEnable                            <= 0;
765
                oGFUEnable                                      <= 0;    ///CHANGED Aug 15
766
                oIOWritePixel                           <= 0;
767
                rResetHitFlop                           <= 0;
768
                rHitFlopEnable                          <= 0;
769
           oTriggerTFF             <= 0;
770
                oSetCurrentPitch        <= 0;
771 71 diegovalve
                oFlipMemEnabled         <= 1;
772 76 diegovalve
                oFlipMem                                                <= 1;
773
                oDone                   <= 0;
774
                ////$display("\n\n %d XOXOXOXOX FLIP XOXOXOXOXOX\n\n",$time);
775 18 diegovalve
                //oIncCurrentPitch        <= 0;
776
 
777
                if (wHit && !iControlRegister[`CR_EN_TEXTURE] )
778
                        NextState <= `CU_TRIGGER_PSU;
779
                else if (wHit && iControlRegister[`CR_EN_TEXTURE])
780
                        NextState <= `CU_TRIGGER_TFF;           //Fetch the texture values from external RAM
781
                else
782
                        NextState <= `CU_TRIGGER_PCU;           //Make sure contents of the OUT_REG are ZERo!
783
        end
784
        //-----------------------------------------
785
        /*
786
        Get the texture values from external RAM.
787
        GFU already took care of calculating the correct
788
        texture addresses for the 4 coordinates so now lets
789
        just ask for them.
790
        */
791
        `CU_TRIGGER_TFF:
792
        begin
793
        `ifdef DEBUG
794
                `LOGME"%d Control: CU_TRIGGER_TFF\n",$time);
795
        `endif
796
 
797 76 diegovalve
        ////$display("CU_TRIGGER_TFF");
798 18 diegovalve
 
799
                oRamBusOwner                            <= `REG_BUS_OWNED_BY_GFU;
800 60 diegovalve
                oCodeInstructioPointer  <= 0;
801 18 diegovalve
                oUCodeEnable                            <= 0;
802
                oGFUEnable                                      <= 1;
803
                oIOWritePixel                           <= 0;
804
                rResetHitFlop                           <= 0;
805
                rHitFlopEnable                          <= 0;
806
                oTriggerTFF             <= 1;       //*
807 71 diegovalve
           oSetCurrentPitch        <= 0;
808
                oFlipMemEnabled         <= 1;
809
                oFlipMem                                                <= 0;  //NO need, we did this n check hit
810 18 diegovalve
                //oIncCurrentPitch        <= 0;
811 76 diegovalve
                oDone                   <= 0;
812 18 diegovalve
 
813
                NextState <= `CU_WAIT_FOR_TFF;
814
        end
815
        //-----------------------------------------
816
        `CU_WAIT_FOR_TFF:
817
        begin
818
 
819
           oRamBusOwner                                 <= `REG_BUS_OWNED_BY_GFU;
820 60 diegovalve
                oCodeInstructioPointer  <= 0;
821 18 diegovalve
                oUCodeEnable                            <= 0;
822
                oGFUEnable                                      <= 0;     //Changed Aug 14
823
                oIOWritePixel                           <= 0;
824
                rResetHitFlop                           <= 0;
825
                rHitFlopEnable                          <= 0;
826
                oTriggerTFF             <= 0;
827
                oSetCurrentPitch        <= 0;
828 71 diegovalve
                oFlipMemEnabled         <= 1;
829
                oFlipMem                                                <= 0;
830 76 diegovalve
                oDone                   <= 0;
831
 
832 18 diegovalve
                //oIncCurrentPitch        <= 0;
833
 
834
        if (iTFFDone)
835
                NextState <= `CU_TRIGGER_PSU_WITH_TEXTURE;
836
        else
837
                NextState <= `CU_WAIT_FOR_TFF;
838
 
839
        end
840
        //-----------------------------------------
841
        `CU_TRIGGER_PSU_WITH_TEXTURE:
842
        begin
843
 
844
        `ifdef DEBUG
845
                `LOGME"%d Control: CU_TRIGGER_PSU_WITH_TEXTURE\n",$time);
846
        `endif
847
 
848
           oRamBusOwner                                 <= `REG_BUS_OWNED_BY_UCODE;
849 60 diegovalve
                oCodeInstructioPointer  <= `ENTRYPOINT_INDEX_PSU2;
850 18 diegovalve
                oUCodeEnable                            <= 1;
851
                oGFUEnable                                      <= 0;
852
                oIOWritePixel                           <= 0;
853
                rResetHitFlop                           <= 0;
854
                rHitFlopEnable                          <= 0;
855
                oTriggerTFF             <= 0;
856
                oSetCurrentPitch        <= 0;
857 71 diegovalve
                oFlipMemEnabled         <= 1;
858 76 diegovalve
                oFlipMem                                                <= 1;
859
                oDone                   <= 0;
860
                ////$display("\n\n %d XOXOXOXOX FLIP XOXOXOXOXOX\n\n",$time);
861 18 diegovalve
           //oIncCurrentPitch        <= 0;
862
 
863
                NextState <= `CU_WAIT_FOR_PSU;
864
        end
865
        //-----------------------------------------
866
        `CU_TRIGGER_AABBIU:
867
        begin
868
 
869
        `ifdef DEBUG
870
                `LOGME"%d Control: CU_TRIGGER_AABBIU\n",$time);
871
        `endif
872
//      $stop();
873 60 diegovalve
                oRamBusOwner                            <= `REG_BUS_OWNED_BY_UCODE;
874 18 diegovalve
 
875 60 diegovalve
                oCodeInstructioPointer  <=`ENTRYPOINT_INDEX_AABBIU;
876 18 diegovalve
                oUCodeEnable                            <= 1;
877
                oGFUEnable                                      <= 1;
878
                oIOWritePixel                           <= 0;
879
                rResetHitFlop                           <= 0;
880
                rHitFlopEnable                          <= 0;
881
      oTriggerTFF             <= 0;
882
                oSetCurrentPitch        <= 0;
883 71 diegovalve
                oFlipMemEnabled         <= 1;
884 76 diegovalve
                oFlipMem                                                <= 1;
885
                oDone                   <= 0;
886
                ////$display("\n\n %d XOXOXOXOX FLIP XOXOXOXOXOX\n\n",$time);
887 18 diegovalve
                //oIncCurrentPitch        <= 0;
888
 
889
                NextState <= `CU_WAIT_FOR_AABBIU;
890
        end
891
        //-----------------------------------------
892
        `CU_WAIT_FOR_AABBIU:
893
        begin
894
 
895
 
896
//      `ifdef DEBUG
897
//              `LOGME"%d Control: CU_WAIT_FOR_AABBIU\n",$time);
898
//      `endif
899
 
900
 
901 76 diegovalve
//      //$display("iUCodeDone",iUCodeDone);
902 18 diegovalve
 
903
                oRamBusOwner                            <= `REG_BUS_OWNED_BY_UCODE;
904 60 diegovalve
                oCodeInstructioPointer  <= `ENTRYPOINT_INDEX_AABBIU;
905 18 diegovalve
                oUCodeEnable                            <= 0;
906
                oGFUEnable                                      <= 1;
907
                oIOWritePixel                           <= 0;
908
                rResetHitFlop                           <= 0;
909
                rHitFlopEnable                          <= 0;
910
      oTriggerTFF             <= 0;
911
                oSetCurrentPitch        <= 0;
912 71 diegovalve
                oFlipMemEnabled         <= 0;
913 76 diegovalve
                oFlipMem                                                <= 0;
914
                oDone                   <= 0;
915 18 diegovalve
                //oIncCurrentPitch        <= 0;
916
 
917
                if ( iUCodeDone )
918
                begin
919 76 diegovalve
        //         //$display("iUCodeDone\n",iUCodeDone);
920 18 diegovalve
        //              $stop();
921
                        NextState <= `CU_ACK_UCODE;
922
                end
923
                else
924
                        NextState <= `CU_WAIT_FOR_AABBIU;
925
        end
926
        //-----------------------------------------
927
        `CU_TRIGGER_BIU:
928
        begin
929
        `ifdef DEBUG
930
                `LOGME"%d Control: CU_TRIGGER_BIU\n",$time);
931
        `endif
932
 
933
                        oRamBusOwner                            <= `REG_BUS_OWNED_BY_UCODE;
934 60 diegovalve
                        oCodeInstructioPointer  <= `ENTRYPOINT_INDEX_BIU;
935 18 diegovalve
                        oUCodeEnable                            <= 1;
936
                        oGFUEnable                                      <= 1;
937
                        oIOWritePixel                           <= 0;
938
                        rResetHitFlop                           <= 0;//1;        
939
                        rHitFlopEnable                          <= 1;
940
         oTriggerTFF             <= 0;
941
                        oSetCurrentPitch        <= 0;
942 71 diegovalve
                        oFlipMemEnabled         <= 1;
943 76 diegovalve
                        oFlipMem                                                <= 1;
944
                        oDone                   <= 0;
945
                        ////$display("\n\n %d XOXOXOXOX FLIP XOXOXOXOXOX\n\n",$time);
946 18 diegovalve
                        //oIncCurrentPitch        <= 0;
947
                //      $stop();
948
 
949
                        NextState <= `CU_WAIT_FOR_BIU;
950
 
951
        end
952
        //-----------------------------------------
953
        `CU_WAIT_FOR_BIU:
954
        begin
955
//      `ifdef DEBUG
956
//              `LOGME"%d Control: CU_WAIT_FOR_BIU\n",$time);
957
//      `endif
958
 
959
                        oRamBusOwner                            <= `REG_BUS_OWNED_BY_UCODE;
960 60 diegovalve
                        oCodeInstructioPointer  <= `ENTRYPOINT_INDEX_BIU;
961 18 diegovalve
                        oUCodeEnable                            <= 0;
962
                        oGFUEnable                                      <= 1;
963
                        oIOWritePixel                           <= 0;
964
                        rResetHitFlop                           <= 0;
965
                        rHitFlopEnable                          <= 1;
966
         oTriggerTFF             <= 0;
967
                        oSetCurrentPitch        <= 0;
968 71 diegovalve
                        oFlipMemEnabled         <= 1;
969 76 diegovalve
                        oFlipMem                                                <= 0;
970
                        oDone                   <= 0;
971 18 diegovalve
                        //oIncCurrentPitch        <= 0;
972
 
973
                if ( iUCodeDone )
974
                        NextState <= `CU_ACK_UCODE;
975
                else
976
                        NextState <= `CU_WAIT_FOR_BIU;
977
        end
978
        //-----------------------------------------
979
        /*
980
                ACK UCODE by setting oUCodeEnable = 0
981
        */
982
        `CU_ACK_UCODE:
983
        begin
984
        `ifdef DEBUG
985
                `LOGME"%d Control: CU_ACK_UCODE\n",$time);
986
        `endif
987
 
988
                        oRamBusOwner                            <= `REG_BUS_OWNED_BY_GFU;
989 60 diegovalve
                        oCodeInstructioPointer  <= 0; //*
990 18 diegovalve
                        oUCodeEnable                            <= 0;    //*
991
                        oGFUEnable                                      <= 0; //Changed Aug 15
992
                        oIOWritePixel                           <= 0;
993
                        rResetHitFlop                           <= 0;
994
                        rHitFlopEnable                          <= 0;
995
         oTriggerTFF             <= 0;
996
                        oSetCurrentPitch        <= 0;
997 71 diegovalve
                        oFlipMemEnabled         <= 0;
998 76 diegovalve
                        oFlipMem                                                <= 0;
999
                        oDone                   <= 0;
1000 18 diegovalve
                        //oIncCurrentPitch        <= 0;
1001
 
1002
        //              $stop();
1003
 
1004
                        if ( iUCodeDone == 0 )
1005
                                NextState <= `CU_WAIT_FOR_GEO_SYNC;
1006
                        else
1007
                                NextState <= `CU_ACK_UCODE;
1008
        end
1009
        //-----------------------------------------
1010
        /*
1011
        Here we no longer use GFU so set Enable to zero
1012
        */
1013
        `CU_TRIGGER_PSU:
1014
        begin
1015
        `ifdef DEBUG
1016
                `LOGME"%d Control: CU_TRIGGER_PSU\n",$time);
1017
        `endif
1018
 
1019
                oRamBusOwner                            <= `REG_BUS_OWNED_BY_UCODE;
1020 60 diegovalve
                oCodeInstructioPointer  <= `ENTRYPOINT_INDEX_PSU;
1021 18 diegovalve
                oUCodeEnable                            <= 1;
1022
                oGFUEnable                                      <= 0;//*
1023
                oIOWritePixel                           <= 0;
1024
                rResetHitFlop                           <= 0;
1025
                rHitFlopEnable                          <= 0;
1026
                oTriggerTFF             <= 0;
1027
                oSetCurrentPitch        <= 0;
1028 71 diegovalve
                oFlipMemEnabled         <= 1;
1029 76 diegovalve
                oFlipMem                                                <= 1;
1030
                oDone                   <= 0;
1031
                ////$display("\n\n %d XOXOXOXOX FLIP XOXOXOXOXOX\n\n",$time);
1032 18 diegovalve
                //oIncCurrentPitch        <= 0;
1033
 
1034
 
1035
                NextState <= `CU_WAIT_FOR_PSU;
1036
        end
1037
        //-----------------------------------------
1038
        `CU_WAIT_FOR_PSU:
1039
        begin
1040
 
1041
//      `ifdef DEBUG
1042
//              `LOGME"%d Control: CU_TRIGGER_PSU\n",$time);
1043
//      `endif
1044
 
1045
                oRamBusOwner                            <= `REG_BUS_OWNED_BY_UCODE;
1046 60 diegovalve
                oCodeInstructioPointer  <= `ENTRYPOINT_INDEX_PSU;
1047 18 diegovalve
                oUCodeEnable                            <= 0;
1048
                oGFUEnable                                      <= 0;
1049
                oIOWritePixel                           <= 0;
1050
                rResetHitFlop                           <= 0;
1051
                rHitFlopEnable                          <= 0;
1052
                oTriggerTFF             <= 0;
1053
                oSetCurrentPitch        <= 0;
1054 71 diegovalve
                oFlipMemEnabled         <= 1;
1055 76 diegovalve
                oFlipMem                                                <= 0;
1056
                oDone                   <= 0;
1057 18 diegovalve
                //oIncCurrentPitch        <= 0;
1058
 
1059
 
1060
                if ( iUCodeDone )
1061
                        NextState <= `CU_ACK_PSU;
1062
                else
1063
                        NextState <= `CU_WAIT_FOR_PSU;
1064
 
1065
        end
1066
        //-----------------------------------------
1067
        `CU_ACK_PSU:
1068
        begin
1069
        `ifdef DEBUG
1070
                `LOGME"%d Control: CU_ACK_PSU\n",$time);
1071
        `endif
1072
 
1073
                oRamBusOwner                            <= `REG_BUS_OWNED_BY_UCODE;
1074 60 diegovalve
                oCodeInstructioPointer  <= 0;    //*
1075 18 diegovalve
                oUCodeEnable                            <= 0;    //*
1076
                oGFUEnable                                      <= 0;
1077
                oIOWritePixel                           <= 0;
1078
                rResetHitFlop                           <= 0;
1079
                rHitFlopEnable                          <= 0;
1080
      oTriggerTFF             <= 0;
1081
                oSetCurrentPitch        <= 0;
1082 71 diegovalve
                oFlipMemEnabled         <= 1;
1083 76 diegovalve
                oFlipMem                                                <= 0;
1084
                oDone                   <= 0;
1085 18 diegovalve
                //oIncCurrentPitch        <= 0;
1086
 
1087
                if ( iUCodeDone  == 0)
1088 63 diegovalve
                        NextState <= `CU_TRIGGER_USERPIXELSHADER;
1089 18 diegovalve
                else
1090
                        NextState <= `CU_ACK_PSU;
1091
 
1092
 
1093
        end
1094
        //-----------------------------------------
1095
        /*
1096
                Trigger the Pixel Commit.
1097
        */
1098
        `CU_TRIGGER_PCU:
1099
        begin
1100
 
1101
        `ifdef DEBUG
1102
                `LOGME"%d Control: CU_TRIGGER_PCU\n",$time);
1103
        `endif
1104
 
1105
                oRamBusOwner                            <= `REG_BUS_OWNED_BY_GFU;
1106 60 diegovalve
                oCodeInstructioPointer  <= 0;    //*
1107 18 diegovalve
                oUCodeEnable                            <= 0;    //*
1108
                oGFUEnable                                      <= 0;
1109
                oIOWritePixel                           <= 1; //*
1110
                rResetHitFlop                           <= 0;
1111
                rHitFlopEnable                          <= 0;
1112
      oTriggerTFF             <= 0;
1113
                oSetCurrentPitch        <= 0;
1114 71 diegovalve
                oFlipMemEnabled         <= 1;
1115 76 diegovalve
                oFlipMem                                                <= 1;
1116
                oDone                   <= 0;
1117
                ////$display("\n\n %d XOXOXOXOX FLIP XOXOXOXOXOX\n\n",$time);
1118 18 diegovalve
                //oIncCurrentPitch        <= 0;
1119
 
1120
 
1121
                NextState <= `CU_SET_PICTH;
1122
 
1123
        end
1124
        //-----------------------------------------
1125
        `CU_SET_PICTH:
1126
        begin
1127
                oRamBusOwner                            <= `REG_BUS_OWNED_BY_GFU;
1128 60 diegovalve
                oCodeInstructioPointer  <= 0;    //*
1129 18 diegovalve
                oUCodeEnable                            <= 0;    //*
1130
                oGFUEnable                                      <= 0;
1131
                oIOWritePixel                           <= 1; //*
1132
                rResetHitFlop                           <= 0;
1133
                rHitFlopEnable                          <= 0;
1134
      oTriggerTFF             <= 0;
1135
                oSetCurrentPitch        <= 1; //*
1136 71 diegovalve
                oFlipMemEnabled         <= 1;
1137 76 diegovalve
                oFlipMem                                                <= 0;
1138
                oDone                   <= 0;
1139 18 diegovalve
                //oIncCurrentPitch        <= 0;
1140
 
1141
 
1142
                NextState <= `CU_WAIT_FOR_PCU;
1143
        end
1144
        //-----------------------------------------
1145
        `CU_WAIT_FOR_PCU:
1146
        begin
1147
 
1148
//      `ifdef DEBUG
1149
//              `LOGME"%d Control: CU_WAIT_FOR_PCU\n",$time);
1150
//      `endif
1151
 
1152
                oRamBusOwner                            <= `REG_BUS_OWNED_BY_GFU;
1153 60 diegovalve
                oCodeInstructioPointer  <= 0;    //*
1154 18 diegovalve
                oUCodeEnable                            <= 0;    //*
1155
                oGFUEnable                                      <= 0;
1156
                oIOWritePixel                           <= 1;
1157
                rResetHitFlop                           <= 0;
1158
                rHitFlopEnable                          <= 0;
1159
      oTriggerTFF             <= 0;
1160
                oSetCurrentPitch        <= 0;
1161 71 diegovalve
                oFlipMemEnabled         <= 1;
1162 76 diegovalve
                oFlipMem                                                <= 0;
1163
                oDone                   <= 0;
1164 18 diegovalve
                //oIncCurrentPitch        <= 0;
1165
 
1166
                if ( iIODone )
1167
                        NextState <= `CU_ACK_PCU;
1168
                else
1169
                        NextState <= `CU_WAIT_FOR_PCU;
1170
 
1171
        end
1172
        //-----------------------------------------
1173
        `CU_ACK_PCU:
1174
        begin
1175
 
1176
        `ifdef DEBUG
1177
                `LOGME"%d Control: CU_ACK_PCU\n",$time);
1178
        `endif
1179
                oRamBusOwner                            <= `REG_BUS_OWNED_BY_GFU;
1180 60 diegovalve
                oCodeInstructioPointer  <= 0;    //*
1181 18 diegovalve
                oUCodeEnable                            <= 0;    //*
1182
                oGFUEnable                                      <= 0;
1183
                oIOWritePixel                           <= 0;
1184
                rResetHitFlop                           <= 0;
1185
                rHitFlopEnable                          <= 0;
1186
      oTriggerTFF             <= 0;
1187
                oSetCurrentPitch        <= 0;
1188 71 diegovalve
                oFlipMemEnabled         <= 1;
1189 76 diegovalve
                oFlipMem                                                <= 0;
1190
                oDone                   <= 0;
1191 18 diegovalve
                //oIncCurrentPitch        <= 0;
1192
 
1193
                NextState <= `CU_TRIGGER_NPU;
1194
 
1195
        end
1196
        //-----------------------------------------
1197
        `CU_TRIGGER_NPU: //Next Pixel Unit
1198
        begin
1199
        `ifdef DEBUG
1200
                `LOGME"%d Control: CU_TRIGGER_NPU\n",$time);
1201
        `endif
1202
                oRamBusOwner                            <= `REG_BUS_OWNED_BY_UCODE;
1203 60 diegovalve
                oCodeInstructioPointer  <= `ENTRYPOINT_INDEX_NPG;       //*
1204 18 diegovalve
                oUCodeEnable                            <= 1;   //*
1205
                oGFUEnable                                      <= 0;
1206
                oIOWritePixel                           <= 0;
1207
                rResetHitFlop                           <= 0;
1208
                rHitFlopEnable                          <= 0;
1209
      oTriggerTFF             <= 0;
1210
                oSetCurrentPitch        <= 0;
1211 71 diegovalve
                oFlipMemEnabled         <= 1;
1212 76 diegovalve
                oFlipMem                                                <= 0;
1213
                oDone                   <= 0;
1214 18 diegovalve
                //oIncCurrentPitch        <= 0;
1215
 
1216
                NextState <= `CU_WAIT_NPU;
1217
        end
1218
        //-----------------------------------------
1219
        `CU_WAIT_NPU:
1220
        begin
1221
                oRamBusOwner                            <= `REG_BUS_OWNED_BY_UCODE;
1222 60 diegovalve
                oCodeInstructioPointer  <= `ENTRYPOINT_INDEX_NPG;
1223 18 diegovalve
                oUCodeEnable                            <= 0;
1224
                oGFUEnable                                      <= 0;
1225
                oIOWritePixel                           <= 0;
1226
                rResetHitFlop                           <= 0;
1227
                rHitFlopEnable                          <= 0;
1228
                oTriggerTFF             <= 0;
1229
                oSetCurrentPitch        <= 0;
1230 71 diegovalve
                oFlipMemEnabled         <= 1;
1231 76 diegovalve
                oFlipMem                                                <= 0;
1232
                oDone                   <= 0;
1233 18 diegovalve
                //oIncCurrentPitch        <= 0;
1234
 
1235
                if ( iUCodeDone )
1236
                        NextState <= `CU_ACK_NPU;
1237
                else
1238
                        NextState <= `CU_WAIT_NPU;
1239
        end
1240 76 diegovalve
        //-----------------------------------------
1241
        /*
1242
        Next Pixel generation: here we either goto
1243
        to RGU for the next pixel, or we have no
1244
        more pixels so we are done we our picture!
1245
        */
1246 18 diegovalve
        `CU_ACK_NPU:
1247
        begin
1248
        `ifdef DEBUG
1249
                `LOGME"%d Control: CU_ACK_PSU\n",$time);
1250
        `endif
1251
 
1252
                oRamBusOwner                            <= `REG_BUS_OWNED_BY_UCODE;
1253 60 diegovalve
                oCodeInstructioPointer  <= 0;    //*
1254 18 diegovalve
                oUCodeEnable                            <= 0;    //*
1255
                oGFUEnable                                      <= 0;
1256
                oIOWritePixel                           <= 0;
1257
                rResetHitFlop                           <= 0;
1258
                rHitFlopEnable                          <= 0;
1259
      oTriggerTFF             <= 0;
1260
                oSetCurrentPitch        <= 0;
1261 71 diegovalve
                oFlipMemEnabled         <= 1;
1262 76 diegovalve
                oFlipMem                                                <= 0;
1263
                oDone                   <= 0;
1264 18 diegovalve
                //oIncCurrentPitch        <= 0;
1265
 
1266 76 diegovalve
                if ( iUCodeDone  == 0 && iUCodeReturnValue == 1)
1267
                        NextState <= `CU_TRIGGER_RGU;
1268
                else if (iUCodeDone == 0 && iUCodeReturnValue == 0)
1269
                        NextState <= `CU_DONE;
1270 18 diegovalve
                else
1271
                        NextState <= `CU_ACK_NPU;
1272
 
1273
 
1274
        end
1275 76 diegovalve
        //-----------------------------------------
1276
        `CU_DONE:
1277
        begin
1278
                oRamBusOwner                            <= `REG_BUS_OWNED_BY_UCODE;
1279
                oCodeInstructioPointer  <= 0;
1280
                oUCodeEnable                            <= 0;
1281
                oGFUEnable                                      <= 0;
1282
                oIOWritePixel                           <= 0;
1283
                rResetHitFlop                           <= 0;
1284
                rHitFlopEnable                          <= 0;
1285
      oTriggerTFF             <= 0;
1286
                oSetCurrentPitch        <= 0;
1287
                oFlipMemEnabled         <= 0;
1288
                oFlipMem                                                <= 0;
1289
                oDone                   <= 1;
1290
                //oIncCurrentPitch        <= 0;
1291
 
1292
 
1293
                NextState <= `CU_DONE;
1294
 
1295
        end
1296 18 diegovalve
        //-----------------------------------------
1297 63 diegovalve
        /*
1298
        Here we no longer use GFU so set Enable to zero
1299
        */
1300
        `CU_TRIGGER_USERPIXELSHADER:
1301
        begin
1302
        `ifdef DEBUG
1303
                `LOGME"%d Control: CU_TRIGGER_PSU\n",$time);
1304
        `endif
1305
 
1306
                oRamBusOwner                            <= `REG_BUS_OWNED_BY_UCODE;
1307
                oCodeInstructioPointer  <= `ENTRYPOINT_INDEX_PIXELSHADER;
1308
                oUCodeEnable                            <= 1;
1309
                oGFUEnable                                      <= 0;//*
1310
                oIOWritePixel                           <= 0;
1311
                rResetHitFlop                           <= 0;
1312
                rHitFlopEnable                          <= 0;
1313
                oTriggerTFF             <= 0;
1314
                oSetCurrentPitch        <= 0;
1315 71 diegovalve
                oFlipMemEnabled         <= 1;
1316 76 diegovalve
                oFlipMem                                                <= 0;
1317
                oDone                   <= 0;
1318 63 diegovalve
                //oIncCurrentPitch        <= 0;
1319
 
1320
 
1321
                NextState <= `CU_WAIT_FOR_USERPIXELSHADER;
1322
        end
1323
        //-----------------------------------------
1324
        `CU_WAIT_FOR_USERPIXELSHADER:
1325
        begin
1326
 
1327
//      `ifdef DEBUG
1328
//              `LOGME"%d Control: CU_TRIGGER_PSU\n",$time);
1329
//      `endif
1330
 
1331
                oRamBusOwner                            <= `REG_BUS_OWNED_BY_UCODE;
1332
                oCodeInstructioPointer  <= `ENTRYPOINT_INDEX_PIXELSHADER;
1333
                oUCodeEnable                            <= 0;
1334
                oGFUEnable                                      <= 0;
1335
                oIOWritePixel                           <= 0;
1336
                rResetHitFlop                           <= 0;
1337
                rHitFlopEnable                          <= 0;
1338
                oTriggerTFF             <= 0;
1339
                oSetCurrentPitch        <= 0;
1340 71 diegovalve
                oFlipMemEnabled         <= 1;
1341 76 diegovalve
                oFlipMem                                                <= 0;
1342
                oDone                   <= 0;
1343 63 diegovalve
                //oIncCurrentPitch        <= 0;
1344
 
1345
 
1346
                if ( iUCodeDone )
1347
                        NextState <= `CU_ACK_USERPIXELSHADER;
1348
                else
1349
                        NextState <= `CU_WAIT_FOR_USERPIXELSHADER;
1350
 
1351
        end
1352
        //-----------------------------------------
1353
        `CU_ACK_USERPIXELSHADER:
1354
        begin
1355
        `ifdef DEBUG
1356
                `LOGME"%d Control: CU_ACK_PSU\n",$time);
1357
        `endif
1358
 
1359
                oRamBusOwner                            <= `REG_BUS_OWNED_BY_UCODE;
1360
                oCodeInstructioPointer  <= 0;    //*
1361
                oUCodeEnable                            <= 0;    //*
1362
                oGFUEnable                                      <= 0;
1363
                oIOWritePixel                           <= 0;
1364
                rResetHitFlop                           <= 0;
1365
                rHitFlopEnable                          <= 0;
1366
      oTriggerTFF             <= 0;
1367
                oSetCurrentPitch        <= 0;
1368 71 diegovalve
                oFlipMemEnabled         <= 1;
1369 76 diegovalve
                oFlipMem                                                <= 0;
1370
                oDone                   <= 0;
1371 63 diegovalve
                //oIncCurrentPitch        <= 0;
1372
 
1373
                if ( iUCodeDone  == 0)
1374
                        NextState <= `CU_TRIGGER_PCU;
1375
                else
1376
                        NextState <= `CU_ACK_USERPIXELSHADER;
1377
 
1378
 
1379
        end
1380
        //---------------------------------------------------
1381 18 diegovalve
        default:
1382
        begin
1383
 
1384
        `ifdef DEBUG
1385
                `LOGME"%d Control: ERRO Undefined State\n",$time);
1386
        `endif
1387
 
1388
                oRamBusOwner                            <= 0;
1389 60 diegovalve
                oCodeInstructioPointer  <= 0;
1390 18 diegovalve
                oUCodeEnable                            <= 0;
1391
                oGFUEnable                                      <= 0;
1392
                oIOWritePixel                           <= 0;
1393
                rResetHitFlop                           <= 0;
1394
                rHitFlopEnable                          <= 0;
1395
      oTriggerTFF             <= 0;
1396
                oSetCurrentPitch        <= 0;
1397 71 diegovalve
                oFlipMemEnabled         <= 0;
1398 76 diegovalve
                oFlipMem                                                <= 0;
1399
                oDone                   <= 0;
1400 18 diegovalve
                //oIncCurrentPitch        <= 0;
1401
 
1402
                NextState <= `CU_AFTER_RESET_STATE;
1403
        end
1404
        //-----------------------------------------
1405
 
1406
        endcase
1407
 
1408
end //always    
1409
endmodule

powered by: WebSVN 2.1.0

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