URL
https://opencores.org/ocsvn/theia_gpu/theia_gpu/trunk
Subversion Repositories theia_gpu
Compare Revisions
- This comparison shows the changes necessary to convert path
/theia_gpu/branches/beta_1.1/rtl/CONTROL
- from Rev 18 to Rev 58
- ↔ Reverse comparison
Rev 18 → Rev 58
/Unit_Control.v
0,0 → 1,1048
/********************************************************************************** |
Theia, Ray Cast Programable graphic Processing Unit. |
Copyright (C) 2010 Diego Valverde (diego.valverde.g@gmail.com) |
|
This program is free software; you can redistribute it and/or |
modify it under the terms of the GNU General Public License |
as published by the Free Software Foundation; either version 2 |
of the License, or (at your option) any later version. |
|
This program is distributed in the hope that it will be useful, |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
GNU General Public License for more details. |
|
You should have received a copy of the GNU General Public License |
along with this program; if not, write to the Free Software |
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
|
***********************************************************************************/ |
/********************************************************************************** |
Description: |
|
This is the main Finite State Machine. |
|
**********************************************************************************/ |
|
`timescale 1ns / 1ps |
`include "aDefinitions.v" |
|
`define CU_AFTER_RESET_STATE 0 |
`define CU_WAIT_FOR_INITIAL_CONFIGURATION 1 |
`define CU_TRIGGER_CONFIGURATION_DATA_READ 2 |
`define CU_WAIT_FOR_CONFIG_DATA_READ 3 |
`define CU_ACK_CONFIG_DATA_READ 4 |
`define CU_PRECALCULATE_CONSTANTS 5 |
`define CU_WAIT_FOR_CONSTANT 6 |
`define CU_ACK_PRECALCULATE_CONSTANTS 7 |
`define CU_WAIT_FOR_TASK 8 |
`define CU_READ_TASK_DATA 9 |
`define CU_WAIT_TASK_DATA_READ 10 |
`define CU_ACK_TASK_DATA_READ 11 |
`define CU_TRIGGER_RGU 12 |
`define CU_WAIT_FOR_RGU 13 |
`define CU_ACK_RGU 14 |
`define CU_TRIGGER_GEO 15 |
`define CU_WAIT_FOR_GEO_SYNC 16 |
//`define CU_CHECK_AABBIU_REQUEST 17 |
`define CU_TRIGGER_TCC 17 |
//`define CU_CHECK_BIU_REQUEST 18 |
`define CU_TRIGGER_TFF 18 |
//`define CU_CHECK_GEO_DONE 19 |
`define CU_WAIT_FOR_TFF 19 |
`define CU_TRIGGER_AABBIU 20 |
`define CU_WAIT_FOR_AABBIU 21 |
`define CU_TRIGGER_BIU 22 |
`define CU_WAIT_FOR_BIU 23 |
`define CU_ACK_UCODE 24 |
`define CU_TRIGGER_PSU 25 |
`define CU_WAIT_FOR_PSU 26 |
`define CU_ACK_PSU 27 |
`define CU_TRIGGER_PCU 28 |
`define CU_WAIT_FOR_PCU 29 |
`define CU_ACK_PCU 30 |
`define CU_CHECK_HIT 31 |
`define CU_CLEAR_REGISTERS 32 |
`define CU_WAIT_CLEAR_REGISTERS 33 |
`define CU_ACK_CLEAR_REGISTERS 34 |
`define CU_TRIGGER_PSU_WITH_TEXTURE 35 |
`define WAIT_FOR_TCC 36 |
`define CU_TRIGGER_NPU 37 |
`define CU_WAIT_NPU 38 |
`define CU_ACK_NPU 39 |
`define CU_PERFORM_INTIAL_CONFIGURATION 40 |
`define CU_SET_PICTH 41 |
|
//-------------------------------------------------------------- |
module ControlUnit |
( |
|
input wire Clock, |
input wire Reset, |
input wire[15:0] iControlRegister, |
input wire iExternalBus_DataReady, |
input wire iBusUnitDone, |
output reg oGFUEnable, |
input wire iTriggerAABBIURequest, |
input wire iTriggerBIURequest, |
input wire iTriggertTCCRequest, |
output reg oUCodeEnable, |
output reg[`ROM_ADDRESS_WIDTH-1:0] oUCodeInstructioPointer, |
input wire iUCodeDone, |
input wire iUCodeReturnValue, |
input wire iGFUDone, |
input wire iGEOSync, |
output reg oTriggerTFF, |
input wire iTFFDone, |
input wire MST_I, |
output reg[2:0] oRamBusOwner, |
input wire iIODone, |
output reg oSetCurrentPitch, |
//output reg //oIncCurrentPitch, |
//output wire[`WIDTH-1:0] oPitchInitialValue, |
output reg oIOWritePixel |
|
); |
|
//Internal State Machine varibles |
reg [5:0] CurrentState; |
reg [5:0] NextState; |
integer ucode_file; |
reg rResetHitFlop,rHitFlopEnable; |
wire wHit; |
|
`ifdef DUMP_CODE |
integer log; |
|
initial |
begin |
|
$display("Opening ucode dump file....\n"); |
ucode_file = $fopen("CU.log","w"); |
end |
|
`endif |
|
|
wire[`ROM_ADDRESS_WIDTH-1:0] wAABBIUAddress; |
assign wAABBIUAddress = (iControlRegister[`CR_USER_AABBIU] == 1'b1) ? `USER_AABBIU_UCODE_ADDRESS : `AABBIU_UCODE_ADDRESS; |
|
|
//-------------------------------------------------------------- |
FFToggleOnce_1Bit FFTO1 |
( |
.Clock( Clock ), |
.Reset( rResetHitFlop ), |
.Enable( rHitFlopEnable && iUCodeDone ), |
.S( iUCodeReturnValue ), |
.Q( wHit ) |
); |
//-------------------------------------------------------------- |
|
`ifdef DEBUG |
always @ ( wHit ) |
begin |
`LOGME "*** Triangle HIT ***\n"); |
end |
`endif |
|
//Next states logic and Reset sequence |
always @(posedge Clock or posedge Reset) |
begin |
|
if (Reset) |
CurrentState <= `CU_AFTER_RESET_STATE; |
else |
CurrentState <= NextState; |
|
end |
|
//-------------------------------------------------------------- |
always @ ( * ) |
begin |
case (CurrentState) |
//----------------------------------------- |
`CU_AFTER_RESET_STATE: |
begin |
|
`ifdef DEBUG |
`LOGME"%d CU_AFTER_RESET_STATE\n",$time); |
`endif |
|
oRamBusOwner <= 0; |
oUCodeInstructioPointer <= `INITIAL_UCODE_ADDRESS; |
oGFUEnable <= 0; |
oUCodeEnable <= 0; |
oIOWritePixel <= 0; |
rResetHitFlop <= 1; |
rHitFlopEnable <= 0; |
oTriggerTFF <= 0; |
oSetCurrentPitch <= 1; |
//oIncCurrentPitch <= 0; |
|
NextState <= `CU_WAIT_FOR_INITIAL_CONFIGURATION; |
|
end |
//----------------------------------------- |
|
`CU_WAIT_FOR_INITIAL_CONFIGURATION: |
begin |
$display("CU_WAIT_FOR_INITIAL_CONFIGURATION"); |
// `ifdef DEBUG |
// `LOGME"%d Control: CU_WAIT_FOR_INITIAL_CONFIGURATION\n",$time); |
// `endif |
|
oRamBusOwner <= 0; |
oUCodeInstructioPointer <= 0; |
oGFUEnable <= 0; |
oUCodeEnable <= 0; |
oIOWritePixel <= 0; |
rResetHitFlop <= 1; |
rHitFlopEnable <= 0; |
oTriggerTFF <= 0; |
oSetCurrentPitch <= 0; |
//oIncCurrentPitch <= 0; |
|
if ( MST_I ) |
NextState <= `CU_PERFORM_INTIAL_CONFIGURATION;//`CU_WAIT_FOR_CONFIG_DATA_READ; |
else |
NextState <= `CU_WAIT_FOR_INITIAL_CONFIGURATION; |
|
|
end |
//----------------------------------------- |
`CU_PERFORM_INTIAL_CONFIGURATION: |
begin |
oRamBusOwner <= 0; |
oUCodeInstructioPointer <= 0; |
oGFUEnable <= 0; |
oUCodeEnable <= 0; |
oIOWritePixel <= 0; |
rResetHitFlop <= 1; |
rHitFlopEnable <= 0; |
oTriggerTFF <= 0; |
oSetCurrentPitch <= 0; |
//oIncCurrentPitch <= 0; |
|
if ( MST_I ) |
NextState <= `CU_PERFORM_INTIAL_CONFIGURATION;//`CU_WAIT_FOR_CONFIG_DATA_READ; |
else |
NextState <= `CU_CLEAR_REGISTERS; |
|
end |
//----------------------------------------- |
`CU_CLEAR_REGISTERS: |
begin |
`ifdef DEBUG |
`LOGME"%d CU_CLEAR_REGISTERS\n",$time); |
`endif |
|
oRamBusOwner <= `REG_BUS_OWNED_BY_UCODE; |
oUCodeInstructioPointer <= `INITIAL_UCODE_ADDRESS; |
oGFUEnable <= 0; |
oUCodeEnable <= 1; //* |
oIOWritePixel <= 0; |
rResetHitFlop <= 0; |
rHitFlopEnable <= 0; |
oTriggerTFF <= 0; |
oSetCurrentPitch <= 0; |
//oIncCurrentPitch <= 0; |
|
NextState <= `CU_WAIT_CLEAR_REGISTERS; |
end |
//----------------------------------------- |
`CU_WAIT_CLEAR_REGISTERS: |
begin |
// `ifdef DEBUG |
// `LOGME"%d CU_WAIT_CLEAR_REGISTERS\n",$time); |
// `endif |
|
oRamBusOwner <= `REG_BUS_OWNED_BY_UCODE; |
oUCodeInstructioPointer <= `INITIAL_UCODE_ADDRESS; |
oGFUEnable <= 0; |
oUCodeEnable <= 0; |
oIOWritePixel <= 0; |
rResetHitFlop <= 0; |
rHitFlopEnable <= 0; |
oTriggerTFF <= 0; |
oSetCurrentPitch <= 0; |
//oIncCurrentPitch <= 0; |
|
if ( iUCodeDone ) |
NextState <= `CU_ACK_CLEAR_REGISTERS; |
else |
NextState <= `CU_WAIT_CLEAR_REGISTERS; |
|
end |
//----------------------------------------- |
`CU_ACK_CLEAR_REGISTERS: |
begin |
`ifdef DEBUG |
`LOGME"%d CU_ACK_CLEAR_REGISTERS\n", $time); |
`endif |
|
oRamBusOwner <= 0; |
oUCodeInstructioPointer <= 0; |
oGFUEnable <= 0; |
oUCodeEnable <= 0; //* |
oIOWritePixel <= 0; |
rResetHitFlop <= 0; |
rHitFlopEnable <= 0; |
oTriggerTFF <= 0; |
oSetCurrentPitch <= 0; |
//oIncCurrentPitch <= 0; |
|
NextState <= `CU_WAIT_FOR_CONFIG_DATA_READ; |
end |
|
|
|
//----------------------------------------- |
`CU_WAIT_FOR_CONFIG_DATA_READ: |
begin |
$display("CU_WAIT_FOR_CONFIG_DATA_READ"); |
// `ifdef DEBUG |
// `LOGME"%d Control: CU_WAIT_FOR_CONFIG_DATA_READ\n",$time); |
// `endif |
|
oRamBusOwner <= 0;//`REG_BUS_OWNED_BY_BCU; |
oUCodeInstructioPointer <= 0; |
oGFUEnable <= 0; |
oUCodeEnable <= 0; |
oIOWritePixel <= 0; |
rResetHitFlop <= 0; |
rHitFlopEnable <= 0; |
oTriggerTFF <= 0; |
oSetCurrentPitch <= 0; |
//oIncCurrentPitch <= 0; |
|
if ( MST_I == 0 ) |
NextState <= `CU_PRECALCULATE_CONSTANTS; |
else |
NextState <= `CU_WAIT_FOR_CONFIG_DATA_READ; |
|
end |
//----------------------------------------- |
`CU_PRECALCULATE_CONSTANTS: |
begin |
$display("CU_PRECALCULATE_CONSTANTS"); |
`ifdef DEBUG |
`LOGME"%d Control: CU_PRECALCULATE_CONSTANTS\n", $time); |
`endif |
|
oRamBusOwner <= `REG_BUS_OWNED_BY_UCODE; |
oUCodeInstructioPointer <= `CPPU_UCODE_ADDRESS; |
oGFUEnable <= 0; |
oUCodeEnable <= 1; //* |
oIOWritePixel <= 0; |
rResetHitFlop <= 0; |
rHitFlopEnable <= 0; |
oTriggerTFF <= 0; |
oSetCurrentPitch <= 0; |
//oIncCurrentPitch <= 0; |
|
NextState <= `CU_WAIT_FOR_CONSTANT; |
|
end |
//----------------------------------------- |
`CU_WAIT_FOR_CONSTANT: |
begin |
// `ifdef DEBUG |
// `LOGME"%d Control: CU_WAIT_FOR_CONSTANT\n", $time); |
// `endif |
|
|
oRamBusOwner <= `REG_BUS_OWNED_BY_UCODE; |
oUCodeInstructioPointer <= `CPPU_UCODE_ADDRESS; |
oGFUEnable <= 0; |
oUCodeEnable <= 0; //* |
oIOWritePixel <= 0; |
rResetHitFlop <= 0; |
rHitFlopEnable <= 0; |
oTriggerTFF <= 0; |
oSetCurrentPitch <= 0; |
//oIncCurrentPitch <= 0; |
|
if ( iUCodeDone ) |
NextState <= `CU_ACK_PRECALCULATE_CONSTANTS; |
else |
NextState <= `CU_WAIT_FOR_CONSTANT; |
|
end |
//----------------------------------------- |
`CU_ACK_PRECALCULATE_CONSTANTS: |
begin |
$display("CU_ACK_PRECALCULATE_CONSTANTS"); |
`ifdef DEBUG |
`LOGME"%d Control: CU_ACK_PRECALCULATE_CONSTANTS\n", $time); |
`endif |
|
|
oRamBusOwner <= 0;//`REG_BUS_OWNED_BY_BCU; |
oUCodeInstructioPointer <= 0; |
oGFUEnable <= 0; |
oUCodeEnable <= 0; //* |
oIOWritePixel <= 0; |
rResetHitFlop <= 0; |
rHitFlopEnable <= 0; |
oTriggerTFF <= 0; |
oSetCurrentPitch <= 0; |
//oIncCurrentPitch <= 0; |
|
NextState <= `CU_TRIGGER_RGU;//CU_WAIT_FOR_TASK; |
|
end |
//----------------------------------------- |
`CU_TRIGGER_RGU: |
begin |
|
`ifdef DEBUG |
`LOGME"%d Control: CU_TRIGGER_RGU\n",$time); |
`endif |
|
oRamBusOwner <= `REG_BUS_OWNED_BY_UCODE; |
oUCodeInstructioPointer <= `RGU_UCODE_ADDRESS; |
oGFUEnable <= 0; |
oUCodeEnable <= 1; //* |
oIOWritePixel <= 0; |
rResetHitFlop <= 0; |
rHitFlopEnable <= 0; |
oTriggerTFF <= 0; |
oSetCurrentPitch <= 0; |
//oIncCurrentPitch <= 0; |
|
NextState <= `CU_WAIT_FOR_RGU; |
end |
//----------------------------------------- |
`CU_WAIT_FOR_RGU: |
begin |
|
// `ifdef DEBUG |
// `LOGME"%d Control: CU_WAIT_FOR_RGU\n",$time); |
// `endif |
|
oRamBusOwner <= `REG_BUS_OWNED_BY_UCODE; |
oUCodeInstructioPointer <= 0; |
oGFUEnable <= 0; |
oUCodeEnable <= 0; |
oIOWritePixel <= 0; |
rResetHitFlop <= 0; |
rHitFlopEnable <= 0; |
oTriggerTFF <= 0; |
oSetCurrentPitch <= 0; |
//oIncCurrentPitch <= 0; |
|
if ( iUCodeDone ) |
NextState <= `CU_ACK_RGU; |
else |
NextState <= `CU_WAIT_FOR_RGU; |
end |
//----------------------------------------- |
`CU_ACK_RGU: |
begin |
|
`ifdef DEBUG |
`LOGME"%d Control: CU_ACK_RGU\n",$time); |
`endif |
oRamBusOwner <= `REG_BUS_OWNED_BY_UCODE; |
oUCodeInstructioPointer <= 0; |
oGFUEnable <= 0; |
oUCodeEnable <= 0; //* |
oIOWritePixel <= 0; |
rResetHitFlop <= 0; |
rHitFlopEnable <= 0; |
oTriggerTFF <= 0; |
oSetCurrentPitch <= 0; |
//oIncCurrentPitch <= 0; |
|
if ( iUCodeDone == 0) |
NextState <= `CU_TRIGGER_GEO; |
else |
NextState <= `CU_ACK_RGU; |
|
end |
//----------------------------------------- |
`CU_TRIGGER_GEO: |
begin |
|
`ifdef DEBUG |
`LOGME"%d Control: CU_TRIGGER_GEO\n",$time); |
`endif |
|
oRamBusOwner <= `REG_BUS_OWNED_BY_GFU; |
oUCodeInstructioPointer <= 0; |
oUCodeEnable <= 0; |
oGFUEnable <= 1; |
oIOWritePixel <= 0; |
rResetHitFlop <= 1; //* |
rHitFlopEnable <= 0; |
oTriggerTFF <= 0; |
oSetCurrentPitch <= 0; |
//oIncCurrentPitch <= 0; |
|
NextState <= `CU_WAIT_FOR_GEO_SYNC; |
|
end |
//----------------------------------------- |
`CU_WAIT_FOR_GEO_SYNC: |
begin |
|
`ifdef DEBUG |
`LOGME"%d Control: CU_WAIT_FOR_GEO_SYNC\n",$time); |
`endif |
|
oRamBusOwner <= `REG_BUS_OWNED_BY_GFU; |
oUCodeInstructioPointer <= 0; |
oUCodeEnable <= 0; |
oGFUEnable <= 0; //Change AUg 15 |
oIOWritePixel <= 0; |
rResetHitFlop <= 0; |
rHitFlopEnable <= 0; |
oTriggerTFF <= 0; |
oSetCurrentPitch <= 0; |
//oIncCurrentPitch <= 0; |
|
if (iGEOSync & iTriggerAABBIURequest ) |
NextState <= `CU_TRIGGER_AABBIU; |
else if (iGEOSync & iTriggerBIURequest) |
NextState <= `CU_TRIGGER_BIU; |
else if (iGEOSync & iTriggertTCCRequest ) |
NextState <= `CU_TRIGGER_TCC; |
else if (iGEOSync & iGFUDone ) |
NextState <= `CU_CHECK_HIT; |
else |
NextState <= `CU_WAIT_FOR_GEO_SYNC; |
|
end |
//----------------------------------------- |
`CU_TRIGGER_TCC: |
begin |
//$display("CU_TRIGGER_TCC"); |
`ifdef DEBUG |
`LOGME"%d Control: CU_TRIGGER_TCC\n",$time); |
`endif |
|
oRamBusOwner <= `REG_BUS_OWNED_BY_UCODE; |
oUCodeInstructioPointer <= `TCC_UCODE_ADDRESS; |
oUCodeEnable <= 1; //* |
oGFUEnable <= 0; |
oIOWritePixel <= 0; |
rResetHitFlop <= 0; |
rHitFlopEnable <= 0; |
oTriggerTFF <= 0; |
oSetCurrentPitch <= 0; |
//oIncCurrentPitch <= 0; |
|
NextState <= `WAIT_FOR_TCC; |
end |
//----------------------------------------- |
`WAIT_FOR_TCC: |
begin |
|
//$display("WAIT_FOR_TCC"); |
oRamBusOwner <= `REG_BUS_OWNED_BY_UCODE; |
oUCodeInstructioPointer <= `TCC_UCODE_ADDRESS; |
oUCodeEnable <= 0; //* |
oGFUEnable <= 0; |
oIOWritePixel <= 0; |
rResetHitFlop <= 0; |
rHitFlopEnable <= 0; |
oTriggerTFF <= 0; |
oSetCurrentPitch <= 0; |
//oIncCurrentPitch <= 0; |
|
if ( iUCodeDone ) |
NextState <= `CU_ACK_UCODE; |
else |
NextState <= `WAIT_FOR_TCC; |
|
end |
//----------------------------------------- |
/* |
Was there any hit at all? |
At this point, all the triangles in the list |
have been traversed looking for a hit with our ray. |
There are 3 possibilities: |
1) The was not a single hit, then just paint a black |
pixel on the screen and send it via PCU. |
2)There was a hit and Texturing is not enabled, then trigger the PSU with |
no texturing |
2) There was a hit and Texturing is enabled, then fetch the texture |
values corresponding to the triangle that we hitted. |
*/ |
`CU_CHECK_HIT: |
begin |
|
`ifdef DEBUG |
`LOGME"%d Control: CU_CHECK_HIT\n",$time); |
`endif |
|
oRamBusOwner <= `REG_BUS_OWNED_BY_GFU; |
oUCodeInstructioPointer <= 0; |
oUCodeEnable <= 0; |
oGFUEnable <= 0; ///CHANGED Aug 15 |
oIOWritePixel <= 0; |
rResetHitFlop <= 0; |
rHitFlopEnable <= 0; |
oTriggerTFF <= 0; |
oSetCurrentPitch <= 0; |
//oIncCurrentPitch <= 0; |
|
if (wHit && !iControlRegister[`CR_EN_TEXTURE] ) |
NextState <= `CU_TRIGGER_PSU; |
else if (wHit && iControlRegister[`CR_EN_TEXTURE]) |
NextState <= `CU_TRIGGER_TFF; //Fetch the texture values from external RAM |
else |
NextState <= `CU_TRIGGER_PCU; //Make sure contents of the OUT_REG are ZERo! |
end |
//----------------------------------------- |
/* |
Get the texture values from external RAM. |
GFU already took care of calculating the correct |
texture addresses for the 4 coordinates so now lets |
just ask for them. |
*/ |
`CU_TRIGGER_TFF: |
begin |
`ifdef DEBUG |
`LOGME"%d Control: CU_TRIGGER_TFF\n",$time); |
`endif |
|
//$display("CU_TRIGGER_TFF"); |
|
oRamBusOwner <= `REG_BUS_OWNED_BY_GFU; |
oUCodeInstructioPointer <= 0; |
oUCodeEnable <= 0; |
oGFUEnable <= 1; |
oIOWritePixel <= 0; |
rResetHitFlop <= 0; |
rHitFlopEnable <= 0; |
oTriggerTFF <= 1; //* |
oSetCurrentPitch <= 0; |
//oIncCurrentPitch <= 0; |
|
NextState <= `CU_WAIT_FOR_TFF; |
end |
//----------------------------------------- |
`CU_WAIT_FOR_TFF: |
begin |
|
oRamBusOwner <= `REG_BUS_OWNED_BY_GFU; |
oUCodeInstructioPointer <= 0; |
oUCodeEnable <= 0; |
oGFUEnable <= 0; //Changed Aug 14 |
oIOWritePixel <= 0; |
rResetHitFlop <= 0; |
rHitFlopEnable <= 0; |
oTriggerTFF <= 0; |
oSetCurrentPitch <= 0; |
//oIncCurrentPitch <= 0; |
|
if (iTFFDone) |
NextState <= `CU_TRIGGER_PSU_WITH_TEXTURE; |
else |
NextState <= `CU_WAIT_FOR_TFF; |
|
end |
//----------------------------------------- |
`CU_TRIGGER_PSU_WITH_TEXTURE: |
begin |
|
`ifdef DEBUG |
`LOGME"%d Control: CU_TRIGGER_PSU_WITH_TEXTURE\n",$time); |
`endif |
|
oRamBusOwner <= `REG_BUS_OWNED_BY_UCODE; |
oUCodeInstructioPointer <= `PSU_UCODE_ADRESS2; |
oUCodeEnable <= 1; |
oGFUEnable <= 0; |
oIOWritePixel <= 0; |
rResetHitFlop <= 0; |
rHitFlopEnable <= 0; |
oTriggerTFF <= 0; |
oSetCurrentPitch <= 0; |
//oIncCurrentPitch <= 0; |
|
NextState <= `CU_WAIT_FOR_PSU; |
end |
//----------------------------------------- |
`CU_TRIGGER_AABBIU: |
begin |
|
`ifdef DEBUG |
`LOGME"%d Control: CU_TRIGGER_AABBIU\n",$time); |
`endif |
// $stop(); |
oRamBusOwner <= wAABBIUAddress;//`REG_BUS_OWNED_BY_UCODE; |
|
oUCodeInstructioPointer <=`AABBIU_UCODE_ADDRESS; |
oUCodeEnable <= 1; |
oGFUEnable <= 1; |
oIOWritePixel <= 0; |
rResetHitFlop <= 0; |
rHitFlopEnable <= 0; |
oTriggerTFF <= 0; |
oSetCurrentPitch <= 0; |
//oIncCurrentPitch <= 0; |
|
NextState <= `CU_WAIT_FOR_AABBIU; |
end |
//----------------------------------------- |
`CU_WAIT_FOR_AABBIU: |
begin |
|
|
// `ifdef DEBUG |
// `LOGME"%d Control: CU_WAIT_FOR_AABBIU\n",$time); |
// `endif |
|
|
// $display("iUCodeDone",iUCodeDone); |
|
oRamBusOwner <= `REG_BUS_OWNED_BY_UCODE; |
oUCodeInstructioPointer <= `AABBIU_UCODE_ADDRESS; |
oUCodeEnable <= 0; |
oGFUEnable <= 1; |
oIOWritePixel <= 0; |
rResetHitFlop <= 0; |
rHitFlopEnable <= 0; |
oTriggerTFF <= 0; |
oSetCurrentPitch <= 0; |
//oIncCurrentPitch <= 0; |
|
if ( iUCodeDone ) |
begin |
// $display("iUCodeDone\n",iUCodeDone); |
// $stop(); |
NextState <= `CU_ACK_UCODE; |
end |
else |
NextState <= `CU_WAIT_FOR_AABBIU; |
end |
//----------------------------------------- |
`CU_TRIGGER_BIU: |
begin |
`ifdef DEBUG |
`LOGME"%d Control: CU_TRIGGER_BIU\n",$time); |
`endif |
|
oRamBusOwner <= `REG_BUS_OWNED_BY_UCODE; |
oUCodeInstructioPointer <= `BIU_UCODE_ADDRESS; |
oUCodeEnable <= 1; |
oGFUEnable <= 1; |
oIOWritePixel <= 0; |
rResetHitFlop <= 0;//1; |
rHitFlopEnable <= 1; |
oTriggerTFF <= 0; |
oSetCurrentPitch <= 0; |
//oIncCurrentPitch <= 0; |
// $stop(); |
|
NextState <= `CU_WAIT_FOR_BIU; |
|
end |
//----------------------------------------- |
`CU_WAIT_FOR_BIU: |
begin |
// `ifdef DEBUG |
// `LOGME"%d Control: CU_WAIT_FOR_BIU\n",$time); |
// `endif |
|
oRamBusOwner <= `REG_BUS_OWNED_BY_UCODE; |
oUCodeInstructioPointer <= `BIU_UCODE_ADDRESS; |
oUCodeEnable <= 0; |
oGFUEnable <= 1; |
oIOWritePixel <= 0; |
rResetHitFlop <= 0; |
rHitFlopEnable <= 1; |
oTriggerTFF <= 0; |
oSetCurrentPitch <= 0; |
//oIncCurrentPitch <= 0; |
|
if ( iUCodeDone ) |
NextState <= `CU_ACK_UCODE; |
else |
NextState <= `CU_WAIT_FOR_BIU; |
end |
//----------------------------------------- |
/* |
ACK UCODE by setting oUCodeEnable = 0 |
*/ |
`CU_ACK_UCODE: |
begin |
`ifdef DEBUG |
`LOGME"%d Control: CU_ACK_UCODE\n",$time); |
`endif |
|
oRamBusOwner <= `REG_BUS_OWNED_BY_GFU; |
oUCodeInstructioPointer <= 0; //* |
oUCodeEnable <= 0; //* |
oGFUEnable <= 0; //Changed Aug 15 |
oIOWritePixel <= 0; |
rResetHitFlop <= 0; |
rHitFlopEnable <= 0; |
oTriggerTFF <= 0; |
oSetCurrentPitch <= 0; |
//oIncCurrentPitch <= 0; |
|
// $stop(); |
|
if ( iUCodeDone == 0 ) |
NextState <= `CU_WAIT_FOR_GEO_SYNC; |
else |
NextState <= `CU_ACK_UCODE; |
end |
//----------------------------------------- |
/* |
Here we no longer use GFU so set Enable to zero |
*/ |
`CU_TRIGGER_PSU: |
begin |
`ifdef DEBUG |
`LOGME"%d Control: CU_TRIGGER_PSU\n",$time); |
`endif |
|
oRamBusOwner <= `REG_BUS_OWNED_BY_UCODE; |
oUCodeInstructioPointer <= `PSU_UCODE_ADRESS; |
oUCodeEnable <= 1; |
oGFUEnable <= 0;//* |
oIOWritePixel <= 0; |
rResetHitFlop <= 0; |
rHitFlopEnable <= 0; |
oTriggerTFF <= 0; |
oSetCurrentPitch <= 0; |
//oIncCurrentPitch <= 0; |
|
|
NextState <= `CU_WAIT_FOR_PSU; |
end |
//----------------------------------------- |
`CU_WAIT_FOR_PSU: |
begin |
|
// `ifdef DEBUG |
// `LOGME"%d Control: CU_TRIGGER_PSU\n",$time); |
// `endif |
|
oRamBusOwner <= `REG_BUS_OWNED_BY_UCODE; |
oUCodeInstructioPointer <= `PSU_UCODE_ADRESS; |
oUCodeEnable <= 0; |
oGFUEnable <= 0; |
oIOWritePixel <= 0; |
rResetHitFlop <= 0; |
rHitFlopEnable <= 0; |
oTriggerTFF <= 0; |
oSetCurrentPitch <= 0; |
//oIncCurrentPitch <= 0; |
|
|
if ( iUCodeDone ) |
NextState <= `CU_ACK_PSU; |
else |
NextState <= `CU_WAIT_FOR_PSU; |
|
end |
//----------------------------------------- |
`CU_ACK_PSU: |
begin |
`ifdef DEBUG |
`LOGME"%d Control: CU_ACK_PSU\n",$time); |
`endif |
|
oRamBusOwner <= `REG_BUS_OWNED_BY_UCODE; |
oUCodeInstructioPointer <= 0; //* |
oUCodeEnable <= 0; //* |
oGFUEnable <= 0; |
oIOWritePixel <= 0; |
rResetHitFlop <= 0; |
rHitFlopEnable <= 0; |
oTriggerTFF <= 0; |
oSetCurrentPitch <= 0; |
//oIncCurrentPitch <= 0; |
|
if ( iUCodeDone == 0) |
NextState <= `CU_TRIGGER_PCU; |
else |
NextState <= `CU_ACK_PSU; |
|
|
end |
//----------------------------------------- |
/* |
Trigger the Pixel Commit. |
*/ |
`CU_TRIGGER_PCU: |
begin |
|
`ifdef DEBUG |
`LOGME"%d Control: CU_TRIGGER_PCU\n",$time); |
`endif |
|
oRamBusOwner <= `REG_BUS_OWNED_BY_GFU; |
oUCodeInstructioPointer <= 0; //* |
oUCodeEnable <= 0; //* |
oGFUEnable <= 0; |
oIOWritePixel <= 1; //* |
rResetHitFlop <= 0; |
rHitFlopEnable <= 0; |
oTriggerTFF <= 0; |
oSetCurrentPitch <= 0; |
//oIncCurrentPitch <= 0; |
|
|
NextState <= `CU_SET_PICTH; |
|
end |
//----------------------------------------- |
`CU_SET_PICTH: |
begin |
oRamBusOwner <= `REG_BUS_OWNED_BY_GFU; |
oUCodeInstructioPointer <= 0; //* |
oUCodeEnable <= 0; //* |
oGFUEnable <= 0; |
oIOWritePixel <= 1; //* |
rResetHitFlop <= 0; |
rHitFlopEnable <= 0; |
oTriggerTFF <= 0; |
oSetCurrentPitch <= 1; //* |
//oIncCurrentPitch <= 0; |
|
|
NextState <= `CU_WAIT_FOR_PCU; |
end |
//----------------------------------------- |
`CU_WAIT_FOR_PCU: |
begin |
|
// `ifdef DEBUG |
// `LOGME"%d Control: CU_WAIT_FOR_PCU\n",$time); |
// `endif |
|
oRamBusOwner <= `REG_BUS_OWNED_BY_GFU; |
oUCodeInstructioPointer <= 0; //* |
oUCodeEnable <= 0; //* |
oGFUEnable <= 0; |
oIOWritePixel <= 1; |
rResetHitFlop <= 0; |
rHitFlopEnable <= 0; |
oTriggerTFF <= 0; |
oSetCurrentPitch <= 0; |
//oIncCurrentPitch <= 0; |
|
if ( iIODone ) |
NextState <= `CU_ACK_PCU; |
else |
NextState <= `CU_WAIT_FOR_PCU; |
|
end |
//----------------------------------------- |
`CU_ACK_PCU: |
begin |
|
`ifdef DEBUG |
`LOGME"%d Control: CU_ACK_PCU\n",$time); |
`endif |
oRamBusOwner <= `REG_BUS_OWNED_BY_GFU; |
oUCodeInstructioPointer <= 0; //* |
oUCodeEnable <= 0; //* |
oGFUEnable <= 0; |
oIOWritePixel <= 0; |
rResetHitFlop <= 0; |
rHitFlopEnable <= 0; |
oTriggerTFF <= 0; |
oSetCurrentPitch <= 0; |
//oIncCurrentPitch <= 0; |
|
NextState <= `CU_TRIGGER_NPU; |
|
end |
//----------------------------------------- |
`CU_TRIGGER_NPU: //Next Pixel Unit |
begin |
`ifdef DEBUG |
`LOGME"%d Control: CU_TRIGGER_NPU\n",$time); |
`endif |
oRamBusOwner <= `REG_BUS_OWNED_BY_UCODE; |
oUCodeInstructioPointer <= `NPG_UCODE_ADDRESS; //* |
oUCodeEnable <= 1; //* |
oGFUEnable <= 0; |
oIOWritePixel <= 0; |
rResetHitFlop <= 0; |
rHitFlopEnable <= 0; |
oTriggerTFF <= 0; |
oSetCurrentPitch <= 0; |
//oIncCurrentPitch <= 0; |
|
NextState <= `CU_WAIT_NPU; |
end |
//----------------------------------------- |
`CU_WAIT_NPU: |
begin |
oRamBusOwner <= `REG_BUS_OWNED_BY_UCODE; |
oUCodeInstructioPointer <= `NPG_UCODE_ADDRESS; |
oUCodeEnable <= 0; |
oGFUEnable <= 0; |
oIOWritePixel <= 0; |
rResetHitFlop <= 0; |
rHitFlopEnable <= 0; |
oTriggerTFF <= 0; |
oSetCurrentPitch <= 0; |
//oIncCurrentPitch <= 0; |
|
if ( iUCodeDone ) |
NextState <= `CU_ACK_NPU; |
else |
NextState <= `CU_WAIT_NPU; |
end |
//----------------------------------------- |
`CU_ACK_NPU: |
begin |
`ifdef DEBUG |
`LOGME"%d Control: CU_ACK_PSU\n",$time); |
`endif |
|
oRamBusOwner <= `REG_BUS_OWNED_BY_UCODE; |
oUCodeInstructioPointer <= 0; //* |
oUCodeEnable <= 0; //* |
oGFUEnable <= 0; |
oIOWritePixel <= 0; |
rResetHitFlop <= 0; |
rHitFlopEnable <= 0; |
oTriggerTFF <= 0; |
oSetCurrentPitch <= 0; |
//oIncCurrentPitch <= 0; |
|
if ( iUCodeDone == 0) |
NextState <= `CU_TRIGGER_RGU; |
else |
NextState <= `CU_ACK_NPU; |
|
|
end |
//----------------------------------------- |
default: |
begin |
|
`ifdef DEBUG |
`LOGME"%d Control: ERRO Undefined State\n",$time); |
`endif |
|
oRamBusOwner <= 0; |
oUCodeInstructioPointer <= 0; |
oUCodeEnable <= 0; |
oGFUEnable <= 0; |
oIOWritePixel <= 0; |
rResetHitFlop <= 0; |
rHitFlopEnable <= 0; |
oTriggerTFF <= 0; |
oSetCurrentPitch <= 0; |
//oIncCurrentPitch <= 0; |
|
NextState <= `CU_AFTER_RESET_STATE; |
end |
//----------------------------------------- |
|
endcase |
|
end //always |
endmodule |