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

Subversion Repositories theia_gpu

[/] [theia_gpu/] [branches/] [gpu_8_cores/] [rtl/] [GPU/] [CORES/] [CONTROL/] [Unit_Control.v] - Blame information for rev 129

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 105 diegovalve
//`define CU_TRIGGER_TFF 18
51 18 diegovalve
//`define CU_CHECK_GEO_DONE 19
52 105 diegovalve
//`define CU_WAIT_FOR_TFF 19
53 18 diegovalve
`define CU_TRIGGER_AABBIU 20
54
`define CU_WAIT_FOR_AABBIU 21
55 105 diegovalve
`define CU_TRIGGER_MAIN 22
56
`define CU_WAIT_FOR_MAIN 23
57
`define CU_ACK_MAIN 24
58 18 diegovalve
`define CU_TRIGGER_PSU 25
59
`define CU_WAIT_FOR_PSU 26
60
`define CU_ACK_PSU 27
61 105 diegovalve
//`define CU_TRIGGER_PCU 28
62 18 diegovalve
`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 105 diegovalve
`define CU_WAIT_FOR_RENDER_ENABLE 49
83
`define CU_ACK_TCC 50
84
`define CU_WAIT_FOR_HOST_DATA_AVAILABLE 51
85 18 diegovalve
//--------------------------------------------------------------
86
module ControlUnit
87
(
88
 
89
input  wire                                  Clock,
90
input  wire                                  Reset,
91
input  wire[15:0]                            iControlRegister,
92
output reg                                   oGFUEnable,
93
input    wire                                  iTriggerAABBIURequest,
94
input   wire                                   iTriggerBIURequest,
95
input wire                                   iTriggertTCCRequest,
96
output reg                                   oUCodeEnable,
97 60 diegovalve
output reg[`ROM_ADDRESS_WIDTH-1:0]           oCodeInstructioPointer,
98 18 diegovalve
input   wire                                   iUCodeDone,
99
input wire                                   iUCodeReturnValue,
100
input wire                                   iGFUDone,
101
input wire                                   iGEOSync,
102
output reg                                   oTriggerTFF,
103
input wire                                   iTFFDone,
104
input wire                                   MST_I,
105 116 diegovalve
//output reg[2:0]                              //oRamBusOwner,
106 18 diegovalve
input wire                                   iIODone,
107
output reg                                   oSetCurrentPitch,
108 71 diegovalve
output reg                                   oFlipMemEnabled,
109
output reg                                   oFlipMem,
110 76 diegovalve
output reg                                   oIOWritePixel,
111 105 diegovalve
input wire                                   iRenderEnable,
112
input wire                                   iSceneTraverseComplete,
113
input wire                                   iHostDataAvailable,
114 76 diegovalve
 
115
`ifdef DEBUG
116
input wire[`MAX_CORES-1:0]                  iDebug_CoreID,
117
`endif
118
 
119 105 diegovalve
output reg                                   oResultCommited,
120 76 diegovalve
output reg                                   oDone
121 18 diegovalve
 
122
);
123
 
124
//Internal State Machine varibles
125
reg     [5:0]    CurrentState;
126
reg     [5:0]    NextState;
127
integer ucode_file;
128
reg rResetHitFlop,rHitFlopEnable;
129
wire wHit;
130
 
131
`ifdef DUMP_CODE
132
        integer log;
133
 
134
        initial
135
        begin
136
 
137 76 diegovalve
        //$display("Opening ucode dump file....\n");
138 18 diegovalve
        ucode_file = $fopen("CU.log","w");
139
        end
140
 
141
`endif
142 105 diegovalve
 
143
 
144 18 diegovalve
 
145
//--------------------------------------------------------------
146
FFToggleOnce_1Bit FFTO1
147
(
148
        .Clock( Clock ),
149
        .Reset( rResetHitFlop ),
150
        .Enable( rHitFlopEnable && iUCodeDone ),
151
        .S( iUCodeReturnValue ),
152
        .Q( wHit )
153
);
154
//--------------------------------------------------------------
155
 
156 81 diegovalve
`ifdef DEBUG_CU
157 18 diegovalve
        always @ ( wHit )
158
        begin
159 129 diegovalve
                $display( "*** Triangle HIT ***\n");
160 18 diegovalve
        end
161
`endif
162
 
163
//Next states logic and Reset sequence
164
always @(posedge Clock or posedge Reset)
165
  begin
166
 
167
    if (Reset)
168
                CurrentState <= `CU_AFTER_RESET_STATE;
169
    else
170
                CurrentState <= NextState;
171
 
172
  end
173
 
174
//--------------------------------------------------------------
175
always @ ( * )
176
begin
177
        case (CurrentState)
178
        //-----------------------------------------
179
        `CU_AFTER_RESET_STATE:
180
        begin
181
 
182 81 diegovalve
        `ifdef DEBUG_CU
183 129 diegovalve
                $display("%d CU_AFTER_RESET_STATE\n",$time);
184 18 diegovalve
        `endif
185
 
186 116 diegovalve
                //oRamBusOwner                          <= 0;
187 60 diegovalve
                oCodeInstructioPointer  <= `ENTRYPOINT_INDEX_INITIAL;
188 18 diegovalve
                oGFUEnable                                      <= 0;
189
                oUCodeEnable                            <= 0;
190
                oIOWritePixel                           <= 0;
191
                rResetHitFlop                           <= 1;
192
                rHitFlopEnable                          <= 0;
193
                oTriggerTFF             <= 0;
194
                oSetCurrentPitch        <= 1;
195 71 diegovalve
                oFlipMemEnabled         <= 0;
196 76 diegovalve
                oFlipMem                                                <= 0;
197 105 diegovalve
                oDone                   <= 0;
198
                oResultCommited                 <= 0;
199 18 diegovalve
                //oIncCurrentPitch        <= 0;
200
 
201
                NextState                                       <= `CU_WAIT_FOR_INITIAL_CONFIGURATION;
202
 
203
        end
204
        //-----------------------------------------
205
 
206
        `CU_WAIT_FOR_INITIAL_CONFIGURATION:
207
        begin
208 76 diegovalve
        //$display("CORE: %d CU_WAIT_FOR_INITIAL_CONFIGURATION", iDebug_CoreID);
209 81 diegovalve
//              `ifdef DEBUG_CU
210 129 diegovalve
//                      $display("%d Control: CU_WAIT_FOR_INITIAL_CONFIGURATION\n",$time);
211 18 diegovalve
//              `endif
212
 
213 116 diegovalve
                //oRamBusOwner                          <= 0;
214 60 diegovalve
                oCodeInstructioPointer  <= 0;
215 18 diegovalve
                oGFUEnable                                      <= 0;
216
                oUCodeEnable                            <= 0;
217
                oIOWritePixel                           <= 0;
218
                rResetHitFlop                           <= 1;
219
                rHitFlopEnable                          <= 0;
220
      oTriggerTFF             <= 0;
221
                oSetCurrentPitch        <= 0;
222 71 diegovalve
                oFlipMemEnabled         <= 0;
223 76 diegovalve
                oFlipMem                                                <= 0;
224 105 diegovalve
                oDone                   <= 0;
225
                oResultCommited                 <= 0;
226 18 diegovalve
                //oIncCurrentPitch        <= 0;         
227
 
228
                if ( MST_I  )
229
                        NextState <= `CU_PERFORM_INTIAL_CONFIGURATION;//`CU_WAIT_FOR_CONFIG_DATA_READ;
230
                else
231
                        NextState <= `CU_WAIT_FOR_INITIAL_CONFIGURATION;
232
 
233
 
234
        end
235
        //-----------------------------------------
236
        `CU_PERFORM_INTIAL_CONFIGURATION:
237 76 diegovalve
        begin
238
        //$display("CORE: %d CU_PERFORM_INTIAL_CONFIGURATION", iDebug_CoreID);
239 116 diegovalve
        //oRamBusOwner                          <= 0;
240 60 diegovalve
                oCodeInstructioPointer  <= 0;
241 18 diegovalve
                oGFUEnable                                      <= 0;
242
                oUCodeEnable                            <= 0;
243
                oIOWritePixel                           <= 0;
244
                rResetHitFlop                           <= 1;
245
                rHitFlopEnable                          <= 0;
246
      oTriggerTFF             <= 0;
247
                oSetCurrentPitch        <= 0;
248 71 diegovalve
                oFlipMemEnabled         <= 0;
249 76 diegovalve
                oFlipMem                                                <= 0;
250 105 diegovalve
                oDone                   <= 0;
251
                oResultCommited                 <= 0;
252 18 diegovalve
                //oIncCurrentPitch        <= 0;         
253
 
254 76 diegovalve
                if ( MST_I  == 0 && iRenderEnable == 1'b1)
255
                        NextState <= `CU_CLEAR_REGISTERS;//`CU_WAIT_FOR_CONFIG_DATA_READ;
256
                else
257
                        NextState <= `CU_PERFORM_INTIAL_CONFIGURATION;
258
 
259 18 diegovalve
 
260
        end
261
        //-----------------------------------------
262
        `CU_CLEAR_REGISTERS:
263 76 diegovalve
        begin
264
        //$display("CORE: %d CU_CLEAR_REGISTERS", iDebug_CoreID);
265 81 diegovalve
        `ifdef DEBUG_CU
266 129 diegovalve
                $display("%d CU_CLEAR_REGISTERS\n",$time);
267 18 diegovalve
        `endif
268
 
269 116 diegovalve
                //oRamBusOwner                          <= `REG_BUS_OWNED_BY_UCODE;
270 60 diegovalve
                oCodeInstructioPointer  <= `ENTRYPOINT_INDEX_INITIAL;
271 18 diegovalve
                oGFUEnable                                      <= 0;
272
                oUCodeEnable                            <= 1;   //*
273
                oIOWritePixel                           <= 0;
274
                rResetHitFlop                           <= 0;
275
                rHitFlopEnable                          <= 0;
276
                oTriggerTFF             <= 0;
277
                oSetCurrentPitch        <= 0;
278 71 diegovalve
                oFlipMemEnabled         <= 1;
279 105 diegovalve
                oFlipMem                                                <= 0;
280
                oDone                   <= 0;
281
                oResultCommited                 <= 0;
282
 
283 76 diegovalve
                ////$display("\n\n %d XOXOXOXOX FLIP XOXOXOXOXOX\n\n",$time);
284 18 diegovalve
                //oIncCurrentPitch        <= 0;
285
 
286
                NextState                                       <= `CU_WAIT_CLEAR_REGISTERS;
287
        end
288
//-----------------------------------------     
289
        `CU_WAIT_CLEAR_REGISTERS:
290
        begin
291 81 diegovalve
//      `ifdef DEBUG_CU
292 129 diegovalve
//              $display("%d CU_WAIT_CLEAR_REGISTERS\n",$time);
293 18 diegovalve
//      `endif  
294 76 diegovalve
                //$display("CORE: %d CU_WAIT_CLEAR_REGISTERS", iDebug_CoreID);
295 116 diegovalve
                //oRamBusOwner                          <= `REG_BUS_OWNED_BY_UCODE;
296 60 diegovalve
                oCodeInstructioPointer  <= `ENTRYPOINT_INDEX_INITIAL;
297 18 diegovalve
                oGFUEnable                                      <= 0;
298
                oUCodeEnable                            <= 0;
299
                oIOWritePixel                           <= 0;
300
                rResetHitFlop                           <= 0;
301
                rHitFlopEnable                          <= 0;
302
      oTriggerTFF             <= 0;
303
                oSetCurrentPitch        <= 0;
304 71 diegovalve
                oFlipMemEnabled         <= 1;
305 76 diegovalve
                oFlipMem                                                <= 0;
306 105 diegovalve
                oDone                   <= 0;
307
                oResultCommited                 <= 0;
308 18 diegovalve
                //oIncCurrentPitch        <= 0;
309
 
310
                if ( iUCodeDone )
311
                        NextState <= `CU_ACK_CLEAR_REGISTERS;
312
                else
313
                        NextState <= `CU_WAIT_CLEAR_REGISTERS;
314
 
315
        end
316
        //-----------------------------------------
317
        `CU_ACK_CLEAR_REGISTERS:
318 76 diegovalve
        begin
319
 
320 81 diegovalve
        `ifdef DEBUG_CU
321 129 diegovalve
                $display("%d CU_ACK_CLEAR_REGISTERS\n", $time);
322 18 diegovalve
        `endif
323 76 diegovalve
 
324
        //$display("CORE: %d CU_ACK_CLEAR_REGISTERS", iDebug_CoreID);
325 18 diegovalve
 
326 116 diegovalve
                //oRamBusOwner                          <= 0;
327 60 diegovalve
                oCodeInstructioPointer  <= 0;
328 18 diegovalve
                oGFUEnable                                      <= 0;
329
                oUCodeEnable                            <= 0; //*        
330
                oIOWritePixel                           <= 0;
331
                rResetHitFlop                           <= 0;
332
                rHitFlopEnable                          <= 0;
333
      oTriggerTFF             <= 0;
334
                oSetCurrentPitch        <= 0;
335 71 diegovalve
                oFlipMemEnabled         <= 0;
336 76 diegovalve
                oFlipMem                                                <= 0;
337 105 diegovalve
                oDone                   <= 0;
338
                oResultCommited                 <= 0;
339 18 diegovalve
                //oIncCurrentPitch        <= 0;
340
 
341
                NextState <= `CU_WAIT_FOR_CONFIG_DATA_READ;
342
        end
343
 
344
 
345
 
346
        //-----------------------------------------
347
        `CU_WAIT_FOR_CONFIG_DATA_READ:
348
        begin
349 76 diegovalve
 
350 81 diegovalve
//              `ifdef DEBUG_CU
351 129 diegovalve
//                      $display("%d Control: CU_WAIT_FOR_CONFIG_DATA_READ\n",$time);
352 18 diegovalve
//              `endif
353 76 diegovalve
 
354
 
355
//$display("CORE: %d CU_WAIT_FOR_CONFIG_DATA_READ", iDebug_CoreID);
356 18 diegovalve
 
357 116 diegovalve
                //oRamBusOwner                          <= 0;//`REG_BUS_OWNED_BY_BCU;
358 60 diegovalve
                oCodeInstructioPointer  <= 0;
359 18 diegovalve
                oGFUEnable                                      <= 0;
360
                oUCodeEnable                            <= 0;
361
                oIOWritePixel                           <= 0;
362
                rResetHitFlop                           <= 0;
363
                rHitFlopEnable                          <= 0;
364
      oTriggerTFF             <= 0;
365
                oSetCurrentPitch        <= 0;
366 71 diegovalve
                oFlipMemEnabled         <= 0;
367 76 diegovalve
                oFlipMem                                                <= 0;
368 105 diegovalve
                oDone                   <= 0;
369
                oResultCommited                 <= 0;
370 18 diegovalve
                //oIncCurrentPitch        <= 0;
371
 
372
                if ( MST_I == 0  )
373
                        NextState <= `CU_PRECALCULATE_CONSTANTS;
374
                else
375
                        NextState <= `CU_WAIT_FOR_CONFIG_DATA_READ;
376
 
377
        end
378
        //-----------------------------------------
379
        `CU_PRECALCULATE_CONSTANTS:
380
        begin
381 76 diegovalve
//$display("CORE: %d CU_PRECALCULATE_CONSTANTS", iDebug_CoreID);
382 81 diegovalve
        `ifdef DEBUG_CU
383 129 diegovalve
                $display("%d Control: CU_PRECALCULATE_CONSTANTS\n", $time);
384 18 diegovalve
        `endif
385
 
386 116 diegovalve
                //oRamBusOwner                          <= `REG_BUS_OWNED_BY_UCODE;
387 60 diegovalve
                oCodeInstructioPointer  <= `ENTRYPOINT_INDEX_CPPU;
388 18 diegovalve
                oGFUEnable                              <= 0;
389
                oUCodeEnable                            <= 1; //*       
390
                oIOWritePixel                           <= 0;
391
                rResetHitFlop                           <= 0;
392
                rHitFlopEnable                          <= 0;
393
      oTriggerTFF             <= 0;
394
                oSetCurrentPitch        <= 0;
395 71 diegovalve
                oFlipMemEnabled         <= 0;
396 76 diegovalve
                oFlipMem                                                <= 0;
397 105 diegovalve
                oDone                   <= 0;
398
                oResultCommited                 <= 0;
399 18 diegovalve
                //oIncCurrentPitch        <= 0;
400
 
401
                NextState <= `CU_WAIT_FOR_CONSTANT;
402
 
403
        end
404
        //-----------------------------------------
405
        `CU_WAIT_FOR_CONSTANT:
406
        begin
407 81 diegovalve
//      `ifdef DEBUG_CU
408 129 diegovalve
//              $display("%d Control: CU_WAIT_FOR_CONSTANT\n", $time);
409 18 diegovalve
//      `endif
410
 
411
 
412 116 diegovalve
                //oRamBusOwner                          <= `REG_BUS_OWNED_BY_UCODE;
413 60 diegovalve
                oCodeInstructioPointer  <= `ENTRYPOINT_INDEX_CPPU;
414 18 diegovalve
                oGFUEnable                                 <= 0;
415
                oUCodeEnable                            <= 0; //*        
416
                oIOWritePixel                           <= 0;
417
                rResetHitFlop                           <= 0;
418
                rHitFlopEnable                          <= 0;
419
      oTriggerTFF             <= 0;
420
                oSetCurrentPitch        <= 0;
421 71 diegovalve
                oFlipMemEnabled         <= 0;
422 76 diegovalve
                oFlipMem                                                <= 0;
423 105 diegovalve
                oDone                   <= 0;
424
                oResultCommited                 <= 0;
425 18 diegovalve
                //oIncCurrentPitch        <= 0;
426
 
427
                if ( iUCodeDone )
428
                        NextState <= `CU_ACK_PRECALCULATE_CONSTANTS;
429
                else
430
                        NextState <= `CU_WAIT_FOR_CONSTANT;
431
 
432
        end
433
        //-----------------------------------------
434
        `CU_ACK_PRECALCULATE_CONSTANTS:
435
        begin
436 76 diegovalve
        //$display("CORE: %d CU_ACK_PRECALCULATE_CONSTANTS", iDebug_CoreID);
437 81 diegovalve
        `ifdef DEBUG_CU
438 129 diegovalve
                $display("%d Control: CU_ACK_PRECALCULATE_CONSTANTS\n", $time);
439 18 diegovalve
        `endif
440
 
441
 
442 116 diegovalve
                //oRamBusOwner                          <= 0;//`REG_BUS_OWNED_BY_BCU;
443 60 diegovalve
                oCodeInstructioPointer  <= 0;
444 18 diegovalve
                oGFUEnable                                 <= 0;
445
                oUCodeEnable                            <= 0; //*        
446
                oIOWritePixel                           <= 0;
447
                rResetHitFlop                           <= 0;
448
                rHitFlopEnable                          <= 0;
449
      oTriggerTFF             <= 0;
450
                oSetCurrentPitch        <= 0;
451 71 diegovalve
                oFlipMemEnabled         <= 0;
452 76 diegovalve
                oFlipMem                                                <= 0;
453 105 diegovalve
                oDone                   <= 0;
454
                oResultCommited                 <= 0;
455 18 diegovalve
                //oIncCurrentPitch        <= 0;
456
 
457 63 diegovalve
                NextState <= `CU_TRIGGER_USERCONSTANTS;//CU_WAIT_FOR_TASK;
458 18 diegovalve
 
459
        end
460
        //-----------------------------------------
461 71 diegovalve
 
462 63 diegovalve
        `CU_TRIGGER_USERCONSTANTS:
463
        begin
464 81 diegovalve
        `ifdef DEBUG_CU
465 129 diegovalve
                $display("%d Control: CU_TRIGGER_USERCONSTANTS\n",$time);
466 63 diegovalve
        `endif
467 76 diegovalve
 
468
                //$display("CORE: %d CU_TRIGGER_USERCONSTANTS", iDebug_CoreID);
469 63 diegovalve
 
470 116 diegovalve
                //oRamBusOwner                          <= `REG_BUS_OWNED_BY_UCODE;
471 63 diegovalve
                oCodeInstructioPointer  <= `ENTRYPOINT_INDEX_USERCONSTANTS;
472
                oGFUEnable                                      <= 0;
473
                oUCodeEnable                            <= 1;   //*
474
                oIOWritePixel                           <= 0;
475
                rResetHitFlop                           <= 0;
476
                rHitFlopEnable                          <= 0;
477
      oTriggerTFF             <= 0;
478
                oSetCurrentPitch        <= 0;
479 71 diegovalve
                oFlipMemEnabled         <= 0;
480 76 diegovalve
                oFlipMem                                                <= 0;
481 105 diegovalve
                oDone                   <= 0;
482
                oResultCommited                 <= 0;
483 63 diegovalve
                //oIncCurrentPitch        <= 0;
484
 
485
                NextState <= `CU_WAIT_USERCONSTANTS;
486
        end
487
        //-----------------------------------------
488
        `CU_WAIT_USERCONSTANTS:
489
        begin
490
 
491 81 diegovalve
//      `ifdef DEBUG_CU
492 129 diegovalve
//              $display("%d Control: CU_WAIT_FOR_RGU\n",$time);
493 63 diegovalve
//      `endif
494
 
495 116 diegovalve
                //oRamBusOwner                          <= `REG_BUS_OWNED_BY_UCODE;
496 63 diegovalve
                oCodeInstructioPointer  <= `ENTRYPOINT_INDEX_USERCONSTANTS;
497
                oGFUEnable                                      <= 0;
498
                oUCodeEnable                            <= 0;
499
                oIOWritePixel                           <= 0;
500
                rResetHitFlop                           <= 0;
501
                rHitFlopEnable                          <= 0;
502
      oTriggerTFF             <= 0;
503
                oSetCurrentPitch        <= 0;
504 71 diegovalve
                oFlipMemEnabled         <= 0;
505 76 diegovalve
                oFlipMem                                                <= 0;
506 105 diegovalve
                oDone                   <= 0;
507
                oResultCommited                 <= 0;
508 63 diegovalve
                //oIncCurrentPitch        <= 0;
509
 
510
                if ( iUCodeDone )
511
                        NextState <= `CU_ACK_USERCONSTANTS;
512
                else
513
                        NextState <= `CU_WAIT_USERCONSTANTS;
514
        end
515
        //-----------------------------------------
516
        `CU_ACK_USERCONSTANTS:
517
        begin
518
 
519 81 diegovalve
        `ifdef DEBUG_CU
520 129 diegovalve
                $display("%d Control: CU_ACK_RGU\n",$time);
521 76 diegovalve
        `endif
522
 
523
        //$display("CORE: %d CU_ACK_USERCONSTANTS", iDebug_CoreID);
524
 
525 116 diegovalve
                //oRamBusOwner                          <= `REG_BUS_OWNED_BY_UCODE;
526 63 diegovalve
                oCodeInstructioPointer  <= 0;
527
                oGFUEnable                                      <= 0;
528
                oUCodeEnable                            <= 0; //*        
529
                oIOWritePixel                           <= 0;
530
                rResetHitFlop                           <= 0;
531
                rHitFlopEnable                          <= 0;
532
      oTriggerTFF             <= 0;
533
                oSetCurrentPitch        <= 0;
534 71 diegovalve
                oFlipMemEnabled         <= 0;
535 76 diegovalve
                oFlipMem                                                <= 0;
536 105 diegovalve
                oDone                   <= 0;
537
                oResultCommited                 <= 0;
538 63 diegovalve
                //oIncCurrentPitch        <= 0;
539
 
540
                if ( iUCodeDone  == 0)
541 76 diegovalve
                        NextState <= `CU_WAIT_FOR_RENDER_ENABLE;
542 63 diegovalve
                else
543
                        NextState <= `CU_ACK_USERCONSTANTS;
544
 
545
        end
546 76 diegovalve
        //-----------------------------------------
547
        `CU_WAIT_FOR_RENDER_ENABLE:
548
        begin
549 81 diegovalve
        `ifdef DEBUG_CU
550
        $display("CORE: %d CU_WAIT_FOR_RENDER_ENABLE", iDebug_CoreID);
551
        `endif
552 116 diegovalve
                //oRamBusOwner                          <= `REG_BUS_OWNED_BY_UCODE;
553 76 diegovalve
                oCodeInstructioPointer  <= 0;
554
                oGFUEnable                                      <= 0;
555
                oUCodeEnable                            <= 0; //*        
556
                oIOWritePixel                           <= 0;
557
                rResetHitFlop                           <= 0;
558
                rHitFlopEnable                          <= 0;
559
      oTriggerTFF             <= 0;
560
                oSetCurrentPitch        <= 0;
561
                oFlipMemEnabled         <= 0;
562
                oFlipMem                                                <= 0;
563 105 diegovalve
                oDone                   <= 0;
564
                oResultCommited                 <= 0;
565 76 diegovalve
                //oIncCurrentPitch        <= 0;
566
 
567
                if ( iRenderEnable)
568
                        NextState <= `CU_TRIGGER_RGU;
569
                else
570
                        NextState <= `CU_WAIT_FOR_RENDER_ENABLE;
571
        end
572 63 diegovalve
        //-----------------------------------------
573 18 diegovalve
        `CU_TRIGGER_RGU:
574
        begin
575
 
576 81 diegovalve
        `ifdef DEBUG_CU
577 129 diegovalve
                $display("CORE: %d CU_TRIGGER_RGU", iDebug_CoreID);
578 76 diegovalve
        `endif
579 81 diegovalve
 
580 18 diegovalve
 
581 116 diegovalve
                //oRamBusOwner                          <= `REG_BUS_OWNED_BY_UCODE;
582 60 diegovalve
                oCodeInstructioPointer  <= `ENTRYPOINT_INDEX_RGU;
583 18 diegovalve
                oGFUEnable                                      <= 0;
584
                oUCodeEnable                            <= 1;   //*
585
                oIOWritePixel                           <= 0;
586
                rResetHitFlop                           <= 0;
587
                rHitFlopEnable                          <= 0;
588
      oTriggerTFF             <= 0;
589
                oSetCurrentPitch        <= 0;
590 71 diegovalve
                oFlipMemEnabled         <= 0;
591 76 diegovalve
                oFlipMem                                                <= 0;
592 105 diegovalve
                oDone                   <= 0;
593
                oResultCommited                 <= 0;
594 18 diegovalve
                //oIncCurrentPitch        <= 0;
595
 
596
                NextState <= `CU_WAIT_FOR_RGU;
597
        end
598
        //-----------------------------------------
599
        `CU_WAIT_FOR_RGU:
600
        begin
601
 
602 81 diegovalve
//      `ifdef DEBUG_CU
603 129 diegovalve
//              $display("%d Control: CU_WAIT_FOR_RGU\n",$time);
604 18 diegovalve
//      `endif
605
 
606 116 diegovalve
                //oRamBusOwner                          <= `REG_BUS_OWNED_BY_UCODE;
607 60 diegovalve
                oCodeInstructioPointer  <= 0;
608 18 diegovalve
                oGFUEnable                                      <= 0;
609
                oUCodeEnable                            <= 0;
610
                oIOWritePixel                           <= 0;
611
                rResetHitFlop                           <= 0;
612
                rHitFlopEnable                          <= 0;
613
      oTriggerTFF             <= 0;
614
                oSetCurrentPitch        <= 0;
615 71 diegovalve
                oFlipMemEnabled         <= 0;
616 76 diegovalve
                oFlipMem                                                <= 0;
617 105 diegovalve
                oDone                   <= 0;
618
                oResultCommited                 <= 0;
619 18 diegovalve
                //oIncCurrentPitch        <= 0;
620
 
621
                if ( iUCodeDone )
622
                        NextState <= `CU_ACK_RGU;
623
                else
624
                        NextState <= `CU_WAIT_FOR_RGU;
625
        end
626
        //-----------------------------------------
627
        `CU_ACK_RGU:
628 81 diegovalve
        begin
629 113 diegovalve
 
630 81 diegovalve
        `ifdef DEBUG_CU
631 129 diegovalve
                $display("CORE: %d CU_ACK_RGU", iDebug_CoreID);
632 18 diegovalve
        `endif
633 116 diegovalve
                //oRamBusOwner                          <= `REG_BUS_OWNED_BY_UCODE;
634 60 diegovalve
                oCodeInstructioPointer  <= 0;
635 18 diegovalve
                oGFUEnable                                      <= 0;
636
                oUCodeEnable                            <= 0; //*        
637
                oIOWritePixel                           <= 0;
638
                rResetHitFlop                           <= 0;
639
                rHitFlopEnable                          <= 0;
640
      oTriggerTFF             <= 0;
641
                oSetCurrentPitch        <= 0;
642 105 diegovalve
                oFlipMemEnabled         <= 1;
643
                oFlipMem                                                <= 0;
644
                oDone                   <= 0;
645
                oResultCommited                 <= 0;
646 18 diegovalve
                //oIncCurrentPitch        <= 0;
647
 
648 105 diegovalve
                if ( iUCodeDone  == 0 & iRenderEnable == 1)
649
                        NextState <= `CU_WAIT_FOR_HOST_DATA_AVAILABLE;//`CU_TRIGGER_GEO;///////////// GET RID OF GEO!!!
650 18 diegovalve
                else
651
                        NextState <= `CU_ACK_RGU;
652
 
653
        end
654
        //-----------------------------------------
655
        `CU_TRIGGER_TCC:
656
        begin
657 76 diegovalve
        ////$display("CU_TRIGGER_TCC");
658 81 diegovalve
        `ifdef DEBUG_CU
659 129 diegovalve
                $display("%d CORE %d Control: CU_TRIGGER_TCC\n",$time,iDebug_CoreID);
660 18 diegovalve
        `endif
661
 
662 116 diegovalve
           //oRamBusOwner                               <= `REG_BUS_OWNED_BY_UCODE;
663 60 diegovalve
                oCodeInstructioPointer  <= `ENTRYPOINT_INDEX_TCC;
664 18 diegovalve
                oUCodeEnable                            <= 1;   //*
665
                oGFUEnable                                      <= 0;
666
                oIOWritePixel                           <= 0;
667
                rResetHitFlop                           <= 0;
668
                rHitFlopEnable                          <= 0;
669
      oTriggerTFF             <= 0;
670
                oSetCurrentPitch        <= 0;
671 71 diegovalve
                oFlipMemEnabled         <= 1;
672 105 diegovalve
                oFlipMem                                                <= 0; //We need u,v from last IO read cycle
673
                oResultCommited                 <= 0;
674 76 diegovalve
                ////$display("\n\n %d XOXOXOXOX FLIP XOXOXOXOXOX\n\n",$time);
675 18 diegovalve
                //oIncCurrentPitch        <= 0;
676 76 diegovalve
                oDone                   <= 0;
677 18 diegovalve
 
678
          NextState  <= `WAIT_FOR_TCC;
679
        end
680
        //-----------------------------------------
681
        `WAIT_FOR_TCC:
682
        begin
683
 
684 76 diegovalve
        ////$display("WAIT_FOR_TCC");
685 116 diegovalve
           //oRamBusOwner                               <= `REG_BUS_OWNED_BY_UCODE;
686 60 diegovalve
                oCodeInstructioPointer  <= `ENTRYPOINT_INDEX_TCC;
687 18 diegovalve
                oUCodeEnable                            <= 0;    //*
688
                oGFUEnable                                      <= 0;
689
                oIOWritePixel                           <= 0;
690
                rResetHitFlop                           <= 0;
691
                rHitFlopEnable                          <= 0;
692
      oTriggerTFF             <= 0;
693
                oSetCurrentPitch        <= 0;
694 71 diegovalve
                oFlipMemEnabled         <= 1;
695 76 diegovalve
                oFlipMem                                                <= 0;
696 105 diegovalve
                oDone                   <= 0;
697
                oResultCommited                 <= 0;
698 18 diegovalve
                //oIncCurrentPitch        <= 0;
699
 
700
           if ( iUCodeDone )
701 105 diegovalve
                        NextState <= `CU_ACK_TCC;
702 18 diegovalve
                else
703
                        NextState <= `WAIT_FOR_TCC;
704
 
705
        end
706 105 diegovalve
        //-----------------------------------------
707
        `CU_ACK_TCC:
708
        begin
709
 
710
        ////$display("WAIT_FOR_TCC");
711 116 diegovalve
           //oRamBusOwner                               <= `REG_BUS_OWNED_BY_UCODE;
712 105 diegovalve
                oCodeInstructioPointer  <= `ENTRYPOINT_INDEX_TCC;
713
                oUCodeEnable                            <= 0;    //*
714
                oGFUEnable                                      <= 0;
715
                oIOWritePixel                           <= 0;
716
                rResetHitFlop                           <= 0;
717
                rHitFlopEnable                          <= 0;
718
      oTriggerTFF             <= 0;
719
                oSetCurrentPitch        <= 0;
720
                oFlipMemEnabled         <= 0;
721
                oFlipMem                                                <= 0;
722
                oDone                   <= 0;
723
                oResultCommited                 <= 0;
724
                //oIncCurrentPitch        <= 0;
725
 
726
           if ( iUCodeDone == 0 && iSceneTraverseComplete == 1'b1)  //DDDD
727
                        NextState <= `CU_TRIGGER_PSU_WITH_TEXTURE;
728
                else if (iUCodeDone == 0 && iSceneTraverseComplete == 1'b0)
729
                        NextState <= `CU_WAIT_FOR_HOST_DATA_AVAILABLE;
730
                else
731
                        NextState <= `CU_ACK_TCC;
732
 
733
        end
734 18 diegovalve
        //-----------------------------------------
735
        /*
736
        Was there any hit at all?
737
        At this point, all the triangles in the list
738
        have been traversed looking for a hit with our ray.
739
        There are 3 possibilities:
740
        1) The was not a single hit, then just paint a black
741
        pixel on the screen and send it via PCU.
742
        2)There was a hit and Texturing is not enabled, then trigger the PSU with
743
        no texturing
744
        2) There was a hit and Texturing is enabled, then fetch the texture
745
        values corresponding to the triangle that we hitted.
746
        */
747
        `CU_CHECK_HIT:
748
        begin
749
 
750 81 diegovalve
        `ifdef DEBUG_CU
751 129 diegovalve
                $display("%d CORE %d Control: CU_CHECK_HIT\n",$time,iDebug_CoreID);
752 105 diegovalve
        `endif
753 18 diegovalve
 
754 105 diegovalve
 
755 116 diegovalve
                //oRamBusOwner                          <= `REG_BUS_OWNED_BY_GFU;
756 60 diegovalve
                oCodeInstructioPointer  <= 0;
757 18 diegovalve
                oUCodeEnable                            <= 0;
758
                oGFUEnable                                      <= 0;    ///CHANGED Aug 15
759
                oIOWritePixel                           <= 0;
760
                rResetHitFlop                           <= 0;
761
                rHitFlopEnable                          <= 0;
762
           oTriggerTFF             <= 0;
763
                oSetCurrentPitch        <= 0;
764 105 diegovalve
                oFlipMemEnabled         <= 0;
765
                oFlipMem                                                <= 0;
766
                oDone                   <= 0;
767
                oResultCommited                 <= 0;
768
 
769
 
770 18 diegovalve
 
771 105 diegovalve
                if (wHit)
772
                begin
773
                        //$display("HIT");
774
                        NextState <= `CU_TRIGGER_PSU_WITH_TEXTURE;
775
                end
776 18 diegovalve
                else
777 105 diegovalve
                        NextState <= `CU_TRIGGER_USERPIXELSHADER;//666
778
 
779 18 diegovalve
        end
780
 
781
        //-----------------------------------------
782
        `CU_TRIGGER_PSU_WITH_TEXTURE:
783
        begin
784
 
785 81 diegovalve
        `ifdef DEBUG_CU
786 129 diegovalve
                $display("%d Control: CU_TRIGGER_PSU_WITH_TEXTURE\n",$time);
787 18 diegovalve
        `endif
788
 
789 116 diegovalve
           //oRamBusOwner                               <= `REG_BUS_OWNED_BY_UCODE;
790 60 diegovalve
                oCodeInstructioPointer  <= `ENTRYPOINT_INDEX_PSU2;
791 18 diegovalve
                oUCodeEnable                            <= 1;
792
                oGFUEnable                                      <= 0;
793
                oIOWritePixel                           <= 0;
794 105 diegovalve
                rResetHitFlop                           <= 1;
795 18 diegovalve
                rHitFlopEnable                          <= 0;
796
                oTriggerTFF             <= 0;
797
                oSetCurrentPitch        <= 0;
798 105 diegovalve
                oFlipMemEnabled         <= 0;//////NEW NEW NEW NEW  
799
                oFlipMem                                                <= 0;
800
                oDone                   <= 0;
801
                oResultCommited                 <= 0;
802 76 diegovalve
                ////$display("\n\n %d XOXOXOXOX FLIP XOXOXOXOXOX\n\n",$time);
803 18 diegovalve
           //oIncCurrentPitch        <= 0;
804
 
805
                NextState <= `CU_WAIT_FOR_PSU;
806 105 diegovalve
        end
807
        //-----------------------------------------
808
        //Wait until data from Host becomes available
809
        `CU_WAIT_FOR_HOST_DATA_AVAILABLE:
810
        begin
811 116 diegovalve
                //oRamBusOwner                          <= `REG_BUS_OWNED_BY_UCODE;
812 105 diegovalve
                oCodeInstructioPointer  <= 0;
813 18 diegovalve
                oUCodeEnable                            <= 0;
814 105 diegovalve
                oGFUEnable                                      <= 0;
815 18 diegovalve
                oIOWritePixel                           <= 0;
816
                rResetHitFlop                           <= 0;
817 105 diegovalve
                rHitFlopEnable                          <= 0;
818
                oTriggerTFF             <= 0;
819 18 diegovalve
                oSetCurrentPitch        <= 0;
820 105 diegovalve
                oFlipMemEnabled         <= 0;
821 76 diegovalve
                oFlipMem                                                <= 0;
822 105 diegovalve
                oDone                   <= 0;
823
                oResultCommited                 <= 0;
824
 
825
                if ( iHostDataAvailable )
826
                        NextState <= `CU_TRIGGER_MAIN;
827
                else
828
                        NextState <= `CU_WAIT_FOR_HOST_DATA_AVAILABLE;
829
 
830
 
831 18 diegovalve
        end
832
        //-----------------------------------------
833 105 diegovalve
        `CU_TRIGGER_MAIN:
834 18 diegovalve
        begin
835 81 diegovalve
        `ifdef DEBUG_CU
836 129 diegovalve
                $display("%d CORE: %d Control: CU_TRIGGER_MAIN\n",$time,iDebug_CoreID);
837 18 diegovalve
        `endif
838
 
839 116 diegovalve
                        //oRamBusOwner                          <= `REG_BUS_OWNED_BY_UCODE;
840 105 diegovalve
                        oCodeInstructioPointer  <= `ENTRYPOINT_INDEX_MAIN;
841 18 diegovalve
                        oUCodeEnable                            <= 1;
842
                        oGFUEnable                                      <= 1;
843
                        oIOWritePixel                           <= 0;
844 105 diegovalve
                        rResetHitFlop                           <= 0;
845
                        rHitFlopEnable                          <= 0;
846 18 diegovalve
         oTriggerTFF             <= 0;
847
                        oSetCurrentPitch        <= 0;
848 71 diegovalve
                        oFlipMemEnabled         <= 1;
849 76 diegovalve
                        oFlipMem                                                <= 1;
850 105 diegovalve
                        oDone                   <= 0;
851
                        oResultCommited                 <= 0;
852 76 diegovalve
                        ////$display("\n\n %d XOXOXOXOX FLIP XOXOXOXOXOX\n\n",$time);
853 18 diegovalve
                        //oIncCurrentPitch        <= 0;
854
                //      $stop();
855
 
856 105 diegovalve
                        NextState <= `CU_WAIT_FOR_MAIN;
857 18 diegovalve
 
858
        end
859
        //-----------------------------------------
860 105 diegovalve
        `CU_WAIT_FOR_MAIN:
861 18 diegovalve
        begin
862 81 diegovalve
//      `ifdef DEBUG_CU
863 129 diegovalve
//              $display("%d Control: CU_WAIT_FOR_MAIN\n",$time);
864 18 diegovalve
//      `endif
865
 
866 116 diegovalve
                        //oRamBusOwner                          <= `REG_BUS_OWNED_BY_UCODE;
867 105 diegovalve
                        oCodeInstructioPointer  <= `ENTRYPOINT_INDEX_MAIN;
868 18 diegovalve
                        oUCodeEnable                            <= 0;
869
                        oGFUEnable                                      <= 1;
870
                        oIOWritePixel                           <= 0;
871
                        rResetHitFlop                           <= 0;
872
                        rHitFlopEnable                          <= 1;
873
         oTriggerTFF             <= 0;
874
                        oSetCurrentPitch        <= 0;
875 71 diegovalve
                        oFlipMemEnabled         <= 1;
876 76 diegovalve
                        oFlipMem                                                <= 0;
877 105 diegovalve
                        oDone                   <= 0;
878
                        oResultCommited                 <= 0;
879
                        //oIncCurrentPitch        <= 0;
880
 
881
                        //NextState <= `CU_WAIT_FOR_MAIN;
882
 
883
 
884 18 diegovalve
                if ( iUCodeDone )
885 105 diegovalve
                        NextState <= `CU_ACK_MAIN;
886 18 diegovalve
                else
887 105 diegovalve
                        NextState <= `CU_WAIT_FOR_MAIN;
888
 
889 18 diegovalve
        end
890
        //-----------------------------------------
891
        /*
892
                ACK UCODE by setting oUCodeEnable = 0
893
        */
894 105 diegovalve
        `CU_ACK_MAIN:
895 18 diegovalve
        begin
896 81 diegovalve
        `ifdef DEBUG_CU
897 129 diegovalve
                $display("%d CORE: %d Control: CU_ACK_MAIN\n",$time, iDebug_CoreID);
898 18 diegovalve
        `endif
899
 
900 116 diegovalve
                        //oRamBusOwner                          <= `REG_BUS_OWNED_BY_GFU;
901 60 diegovalve
                        oCodeInstructioPointer  <= 0; //*
902 18 diegovalve
                        oUCodeEnable                            <= 0;    //*
903
                        oGFUEnable                                      <= 0; //Changed Aug 15
904
                        oIOWritePixel                           <= 0;
905
                        rResetHitFlop                           <= 0;
906 105 diegovalve
                        rHitFlopEnable                          <= 1;
907 18 diegovalve
         oTriggerTFF             <= 0;
908
                        oSetCurrentPitch        <= 0;
909 71 diegovalve
                        oFlipMemEnabled         <= 0;
910 76 diegovalve
                        oFlipMem                                                <= 0;
911 105 diegovalve
                        oDone                   <= 0;
912
                        oResultCommited                 <= 0;
913 18 diegovalve
                        //oIncCurrentPitch        <= 0;
914
 
915
        //              $stop();
916 105 diegovalve
 
917
                        if ( iUCodeDone == 1'b0 & iSceneTraverseComplete == 1'b1)
918
                                NextState <=  `CU_CHECK_HIT;
919
                        else if ( iUCodeDone == 1'b0 & iSceneTraverseComplete == 1'b0) //ERROR!!! What if iSceneTraverseComplete will become 1 a cycle after this??
920
                                NextState <= `CU_TRIGGER_MAIN;
921 18 diegovalve
                        else
922 105 diegovalve
                                NextState <= `CU_ACK_MAIN;
923
 
924
 
925
 
926 18 diegovalve
        end
927
        //-----------------------------------------
928
        `CU_WAIT_FOR_PSU:
929
        begin
930
 
931 81 diegovalve
//      `ifdef DEBUG_CU
932 129 diegovalve
//              $display("%d Control: CU_TRIGGER_PSU\n",$time);
933 18 diegovalve
//      `endif
934
 
935 116 diegovalve
                //oRamBusOwner                          <= `REG_BUS_OWNED_BY_UCODE;
936 60 diegovalve
                oCodeInstructioPointer  <= `ENTRYPOINT_INDEX_PSU;
937 18 diegovalve
                oUCodeEnable                            <= 0;
938
                oGFUEnable                                      <= 0;
939
                oIOWritePixel                           <= 0;
940
                rResetHitFlop                           <= 0;
941
                rHitFlopEnable                          <= 0;
942
                oTriggerTFF             <= 0;
943
                oSetCurrentPitch        <= 0;
944 71 diegovalve
                oFlipMemEnabled         <= 1;
945 76 diegovalve
                oFlipMem                                                <= 0;
946 105 diegovalve
                oDone                   <= 0;
947
                oResultCommited                 <= 0;
948 18 diegovalve
                //oIncCurrentPitch        <= 0;
949
 
950
 
951
                if ( iUCodeDone )
952
                        NextState <= `CU_ACK_PSU;
953
                else
954
                        NextState <= `CU_WAIT_FOR_PSU;
955
 
956
        end
957
        //-----------------------------------------
958
        `CU_ACK_PSU:
959
        begin
960 81 diegovalve
        `ifdef DEBUG_CU
961 129 diegovalve
                $display("%d CORE: %d Control: CU_ACK_PSU\n",$time, iDebug_CoreID);
962 18 diegovalve
        `endif
963
 
964 116 diegovalve
                //oRamBusOwner                          <= `REG_BUS_OWNED_BY_UCODE;
965 60 diegovalve
                oCodeInstructioPointer  <= 0;    //*
966 18 diegovalve
                oUCodeEnable                            <= 0;    //*
967
                oGFUEnable                                      <= 0;
968
                oIOWritePixel                           <= 0;
969
                rResetHitFlop                           <= 0;
970
                rHitFlopEnable                          <= 0;
971
      oTriggerTFF             <= 0;
972
                oSetCurrentPitch        <= 0;
973 71 diegovalve
                oFlipMemEnabled         <= 1;
974 76 diegovalve
                oFlipMem                                                <= 0;
975 105 diegovalve
                oDone                   <= 0;
976
                oResultCommited                 <= 0;
977 18 diegovalve
                //oIncCurrentPitch        <= 0;
978
 
979
                if ( iUCodeDone  == 0)
980 63 diegovalve
                        NextState <= `CU_TRIGGER_USERPIXELSHADER;
981 18 diegovalve
                else
982
                        NextState <= `CU_ACK_PSU;
983
 
984
 
985
        end
986
        //-----------------------------------------
987
 
988
        //-----------------------------------------
989
        `CU_TRIGGER_NPU: //Next Pixel Unit
990
        begin
991 81 diegovalve
        `ifdef DEBUG_CU
992 129 diegovalve
                $display("%d CORE: %d Control: CU_TRIGGER_NPU\n",$time, iDebug_CoreID);
993 81 diegovalve
        `endif
994 105 diegovalve
                $write("*");
995 81 diegovalve
 
996 116 diegovalve
                //oRamBusOwner                          <= `REG_BUS_OWNED_BY_UCODE;
997 60 diegovalve
                oCodeInstructioPointer  <= `ENTRYPOINT_INDEX_NPG;       //*
998 18 diegovalve
                oUCodeEnable                            <= 1;   //*
999
                oGFUEnable                                      <= 0;
1000
                oIOWritePixel                           <= 0;
1001
                rResetHitFlop                           <= 0;
1002
                rHitFlopEnable                          <= 0;
1003
      oTriggerTFF             <= 0;
1004
                oSetCurrentPitch        <= 0;
1005 71 diegovalve
                oFlipMemEnabled         <= 1;
1006 76 diegovalve
                oFlipMem                                                <= 0;
1007 105 diegovalve
                oDone                   <= 0;
1008
                oResultCommited                 <= 0;
1009 18 diegovalve
                //oIncCurrentPitch        <= 0;
1010
 
1011
                NextState <= `CU_WAIT_NPU;
1012
        end
1013
        //-----------------------------------------
1014
        `CU_WAIT_NPU:
1015
        begin
1016 116 diegovalve
                //oRamBusOwner                          <= `REG_BUS_OWNED_BY_UCODE;
1017 60 diegovalve
                oCodeInstructioPointer  <= `ENTRYPOINT_INDEX_NPG;
1018 18 diegovalve
                oUCodeEnable                            <= 0;
1019
                oGFUEnable                                      <= 0;
1020
                oIOWritePixel                           <= 0;
1021
                rResetHitFlop                           <= 0;
1022
                rHitFlopEnable                          <= 0;
1023
                oTriggerTFF             <= 0;
1024
                oSetCurrentPitch        <= 0;
1025 71 diegovalve
                oFlipMemEnabled         <= 1;
1026 76 diegovalve
                oFlipMem                                                <= 0;
1027 105 diegovalve
                oDone                   <= 0;
1028
                oResultCommited                 <= 0;
1029 18 diegovalve
                //oIncCurrentPitch        <= 0;
1030
 
1031
                if ( iUCodeDone )
1032
                        NextState <= `CU_ACK_NPU;
1033
                else
1034
                        NextState <= `CU_WAIT_NPU;
1035
        end
1036 76 diegovalve
        //-----------------------------------------
1037
        /*
1038
        Next Pixel generation: here we either goto
1039
        to RGU for the next pixel, or we have no
1040
        more pixels so we are done we our picture!
1041
        */
1042 18 diegovalve
        `CU_ACK_NPU:
1043
        begin
1044 81 diegovalve
        `ifdef DEBUG_CU
1045 129 diegovalve
                $display("%d CORE: %d Control: CU_ACK_NPU\n",$time, iDebug_CoreID);
1046 18 diegovalve
        `endif
1047
 
1048 116 diegovalve
                //oRamBusOwner                          <= `REG_BUS_OWNED_BY_UCODE;
1049 60 diegovalve
                oCodeInstructioPointer  <= 0;    //*
1050 18 diegovalve
                oUCodeEnable                            <= 0;    //*
1051
                oGFUEnable                                      <= 0;
1052
                oIOWritePixel                           <= 0;
1053
                rResetHitFlop                           <= 0;
1054
                rHitFlopEnable                          <= 0;
1055
      oTriggerTFF             <= 0;
1056
                oSetCurrentPitch        <= 0;
1057 71 diegovalve
                oFlipMemEnabled         <= 1;
1058 76 diegovalve
                oFlipMem                                                <= 0;
1059 105 diegovalve
                oDone                   <= 0;
1060
                oResultCommited                 <= 0;
1061 18 diegovalve
                //oIncCurrentPitch        <= 0;
1062
 
1063 76 diegovalve
                if ( iUCodeDone  == 0 && iUCodeReturnValue == 1)
1064
                        NextState <= `CU_TRIGGER_RGU;
1065
                else if (iUCodeDone == 0 && iUCodeReturnValue == 0)
1066
                        NextState <= `CU_DONE;
1067 18 diegovalve
                else
1068
                        NextState <= `CU_ACK_NPU;
1069
 
1070
 
1071
        end
1072 76 diegovalve
        //-----------------------------------------
1073
        `CU_DONE:
1074
        begin
1075 116 diegovalve
                //oRamBusOwner                          <= `REG_BUS_OWNED_BY_UCODE;
1076 76 diegovalve
                oCodeInstructioPointer  <= 0;
1077
                oUCodeEnable                            <= 0;
1078
                oGFUEnable                                      <= 0;
1079
                oIOWritePixel                           <= 0;
1080
                rResetHitFlop                           <= 0;
1081
                rHitFlopEnable                          <= 0;
1082
      oTriggerTFF             <= 0;
1083
                oSetCurrentPitch        <= 0;
1084
                oFlipMemEnabled         <= 0;
1085 105 diegovalve
                oFlipMem                                                <= 1;
1086
                oDone                   <= 1;
1087
                oResultCommited                 <= 0;
1088 76 diegovalve
                //oIncCurrentPitch        <= 0;
1089
 
1090
 
1091
                NextState <= `CU_DONE;
1092
 
1093
        end
1094 18 diegovalve
        //-----------------------------------------
1095 63 diegovalve
        /*
1096
        Here we no longer use GFU so set Enable to zero
1097
        */
1098
        `CU_TRIGGER_USERPIXELSHADER:
1099
        begin
1100 81 diegovalve
        `ifdef DEBUG_CU
1101 129 diegovalve
                $display("%d Control: CU_TRIGGER_PSU\n",$time);
1102 63 diegovalve
        `endif
1103
 
1104 116 diegovalve
                //oRamBusOwner                          <= `REG_BUS_OWNED_BY_UCODE;
1105 63 diegovalve
                oCodeInstructioPointer  <= `ENTRYPOINT_INDEX_PIXELSHADER;
1106
                oUCodeEnable                            <= 1;
1107
                oGFUEnable                                      <= 0;//*
1108
                oIOWritePixel                           <= 0;
1109
                rResetHitFlop                           <= 0;
1110
                rHitFlopEnable                          <= 0;
1111
                oTriggerTFF             <= 0;
1112
                oSetCurrentPitch        <= 0;
1113 71 diegovalve
                oFlipMemEnabled         <= 1;
1114 76 diegovalve
                oFlipMem                                                <= 0;
1115 105 diegovalve
                oDone                   <= 0;
1116
                oResultCommited                 <= 0;
1117 63 diegovalve
                //oIncCurrentPitch        <= 0;
1118
 
1119
 
1120
                NextState <= `CU_WAIT_FOR_USERPIXELSHADER;
1121
        end
1122
        //-----------------------------------------
1123
        `CU_WAIT_FOR_USERPIXELSHADER:
1124
        begin
1125
 
1126 81 diegovalve
//      `ifdef DEBUG_CU
1127 129 diegovalve
//              $display("%d Control: CU_TRIGGER_PSU\n",$time);
1128 63 diegovalve
//      `endif
1129
 
1130 116 diegovalve
                //oRamBusOwner                          <= `REG_BUS_OWNED_BY_UCODE;
1131 63 diegovalve
                oCodeInstructioPointer  <= `ENTRYPOINT_INDEX_PIXELSHADER;
1132
                oUCodeEnable                            <= 0;
1133
                oGFUEnable                                      <= 0;
1134
                oIOWritePixel                           <= 0;
1135
                rResetHitFlop                           <= 0;
1136
                rHitFlopEnable                          <= 0;
1137
                oTriggerTFF             <= 0;
1138
                oSetCurrentPitch        <= 0;
1139 71 diegovalve
                oFlipMemEnabled         <= 1;
1140 76 diegovalve
                oFlipMem                                                <= 0;
1141 105 diegovalve
                oDone                   <= 0;
1142
                oResultCommited                 <= 0;
1143 63 diegovalve
                //oIncCurrentPitch        <= 0;
1144
 
1145
 
1146
                if ( iUCodeDone )
1147
                        NextState <= `CU_ACK_USERPIXELSHADER;
1148
                else
1149
                        NextState <= `CU_WAIT_FOR_USERPIXELSHADER;
1150
 
1151
        end
1152
        //-----------------------------------------
1153
        `CU_ACK_USERPIXELSHADER:
1154
        begin
1155 81 diegovalve
        `ifdef DEBUG_CU
1156 129 diegovalve
                $display("%d Control: CU_ACK_PSU\n",$time);
1157 63 diegovalve
        `endif
1158
 
1159 116 diegovalve
                //oRamBusOwner                          <= `REG_BUS_OWNED_BY_UCODE;
1160 63 diegovalve
                oCodeInstructioPointer  <= 0;    //*
1161
                oUCodeEnable                            <= 0;    //*
1162
                oGFUEnable                                      <= 0;
1163
                oIOWritePixel                           <= 0;
1164
                rResetHitFlop                           <= 0;
1165
                rHitFlopEnable                          <= 0;
1166
      oTriggerTFF             <= 0;
1167
                oSetCurrentPitch        <= 0;
1168 71 diegovalve
                oFlipMemEnabled         <= 1;
1169 76 diegovalve
                oFlipMem                                                <= 0;
1170 105 diegovalve
                oDone                   <= 0;
1171
                oResultCommited                 <= 1;
1172 63 diegovalve
                //oIncCurrentPitch        <= 0;
1173
 
1174
                if ( iUCodeDone  == 0)
1175 105 diegovalve
                        NextState <= `CU_TRIGGER_NPU;//`CU_TRIGGER_PCU;
1176 63 diegovalve
                else
1177
                        NextState <= `CU_ACK_USERPIXELSHADER;
1178
 
1179
 
1180
        end
1181
        //---------------------------------------------------
1182 18 diegovalve
        default:
1183
        begin
1184
 
1185 81 diegovalve
        `ifdef DEBUG_CU
1186 129 diegovalve
                $display("%d Control: ERROR Undefined State\n",$time);
1187 18 diegovalve
        `endif
1188
 
1189 116 diegovalve
                //oRamBusOwner                          <= 0;
1190 60 diegovalve
                oCodeInstructioPointer  <= 0;
1191 18 diegovalve
                oUCodeEnable                            <= 0;
1192
                oGFUEnable                                      <= 0;
1193
                oIOWritePixel                           <= 0;
1194
                rResetHitFlop                           <= 0;
1195
                rHitFlopEnable                          <= 0;
1196
      oTriggerTFF             <= 0;
1197
                oSetCurrentPitch        <= 0;
1198 71 diegovalve
                oFlipMemEnabled         <= 0;
1199 76 diegovalve
                oFlipMem                                                <= 0;
1200 105 diegovalve
                oDone                   <= 0;
1201
                oResultCommited                 <= 0;
1202 18 diegovalve
                //oIncCurrentPitch        <= 0;
1203
 
1204
                NextState <= `CU_AFTER_RESET_STATE;
1205
        end
1206
        //-----------------------------------------
1207
 
1208
        endcase
1209
 
1210
end //always    
1211
endmodule

powered by: WebSVN 2.1.0

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