/**********************************************************************************
|
/**********************************************************************************
|
Theaia, Ray Cast Programable graphic Processing Unit.
|
Theaia, Ray Cast Programable graphic Processing Unit.
|
Copyright (C) 2009 Diego Valverde (diego.valverde.g@gmail.com)
|
Copyright (C) 2009 Diego Valverde (diego.valverde.g@gmail.com)
|
|
|
This program is free software; you can redistribute it and/or
|
This program is free software; you can redistribute it and/or
|
modify it under the terms of the GNU General Public License
|
modify it under the terms of the GNU General Public License
|
as published by the Free Software Foundation; either version 2
|
as published by the Free Software Foundation; either version 2
|
of the License, or (at your option) any later version.
|
of the License, or (at your option) any later version.
|
|
|
This program is distributed in the hope that it will be useful,
|
This program is distributed in the hope that it will be useful,
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
GNU General Public License for more details.
|
GNU General Public License for more details.
|
|
|
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
along with this program; if not, write to the Free Software
|
along with this program; if not, write to the Free Software
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
|
***********************************************************************************/
|
***********************************************************************************/
|
|
|
|
|
/*******************************************************************************
|
/*******************************************************************************
|
Module Description:
|
Module Description:
|
|
|
This module defines constants that are going to be used
|
This module defines constants that are going to be used
|
all over the code. By know you have may noticed that all
|
all over the code. By know you have may noticed that all
|
constants are pre-compilation define directives. This is
|
constants are pre-compilation define directives. This is
|
for simulation perfomance reasons mainly.
|
for simulation perfomance reasons mainly.
|
*******************************************************************************/
|
*******************************************************************************/
|
|
|
|
|
//---------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------
|
//Verilog provides a `default_nettype none compiler directive. When
|
//Verilog provides a `default_nettype none compiler directive. When
|
//this directive is set, implicit data types are disabled, which will make any
|
//this directive is set, implicit data types are disabled, which will make any
|
//undeclared signal name a syntax error.This is very usefull to avoid annoying
|
//undeclared signal name a syntax error.This is very usefull to avoid annoying
|
//automatic 1 bit long wire declaration where you don't want them to be!
|
//automatic 1 bit long wire declaration where you don't want them to be!
|
`default_nettype none
|
`default_nettype none
|
//---------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------
|
//Defines the Scale. This very important because it sets the fixed point precsision.
|
//Defines the Scale. This very important because it sets the fixed point precsision.
|
//The Scale defines the number bits that are used as the decimal part of the number.
|
//The Scale defines the number bits that are used as the decimal part of the number.
|
//The code has been written in such a way that allows you to change the value of the
|
//The code has been written in such a way that allows you to change the value of the
|
//Scale, so that it is possible to experimet with different scenarios. SCALE can be
|
//Scale, so that it is possible to experimet with different scenarios. SCALE can be
|
//no smaller that 1 and no bigger that WIDTH.
|
//no smaller that 1 and no bigger that WIDTH.
|
`define SCALE 17
|
`define SCALE 17
|
|
|
//The next 2 defines the length of the registers, buses and other structures,
|
//The next 2 defines the length of the registers, buses and other structures,
|
//do not change this valued unless you really know what you are doing (seriously!)
|
//do not change this valued unless you really know what you are doing (seriously!)
|
`define WIDTH 32
|
`define WIDTH 32
|
`define WB_WIDTH 32 //width of wish-bone buses
|
`define WB_WIDTH 32 //width of wish-bone buses
|
`define LONG_WIDTH 64
|
`define LONG_WIDTH 64
|
|
|
`define WB_SIMPLE_READ_CYCLE 0
|
`define WB_SIMPLE_READ_CYCLE 0
|
`define WB_SIMPLE_WRITE_CYCLE 1
|
`define WB_SIMPLE_WRITE_CYCLE 1
|
//---------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------
|
//Next are the constants that define the size of the instructions.
|
//Next are the constants that define the size of the instructions.
|
//instructions are formed like this:
|
//instructions are formed like this:
|
// Tupe I:
|
// Tupe I:
|
// Operand (of size INSTRUCTION_OP_LENGTH )
|
// Operand (of size INSTRUCTION_OP_LENGTH )
|
// DestinationAddr (of size DATA_ADDRESS_WIDTH )
|
// DestinationAddr (of size DATA_ADDRESS_WIDTH )
|
// SourceAddrr1 (of size DATA_ADDRESS_WIDTH )
|
// SourceAddrr1 (of size DATA_ADDRESS_WIDTH )
|
// SourceAddrr2 (of size DATA_ADDRESS_WIDTH )
|
// SourceAddrr2 (of size DATA_ADDRESS_WIDTH )
|
//Type II:
|
//Type II:
|
// Operand (of size INSTRUCTION_OP_LENGTH )
|
// Operand (of size INSTRUCTION_OP_LENGTH )
|
// DestinationAddr (of size DATA_ADDRESS_WIDTH )
|
// DestinationAddr (of size DATA_ADDRESS_WIDTH )
|
// InmeadiateValue (of size WIDTH = DATA_ADDRESS_WIDTH * 2 )
|
// InmeadiateValue (of size WIDTH = DATA_ADDRESS_WIDTH * 2 )
|
//You can play around with the size of instuctions, but keep
|
//You can play around with the size of instuctions, but keep
|
//in mind that Bits 3 and 4 of the Operand have a special meaning
|
//in mind that Bits 3 and 4 of the Operand have a special meaning
|
//that is used for the jump familiy of instructions (see Documentation).
|
//that is used for the jump familiy of instructions (see Documentation).
|
//Also the MSB of Operand is used by the decoder to distinguish
|
//Also the MSB of Operand is used by the decoder to distinguish
|
//between Type I and Type II instructions.
|
//between Type I and Type II instructions.
|
`define INSTRUCTION_WIDTH 64//55
|
`define INSTRUCTION_WIDTH 64//55
|
`define INSTRUCTION_OP_LENGTH 16//7
|
`define INSTRUCTION_OP_LENGTH 16//7
|
`define INSTRUCTION_IMM_BIT 6 //don't change this!
|
`define INSTRUCTION_IMM_BIT 6 //don't change this!
|
|
|
//Defines the Lenght of Memory blocks
|
//Defines the Lenght of Memory blocks
|
`define DATA_ROW_WIDTH 96
|
`define DATA_ROW_WIDTH 96
|
`define DATA_ADDRESS_WIDTH 16
|
`define DATA_ADDRESS_WIDTH 16
|
`define ROM_ADDRESS_WIDTH 16
|
`define ROM_ADDRESS_WIDTH 16
|
|
|
//---------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------
|
//Defines the ucode memory entry point for the various ucode routines
|
//Defines the ucode memory entry point for the various ucode routines
|
`define INITIAL_UCODE_ADDRESS `ROM_ADDRESS_WIDTH'd0
|
`define INITIAL_UCODE_ADDRESS `ROM_ADDRESS_WIDTH'd0
|
`define CPPU_UCODE_ADDRESS `ROM_ADDRESS_WIDTH'd14
|
`define CPPU_UCODE_ADDRESS `ROM_ADDRESS_WIDTH'd14
|
`define RGU_UCODE_ADDRESS `ROM_ADDRESS_WIDTH'd17
|
`define RGU_UCODE_ADDRESS `ROM_ADDRESS_WIDTH'd17
|
`define AABBIU_UCODE_ADDRESS `ROM_ADDRESS_WIDTH'd33
|
`define AABBIU_UCODE_ADDRESS `ROM_ADDRESS_WIDTH'd33
|
`define BIU_UCODE_ADDRESS `ROM_ADDRESS_WIDTH'd121
|
`define BIU_UCODE_ADDRESS `ROM_ADDRESS_WIDTH'd121
|
`define PSU_UCODE_ADRESS `ROM_ADDRESS_WIDTH'd196
|
`define PSU_UCODE_ADRESS `ROM_ADDRESS_WIDTH'd196
|
`define PSU_UCODE_ADRESS2 `ROM_ADDRESS_WIDTH'd212
|
`define PSU_UCODE_ADRESS2 `ROM_ADDRESS_WIDTH'd212
|
`define TCC_UCODE_ADDRESS `ROM_ADDRESS_WIDTH'd154
|
`define TCC_UCODE_ADDRESS `ROM_ADDRESS_WIDTH'd154
|
`define DEBUG_LOG_REGISTERS `ROM_ADDRESS_WIDTH'd221
|
`define DEBUG_LOG_REGISTERS `ROM_ADDRESS_WIDTH'd221
|
`define NPG_UCODE_ADDRESS `ROM_ADDRESS_WIDTH'd24
|
`define NPG_UCODE_ADDRESS `ROM_ADDRESS_WIDTH'd24
|
|
|
`define USER_AABBIU_UCODE_ADDRESS `ROM_ADDRESS_WIDTH'b1000000000000000
|
`define USER_AABBIU_UCODE_ADDRESS `ROM_ADDRESS_WIDTH'b1000000000000000
|
//---------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------
|
//This handy little macro allows me to print stuff either to STDOUT or a file.
|
//This handy little macro allows me to print stuff either to STDOUT or a file.
|
//Notice that the compilation vairable DUMP_CODE must be set if you want to print
|
//Notice that the compilation vairable DUMP_CODE must be set if you want to print
|
//to a file. In XILINX right click 'Simulate Beahvioral Model' -> Properties and
|
//to a file. In XILINX right click 'Simulate Beahvioral Model' -> Properties and
|
//under 'Speceify `define macro name and value' type 'DEBUG=1|DUMP_CODE=1'
|
//under 'Speceify `define macro name and value' type 'DEBUG=1|DUMP_CODE=1'
|
`ifdef DUMP_CODE
|
`ifdef DUMP_CODE
|
|
|
`define LOGME $fwrite(ucode_file,
|
`define LOGME $fwrite(ucode_file,
|
`else
|
`else
|
`define LOGME $write(
|
`define LOGME $write(
|
`endif
|
`endif
|
//---------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------
|
`define RT_TRUE 48'b1
|
`define RT_TRUE 48'b1
|
`define RT_FALSE 48'b0
|
`define RT_FALSE 48'b0
|
//---------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------
|
`define VOID `DATA_ADDRESS_WIDTH'd0 //0000
|
`define VOID `DATA_ADDRESS_WIDTH'd0 //0000
|
//** Control register bits **//
|
//** Control register bits **//
|
`define CR_EN_LIGHTS 0
|
`define CR_EN_LIGHTS 0
|
`define CR_EN_TEXTURE 1
|
`define CR_EN_TEXTURE 1
|
`define CR_USER_AABBIU 2
|
`define CR_USER_AABBIU 2
|
|
|
//** Configurtation Registers **//
|
//** Configurtation Registers **//
|
`define CREG_LIGHT_INFO `DATA_ADDRESS_WIDTH'd0 //0000
|
`define CREG_LIGHT_INFO `DATA_ADDRESS_WIDTH'd0 //0000
|
`define CREG_CAMERA_POSITION `DATA_ADDRESS_WIDTH'd1 //0001
|
`define CREG_CAMERA_POSITION `DATA_ADDRESS_WIDTH'd1 //0001
|
`define CREG_PROJECTION_WINDOW_MIN `DATA_ADDRESS_WIDTH'd2 //0002
|
`define CREG_PROJECTION_WINDOW_MIN `DATA_ADDRESS_WIDTH'd2 //0002
|
`define CREG_PROJECTION_WINDOW_MAX `DATA_ADDRESS_WIDTH'd3 //0003
|
`define CREG_PROJECTION_WINDOW_MAX `DATA_ADDRESS_WIDTH'd3 //0003
|
`define CREG_RESOLUTION `DATA_ADDRESS_WIDTH'd4 //0004
|
`define CREG_RESOLUTION `DATA_ADDRESS_WIDTH'd4 //0004
|
`define CREG_TEXTURE_SIZE `DATA_ADDRESS_WIDTH'd5 //0005
|
`define CREG_TEXTURE_SIZE `DATA_ADDRESS_WIDTH'd5 //0005
|
`define CREG_PIXEL_2D_POSITION `DATA_ADDRESS_WIDTH'd6 //0008
|
`define CREG_PIXEL_2D_POSITION `DATA_ADDRESS_WIDTH'd6 //0008
|
`define CREG_FIRST_LIGTH `DATA_ADDRESS_WIDTH'd7 //0007
|
`define CREG_FIRST_LIGTH `DATA_ADDRESS_WIDTH'd7 //0007
|
//OK, so from address 0x06 to 0x0F is where the lights are,watch out values are harcoded
|
//OK, so from address 0x06 to 0x0F is where the lights are,watch out values are harcoded
|
//for now!! (look in ROM.v for hardcoded values!!!)
|
//for now!! (look in ROM.v for hardcoded values!!!)
|
|
|
|
|
|
|
|
|
|
|
// ** User Registers **//
|
// ** User Registers **//
|
//General Purpose registers, the user may put what ever he/she
|
//General Purpose registers, the user may put what ever he/she
|
//wants in here...
|
//wants in here...
|
`define R1 `DATA_ADDRESS_WIDTH'd20
|
`define R1 `DATA_ADDRESS_WIDTH'd20
|
`define R2 `DATA_ADDRESS_WIDTH'd21
|
`define R2 `DATA_ADDRESS_WIDTH'd21
|
`define R3 `DATA_ADDRESS_WIDTH'd22
|
`define R3 `DATA_ADDRESS_WIDTH'd22
|
`define R4 `DATA_ADDRESS_WIDTH'd23
|
`define R4 `DATA_ADDRESS_WIDTH'd23
|
`define R5 `DATA_ADDRESS_WIDTH'd24
|
`define R5 `DATA_ADDRESS_WIDTH'd24
|
`define R6 `DATA_ADDRESS_WIDTH'd25
|
`define R6 `DATA_ADDRESS_WIDTH'd25
|
`define R7 `DATA_ADDRESS_WIDTH'd26
|
`define R7 `DATA_ADDRESS_WIDTH'd26
|
`define R8 `DATA_ADDRESS_WIDTH'd27
|
`define R8 `DATA_ADDRESS_WIDTH'd27
|
`define R9 `DATA_ADDRESS_WIDTH'd28
|
`define R9 `DATA_ADDRESS_WIDTH'd28
|
`define R10 `DATA_ADDRESS_WIDTH'd29
|
`define R10 `DATA_ADDRESS_WIDTH'd29
|
`define R11 `DATA_ADDRESS_WIDTH'd30
|
`define R11 `DATA_ADDRESS_WIDTH'd30
|
`define R12 `DATA_ADDRESS_WIDTH'd31
|
`define R12 `DATA_ADDRESS_WIDTH'd31
|
|
|
|
|
//** Constant Registers **//
|
//** Constant Registers **//
|
//Don't change the order of the registers. CREG_V* and CREG_UV* registers
|
//Don't change the order of the registers. CREG_V* and CREG_UV* registers
|
//need to be in that specific order for the trinagle fetcher to work
|
//need to be in that specific order for the trinagle fetcher to work
|
//correctly!
|
//correctly!
|
`define CREG_PROJECTION_WINDOW_SCALE `DATA_ADDRESS_WIDTH'd32
|
`define CREG_PROJECTION_WINDOW_SCALE `DATA_ADDRESS_WIDTH'd32
|
`define CREG_UNORMALIZED_DIRECTION `DATA_ADDRESS_WIDTH'd33
|
`define CREG_UNORMALIZED_DIRECTION `DATA_ADDRESS_WIDTH'd33
|
`define CREG_RAY_DIRECTION `DATA_ADDRESS_WIDTH'd34
|
`define CREG_RAY_DIRECTION `DATA_ADDRESS_WIDTH'd34
|
`define CREG_E1 `DATA_ADDRESS_WIDTH'd35
|
`define CREG_E1 `DATA_ADDRESS_WIDTH'd35
|
`define CREG_E2 `DATA_ADDRESS_WIDTH'd36
|
`define CREG_E2 `DATA_ADDRESS_WIDTH'd36
|
`define CREG_T `DATA_ADDRESS_WIDTH'd37
|
`define CREG_T `DATA_ADDRESS_WIDTH'd37
|
`define CREG_P `DATA_ADDRESS_WIDTH'd38
|
`define CREG_P `DATA_ADDRESS_WIDTH'd38
|
`define CREG_Q `DATA_ADDRESS_WIDTH'd39
|
`define CREG_Q `DATA_ADDRESS_WIDTH'd39
|
`define CREG_H1 `DATA_ADDRESS_WIDTH'd40
|
`define CREG_H1 `DATA_ADDRESS_WIDTH'd40
|
`define CREG_H2 `DATA_ADDRESS_WIDTH'd41
|
`define CREG_H2 `DATA_ADDRESS_WIDTH'd41
|
`define CREG_H3 `DATA_ADDRESS_WIDTH'd42
|
`define CREG_H3 `DATA_ADDRESS_WIDTH'd42
|
`define CREG_DELTA `DATA_ADDRESS_WIDTH'd43
|
`define CREG_DELTA `DATA_ADDRESS_WIDTH'd43
|
`define CREG_t `DATA_ADDRESS_WIDTH'd44
|
`define CREG_t `DATA_ADDRESS_WIDTH'd44
|
`define CREG_u `DATA_ADDRESS_WIDTH'd45
|
`define CREG_u `DATA_ADDRESS_WIDTH'd45
|
`define CREG_v `DATA_ADDRESS_WIDTH'd46
|
`define CREG_v `DATA_ADDRESS_WIDTH'd46
|
`define CREG_AABBMIN `DATA_ADDRESS_WIDTH'd47
|
`define CREG_AABBMIN `DATA_ADDRESS_WIDTH'd47
|
`define CREG_AABBMAX `DATA_ADDRESS_WIDTH'd48
|
`define CREG_AABBMAX `DATA_ADDRESS_WIDTH'd48
|
`define CREG_V0 `DATA_ADDRESS_WIDTH'd49 //002a
|
`define CREG_V0 `DATA_ADDRESS_WIDTH'd49 //002a
|
`define CREG_UV0 `DATA_ADDRESS_WIDTH'd50 //002b
|
`define CREG_UV0 `DATA_ADDRESS_WIDTH'd50 //002b
|
`define CREG_V1 `DATA_ADDRESS_WIDTH'd51 //002c
|
`define CREG_V1 `DATA_ADDRESS_WIDTH'd51 //002c
|
`define CREG_UV1 `DATA_ADDRESS_WIDTH'd52 //002d
|
`define CREG_UV1 `DATA_ADDRESS_WIDTH'd52 //002d
|
`define CREG_V2 `DATA_ADDRESS_WIDTH'd53 //002e
|
`define CREG_V2 `DATA_ADDRESS_WIDTH'd53 //002e
|
`define CREG_UV2 `DATA_ADDRESS_WIDTH'd54 //002f
|
`define CREG_UV2 `DATA_ADDRESS_WIDTH'd54 //002f
|
`define CREG_TRI_DIFFUSE `DATA_ADDRESS_WIDTH'd55 //0030
|
`define CREG_TRI_DIFFUSE `DATA_ADDRESS_WIDTH'd55 //0030
|
`define COLOR_ACC `DATA_ADDRESS_WIDTH'd56 //0031
|
`define COLOR_ACC `DATA_ADDRESS_WIDTH'd56 //0031
|
`define CREG_LAST_t `DATA_ADDRESS_WIDTH'd58 //0033
|
`define CREG_LAST_t `DATA_ADDRESS_WIDTH'd58 //0033
|
`define CREG_E1_LAST `DATA_ADDRESS_WIDTH'd59 //0034
|
`define CREG_E1_LAST `DATA_ADDRESS_WIDTH'd59 //0034
|
`define CREG_E2_LAST `DATA_ADDRESS_WIDTH'd60 //0035
|
`define CREG_E2_LAST `DATA_ADDRESS_WIDTH'd60 //0035
|
`define CREG_TRI_DIFFUSE_LAST `DATA_ADDRESS_WIDTH'd61 //0036
|
`define CREG_TRI_DIFFUSE_LAST `DATA_ADDRESS_WIDTH'd61 //0036
|
`define CREG_LAST_u `DATA_ADDRESS_WIDTH'd62 //0037
|
`define CREG_LAST_u `DATA_ADDRESS_WIDTH'd62 //0037
|
`define CREG_LAST_v `DATA_ADDRESS_WIDTH'd63 //0038
|
`define CREG_LAST_v `DATA_ADDRESS_WIDTH'd63 //0038
|
|
|
|
|
//Output registers
|
//Output registers
|
`define OREG_PIXEL_COLOR `DATA_ADDRESS_WIDTH'd57 //0032
|
`define OREG_PIXEL_COLOR `DATA_ADDRESS_WIDTH'd57 //0032
|
`define OREG_TEX_COORD1 `DATA_ADDRESS_WIDTH'd65 //0032
|
`define OREG_TEX_COORD1 `DATA_ADDRESS_WIDTH'd65 //0032
|
`define OREG_TEX_COORD2 `DATA_ADDRESS_WIDTH'd66 //0032
|
`define OREG_TEX_COORD2 `DATA_ADDRESS_WIDTH'd66 //0032
|
`define CREG_TEX_COLOR1 `DATA_ADDRESS_WIDTH'd67 //0032
|
`define CREG_TEX_COLOR1 `DATA_ADDRESS_WIDTH'd67 //0032
|
`define CREG_TEX_COLOR2 `DATA_ADDRESS_WIDTH'd68 //0032
|
`define CREG_TEX_COLOR2 `DATA_ADDRESS_WIDTH'd68 //0032
|
`define CREG_TEX_COLOR3 `DATA_ADDRESS_WIDTH'd69
|
`define CREG_TEX_COLOR3 `DATA_ADDRESS_WIDTH'd69
|
`define CREG_TEX_COLOR4 `DATA_ADDRESS_WIDTH'd70 //This is intentionally COLOR6
|
`define CREG_TEX_COLOR4 `DATA_ADDRESS_WIDTH'd70 //This is intentionally COLOR6
|
`define CREG_TEX_COLOR5 `DATA_ADDRESS_WIDTH'd71
|
`define CREG_TEX_COLOR5 `DATA_ADDRESS_WIDTH'd71
|
`define CREG_TEX_COLOR6 `DATA_ADDRESS_WIDTH'd72
|
`define CREG_TEX_COLOR6 `DATA_ADDRESS_WIDTH'd72
|
`define CREG_TEX_COLOR7 `DATA_ADDRESS_WIDTH'd73
|
`define CREG_TEX_COLOR7 `DATA_ADDRESS_WIDTH'd73
|
`define OREG_TEXWEIGHT1 `DATA_ADDRESS_WIDTH'd74
|
`define OREG_TEXWEIGHT1 `DATA_ADDRESS_WIDTH'd74
|
`define OREG_TEXWEIGHT2 `DATA_ADDRESS_WIDTH'd75
|
`define OREG_TEXWEIGHT2 `DATA_ADDRESS_WIDTH'd75
|
`define OREG_TEXWEIGHT3 `DATA_ADDRESS_WIDTH'd76
|
`define OREG_TEXWEIGHT3 `DATA_ADDRESS_WIDTH'd76
|
`define OREG_TEXWEIGHT4 `DATA_ADDRESS_WIDTH'd77
|
`define OREG_TEXWEIGHT4 `DATA_ADDRESS_WIDTH'd77
|
`define CREG_UV0_LAST `DATA_ADDRESS_WIDTH'd78
|
`define CREG_UV0_LAST `DATA_ADDRESS_WIDTH'd78
|
`define CREG_UV1_LAST `DATA_ADDRESS_WIDTH'd79
|
`define CREG_UV1_LAST `DATA_ADDRESS_WIDTH'd79
|
`define CREG_UV2_LAST `DATA_ADDRESS_WIDTH'd80
|
`define CREG_UV2_LAST `DATA_ADDRESS_WIDTH'd80
|
`define OREG_PIXEL_PITCH `DATA_ADDRESS_WIDTH'd81
|
`define OREG_PIXEL_PITCH `DATA_ADDRESS_WIDTH'd81
|
`define CREG_LAST_COL `DATA_ADDRESS_WIDTH'd82 //the last valid column, simply CREG_RESOLUTIONX - 1
|
`define CREG_LAST_COL `DATA_ADDRESS_WIDTH'd82 //the last valid column, simply CREG_RESOLUTIONX - 1
|
//-------------------------------------------------------------
|
//-------------------------------------------------------------
|
//*** Instruction Set ***
|
//*** Instruction Set ***
|
//The order of the instrucitons is important here!. Don't change
|
//The order of the instrucitons is important here!. Don't change
|
//it unles you know what you are doing. For example all the 'SET'
|
//it unles you know what you are doing. For example all the 'SET'
|
//family of instructions have the MSB bit in 1. This means that
|
//family of instructions have the MSB bit in 1. This means that
|
//if you add an instruction and the MSB=1, this instruction will treated
|
//if you add an instruction and the MSB=1, this instruction will treated
|
//as type II (see manual) meaning the second 32bit argument is expected to be
|
//as type II (see manual) meaning the second 32bit argument is expected to be
|
//an inmediate value instead of a register address!
|
//an inmediate value instead of a register address!
|
//Another example is that in the JUMP family Bits 3 and 4 have a special
|
//Another example is that in the JUMP family Bits 3 and 4 have a special
|
//meaning: b4b3 = 01 => X jump type, b4b3 = 10 => Y jump type, finally
|
//meaning: b4b3 = 01 => X jump type, b4b3 = 10 => Y jump type, finally
|
//b4b3 = 11 means Z jump type.
|
//b4b3 = 11 means Z jump type.
|
//All this is just to tell you: Don't play with these values!
|
//All this is just to tell you: Don't play with these values!
|
|
|
// *** Type I Instructions (OP DST REG1 REG2) ***
|
// *** Type I Instructions (OP DST REG1 REG2) ***
|
`define RETURN `INSTRUCTION_OP_LENGTH'b0_000000 //0
|
`define RETURN `INSTRUCTION_OP_LENGTH'b0_000000 //0
|
`define ADD `INSTRUCTION_OP_LENGTH'b0_000001 //1
|
`define ADD `INSTRUCTION_OP_LENGTH'b0_000001 //1
|
`define SUB `INSTRUCTION_OP_LENGTH'b0_000010 //2
|
`define SUB `INSTRUCTION_OP_LENGTH'b0_000010 //2
|
`define DIV `INSTRUCTION_OP_LENGTH'b0_000011 //3
|
`define DIV `INSTRUCTION_OP_LENGTH'b0_000011 //3
|
`define MUL `INSTRUCTION_OP_LENGTH'b0_000100 //4
|
`define MUL `INSTRUCTION_OP_LENGTH'b0_000100 //4
|
`define MAG `INSTRUCTION_OP_LENGTH'b0_000101 //5
|
`define MAG `INSTRUCTION_OP_LENGTH'b0_000101 //5
|
`define NOP `INSTRUCTION_OP_LENGTH'b0_000110 //6
|
`define NOP `INSTRUCTION_OP_LENGTH'b0_000110 //6
|
`define COPY `INSTRUCTION_OP_LENGTH'b0_000111 //7
|
`define COPY `INSTRUCTION_OP_LENGTH'b0_000111 //7
|
`define JGX `INSTRUCTION_OP_LENGTH'b0_001_000 //8
|
`define JGX `INSTRUCTION_OP_LENGTH'b0_001_000 //8
|
`define JLX `INSTRUCTION_OP_LENGTH'b0_001_001 //9
|
`define JLX `INSTRUCTION_OP_LENGTH'b0_001_001 //9
|
`define JEQX `INSTRUCTION_OP_LENGTH'b0_001_010 //10
|
`define JEQX `INSTRUCTION_OP_LENGTH'b0_001_010 //10
|
`define JNEX `INSTRUCTION_OP_LENGTH'b0_001_011 //11
|
`define JNEX `INSTRUCTION_OP_LENGTH'b0_001_011 //11
|
`define JGEX `INSTRUCTION_OP_LENGTH'b0_001_100 //12
|
`define JGEX `INSTRUCTION_OP_LENGTH'b0_001_100 //12
|
`define JLEX `INSTRUCTION_OP_LENGTH'b0_001_101 //13
|
`define JLEX `INSTRUCTION_OP_LENGTH'b0_001_101 //13
|
`define INC `INSTRUCTION_OP_LENGTH'b0_001_110 //14
|
`define INC `INSTRUCTION_OP_LENGTH'b0_001_110 //14
|
`define ZERO `INSTRUCTION_OP_LENGTH'b0_001_111 //15
|
`define ZERO `INSTRUCTION_OP_LENGTH'b0_001_111 //15
|
`define JGY `INSTRUCTION_OP_LENGTH'b0_010_000 //16
|
`define JGY `INSTRUCTION_OP_LENGTH'b0_010_000 //16
|
`define JLY `INSTRUCTION_OP_LENGTH'b0_010_001 //17
|
`define JLY `INSTRUCTION_OP_LENGTH'b0_010_001 //17
|
`define JEQY `INSTRUCTION_OP_LENGTH'b0_010_010 //18
|
`define JEQY `INSTRUCTION_OP_LENGTH'b0_010_010 //18
|
`define JNEY `INSTRUCTION_OP_LENGTH'b0_010_011 //19
|
`define JNEY `INSTRUCTION_OP_LENGTH'b0_010_011 //19
|
`define JGEY `INSTRUCTION_OP_LENGTH'b0_010_100 //20
|
`define JGEY `INSTRUCTION_OP_LENGTH'b0_010_100 //20
|
`define JLEY `INSTRUCTION_OP_LENGTH'b0_010_101 //21
|
`define JLEY `INSTRUCTION_OP_LENGTH'b0_010_101 //21
|
`define CROSS `INSTRUCTION_OP_LENGTH'b0_010_110 //22
|
`define CROSS `INSTRUCTION_OP_LENGTH'b0_010_110 //22
|
`define DOT `INSTRUCTION_OP_LENGTH'b0_010_111 //23
|
`define DOT `INSTRUCTION_OP_LENGTH'b0_010_111 //23
|
`define JGZ `INSTRUCTION_OP_LENGTH'b0_011_000 //24
|
`define JGZ `INSTRUCTION_OP_LENGTH'b0_011_000 //24
|
`define JLZ `INSTRUCTION_OP_LENGTH'b0_011_001 //25
|
`define JLZ `INSTRUCTION_OP_LENGTH'b0_011_001 //25
|
`define JEQZ `INSTRUCTION_OP_LENGTH'b0_011_010 //26
|
`define JEQZ `INSTRUCTION_OP_LENGTH'b0_011_010 //26
|
`define JNEZ `INSTRUCTION_OP_LENGTH'b0_011_011 //27
|
`define JNEZ `INSTRUCTION_OP_LENGTH'b0_011_011 //27
|
`define JGEZ `INSTRUCTION_OP_LENGTH'b0_011_100 //28
|
`define JGEZ `INSTRUCTION_OP_LENGTH'b0_011_100 //28
|
`define JLEZ `INSTRUCTION_OP_LENGTH'b0_011_101 //29
|
`define JLEZ `INSTRUCTION_OP_LENGTH'b0_011_101 //29
|
|
|
//The next instruction is for simulation debug only
|
//The next instruction is for simulation debug only
|
//not to be synthetized! Pretty much behaves the same
|
//not to be synthetized! Pretty much behaves the same
|
//as a NOP, only that prints the register value to
|
//as a NOP, only that prints the register value to
|
//a log file called 'Registers.log'
|
//a log file called 'Registers.log'
|
`ifdef DEBUG
|
`ifdef DEBUG
|
`define DEBUG_PRINT `INSTRUCTION_OP_LENGTH'b0_011_110 //30
|
`define DEBUG_PRINT `INSTRUCTION_OP_LENGTH'b0_011_110 //30
|
`endif
|
`endif
|
|
|
`define MULP `INSTRUCTION_OP_LENGTH'b0_011_111 //31 R1.z = S1.x * S1.y
|
`define MULP `INSTRUCTION_OP_LENGTH'b0_011_111 //31 R1.z = S1.x * S1.y
|
`define MOD `INSTRUCTION_OP_LENGTH'b0_100_000 //32 R = MODULO( S1,S2 )
|
`define MOD `INSTRUCTION_OP_LENGTH'b0_100_000 //32 R = MODULO( S1,S2 )
|
`define FRAC `INSTRUCTION_OP_LENGTH'b0_100_001 //33 R =FractionalPart( S1 )
|
`define FRAC `INSTRUCTION_OP_LENGTH'b0_100_001 //33 R =FractionalPart( S1 )
|
`define INTP `INSTRUCTION_OP_LENGTH'b0_100_010 //34 R =IntergerPart( S1 )
|
`define INTP `INSTRUCTION_OP_LENGTH'b0_100_010 //34 R =IntergerPart( S1 )
|
`define NEG `INSTRUCTION_OP_LENGTH'b0_100_011 //35 R = -S1
|
`define NEG `INSTRUCTION_OP_LENGTH'b0_100_011 //35 R = -S1
|
`define DEC `INSTRUCTION_OP_LENGTH'b0_100_100 //36 R = S1--
|
`define DEC `INSTRUCTION_OP_LENGTH'b0_100_100 //36 R = S1--
|
`define XCHANGEX `INSTRUCTION_OP_LENGTH'b0_100_101 // R.x = S2.x, R.y = S1.y, R.z = S1.z
|
`define XCHANGEX `INSTRUCTION_OP_LENGTH'b0_100_101 // R.x = S2.x, R.y = S1.y, R.z = S1.z
|
`define XCHANGEY `INSTRUCTION_OP_LENGTH'b0_100_110 // R.x = S1.x, R.y = S2.y, R.z = S1.z
|
`define XCHANGEY `INSTRUCTION_OP_LENGTH'b0_100_110 // R.x = S1.x, R.y = S2.y, R.z = S1.z
|
`define XCHANGEZ `INSTRUCTION_OP_LENGTH'b0_100_111 // R.x = S1.x, R.y = S1.y, R.z = S2.z
|
`define XCHANGEZ `INSTRUCTION_OP_LENGTH'b0_100_111 // R.x = S1.x, R.y = S1.y, R.z = S2.z
|
`define IMUL `INSTRUCTION_OP_LENGTH'b0_101_000 // R = INTEGER( S1 * S2 )
|
`define IMUL `INSTRUCTION_OP_LENGTH'b0_101_000 // R = INTEGER( S1 * S2 )
|
`define UNSCALE `INSTRUCTION_OP_LENGTH'b0_101_001 // R = S1 >> SCALE
|
`define UNSCALE `INSTRUCTION_OP_LENGTH'b0_101_001 // R = S1 >> SCALE
|
`define RESCALE `INSTRUCTION_OP_LENGTH'b0_101_010 // R = S1 << SCALE
|
`define RESCALE `INSTRUCTION_OP_LENGTH'b0_101_010 // R = S1 << SCALE
|
`define INCX `INSTRUCTION_OP_LENGTH'b0_101_011 // R.X = S1.X + 1
|
`define INCX `INSTRUCTION_OP_LENGTH'b0_101_011 // R.X = S1.X + 1
|
`define INCY `INSTRUCTION_OP_LENGTH'b0_101_100 // R.Y = S1.Y + 1
|
`define INCY `INSTRUCTION_OP_LENGTH'b0_101_100 // R.Y = S1.Y + 1
|
`define INCZ `INSTRUCTION_OP_LENGTH'b0_101_101 // R.Z = S1.Z + 1
|
`define INCZ `INSTRUCTION_OP_LENGTH'b0_101_101 // R.Z = S1.Z + 1
|
|
|
|
|
//*** Type II Instructions (OP DST REG1 IMM) ***
|
//*** Type II Instructions (OP DST REG1 IMM) ***
|
`define SETX `INSTRUCTION_OP_LENGTH'b1_000000 //64
|
`define SETX `INSTRUCTION_OP_LENGTH'b1_000000 //64
|
`define SETY `INSTRUCTION_OP_LENGTH'b1_000001 //65
|
`define SETY `INSTRUCTION_OP_LENGTH'b1_000001 //65
|
`define SETZ `INSTRUCTION_OP_LENGTH'b1_000010 //66
|
`define SETZ `INSTRUCTION_OP_LENGTH'b1_000010 //66
|
`define SWIZZLE3D `INSTRUCTION_OP_LENGTH'b1_000011 //67
|
`define SWIZZLE3D `INSTRUCTION_OP_LENGTH'b1_000011 //67
|
`define JMP `INSTRUCTION_OP_LENGTH'b1_011_000 //56
|
`define JMP `INSTRUCTION_OP_LENGTH'b1_011_000 //56
|
//-------------------------------------------------------------
|
//-------------------------------------------------------------
|
|
|
|
|
`define SWIZZLE_XXX 32'd0
|
`define SWIZZLE_XXX 32'd0
|
`define SWIZZLE_YYY 32'd1
|
`define SWIZZLE_YYY 32'd1
|
`define SWIZZLE_ZZZ 32'd2
|
`define SWIZZLE_ZZZ 32'd2
|
`define SWIZZLE_XYY 32'd3
|
`define SWIZZLE_XYY 32'd3
|
`define SWIZZLE_XXY 32'd4
|
`define SWIZZLE_XXY 32'd4
|
`define SWIZZLE_XZZ 32'd5
|
`define SWIZZLE_XZZ 32'd5
|
`define SWIZZLE_XXZ 32'd6
|
`define SWIZZLE_XXZ 32'd6
|
`define SWIZZLE_YXX 32'd7
|
`define SWIZZLE_YXX 32'd7
|
`define SWIZZLE_YYX 32'd8
|
`define SWIZZLE_YYX 32'd8
|
`define SWIZZLE_YZZ 32'd9
|
`define SWIZZLE_YZZ 32'd9
|
`define SWIZZLE_YYZ 32'd10
|
`define SWIZZLE_YYZ 32'd10
|
`define SWIZZLE_ZXX 32'd11
|
`define SWIZZLE_ZXX 32'd11
|
`define SWIZZLE_ZZX 32'd12
|
`define SWIZZLE_ZZX 32'd12
|
`define SWIZZLE_ZYY 32'd13
|
`define SWIZZLE_ZYY 32'd13
|
`define SWIZZLE_ZZY 32'd14
|
`define SWIZZLE_ZZY 32'd14
|
`define SWIZZLE_XZX 32'd15
|
`define SWIZZLE_XZX 32'd15
|
`define SWIZZLE_XYX 32'd16
|
`define SWIZZLE_XYX 32'd16
|
`define SWIZZLE_YXY 32'd17
|
`define SWIZZLE_YXY 32'd17
|
`define SWIZZLE_YZY 32'd18
|
`define SWIZZLE_YZY 32'd18
|
`define SWIZZLE_ZXZ 32'd19
|
`define SWIZZLE_ZXZ 32'd19
|
`define SWIZZLE_ZYZ 32'd20
|
`define SWIZZLE_ZYZ 32'd20
|
`define SWIZZLE_YXZ 32'd21
|
`define SWIZZLE_YXZ 32'd21
|
|
|
|
|
|
|
|
|
//`define REG_BUS_OWNED_BY_BCU 0 //0000
|
//`define REG_BUS_OWNED_BY_BCU 0 //0000
|
`define REG_BUS_OWNED_BY_NULL 0 //0010
|
`define REG_BUS_OWNED_BY_NULL 0 //0010
|
`define REG_BUS_OWNED_BY_GFU 1 //0001
|
`define REG_BUS_OWNED_BY_GFU 1 //0001
|
`define REG_BUS_OWNED_BY_UCODE 2 //0011
|
`define REG_BUS_OWNED_BY_UCODE 2 //0011
|
|
|
|
|
`define OP_WIDTH `INSTRUCTION_OP_LENGTH
|
`define OP_WIDTH `INSTRUCTION_OP_LENGTH
|
`define INST_WIDTH 5
|
`define INST_WIDTH 5
|
|
|
|
|
`define MULTIPLICATION 0
|
`define MULTIPLICATION 0
|
`define DIVISION 1
|
`define DIVISION 1
|
|
|
|
|
`define ENABLE_ALU_AB 3'b001
|
`define ENABLE_ALU_AB 3'b001
|
`define ENABLE_ALU_CD 3'b010
|
`define ENABLE_ALU_CD 3'b010
|
`define ENABLE_ALU_EF 3'b100
|
`define ENABLE_ALU_EF 3'b100
|
`define ALU_CONTROL_IS_NULL 0
|
`define ALU_CONTROL_IS_NULL 0
|
`define ALU_CONTROL_IS_RGU 1
|
`define ALU_CONTROL_IS_RGU 1
|
`define ALU_CONTROL_IS_AABBIU 2
|
`define ALU_CONTROL_IS_AABBIU 2
|
`define ALU_CONTROL_IS_CPPU 3
|
`define ALU_CONTROL_IS_CPPU 3
|
|
|
`define UCODE_CONTROL_IS_CU 0
|
`define UCODE_CONTROL_IS_CU 0
|
`define UCODE_CONTROL_IS_IFU 1
|
`define UCODE_CONTROL_IS_IFU 1
|
|
|
|
|
|
|
`define FLOATING_POINT_WIDTH 32
|
`define FLOATING_POINT_WIDTH 32
|
`define FIXED_POINT_WIDTH 32//128
|
`define FIXED_POINT_WIDTH 32//128
|
`define IEEE754_BIAS 127
|
`define IEEE754_BIAS 127
|
`define NORMAL_EXIT 0
|
`define NORMAL_EXIT 0
|
`define DIVISION_BY_ZERO 1
|
`define DIVISION_BY_ZERO 1
|
`define NULL 0
|
`define NULL 0
|
`define RAY_TYPE_I 1
|
`define RAY_TYPE_I 1
|
`define RAY_TYPE_II 2
|
`define RAY_TYPE_II 2
|
`define RAY_TYPE_III 3
|
`define RAY_TYPE_III 3
|
|
|
//Scheduler commands
|
//Scheduler commands
|
`define SCHEDULER_NULL_COMMAND 0
|
`define SCHEDULER_NULL_COMMAND 0
|
`define REG_SELECTOR_WIDTH 5
|
`define REG_SELECTOR_WIDTH 5
|
//Main state machine control values
|
//Main state machine control values
|
`define READ_CONFIGURATION_DATA 2
|
`define READ_CONFIGURATION_DATA 2
|
`define WRITE_NO_HIT 20
|
`define WRITE_NO_HIT 20
|
//Control values for BusUnitInterface
|
//Control values for BusUnitInterface
|
`define INITIAL_PROTOCOL_STATE 0
|
`define INITIAL_PROTOCOL_STATE 0
|
`define GET_NEXT_CONFIGURATION_PACKET 4
|
`define GET_NEXT_CONFIGURATION_PACKET 4
|
`define READ_COMMAND_DATA 5
|
`define READ_COMMAND_DATA 5
|
`define WAIT_FOR_CONTROL_UNIT_COMMAND 6
|
`define WAIT_FOR_CONTROL_UNIT_COMMAND 6
|
`define READ_COMMAND 7
|
`define READ_COMMAND 7
|
`define GET_NEXT_DATA_PACKET 8
|
`define GET_NEXT_DATA_PACKET 8
|
`define IDLE 9
|
`define IDLE 9
|
`define READ_CONFIGURATION_DATA_FROM_BUS 10
|
`define READ_CONFIGURATION_DATA_FROM_BUS 10
|
`define READ_TASK_DATA_FROM_BUS 12
|
`define READ_TASK_DATA_FROM_BUS 12
|
`define WRITE_TASK_RESULTS_TO_BUS 13
|
`define WRITE_TASK_RESULTS_TO_BUS 13
|
`define ACK_LAST_GO_IDLE 14
|
`define ACK_LAST_GO_IDLE 14
|
`define REQUEST_BUS_FOR_WRITE_OPERATION 23
|
`define REQUEST_BUS_FOR_WRITE_OPERATION 23
|
`define WAIT_FOR_BUS_WRITE_PERMISSION 24
|
`define WAIT_FOR_BUS_WRITE_PERMISSION 24
|
`define WRITE_DATA_TO_BUS 25
|
`define WRITE_DATA_TO_BUS 25
|
`define ACK_BUS_READ_OPERATION 26
|
`define ACK_BUS_READ_OPERATION 26
|
`define WAIT_FOR_NEXT_DATA_PACKET 27
|
`define WAIT_FOR_NEXT_DATA_PACKET 27
|
`define BCU_READ_LANES 28
|
`define BCU_READ_LANES 28
|
`define CONFIGURATION_3LANE_DATA_PACKET 12
|
`define CONFIGURATION_3LANE_DATA_PACKET 12
|
`define BCU_WAIT_FOR_RAM_WRITE 29
|
`define BCU_WAIT_FOR_RAM_WRITE 29
|
`define BCU_READ_DATA_LANE_C 30
|
`define BCU_READ_DATA_LANE_C 30
|
`define BCU_READ_DATA_LANE_D 31
|
`define BCU_READ_DATA_LANE_D 31
|
`define BCU_WRITE_LAST_LANE_TO_RAM 32
|
`define BCU_WRITE_LAST_LANE_TO_RAM 32
|
`define BCU_WRITE_NO_HIT_TO_BUS 33
|
`define BCU_WRITE_NO_HIT_TO_BUS 33
|
`define BCU_ACK_BUS_WRITE_DATA 34
|
`define BCU_ACK_BUS_WRITE_DATA 34
|
`define BCU_REQUEST_COLOR_ACC_FROM_RAM 35
|
`define BCU_REQUEST_COLOR_ACC_FROM_RAM 35
|
`define BCU_READ_COLOR_ACC_FROM_RAM 36
|
`define BCU_READ_COLOR_ACC_FROM_RAM 36
|
`define WAIT_FOR_CONTROL_UNIT_ACK 37
|
`define WAIT_FOR_CONTROL_UNIT_ACK 37
|
`define BCU_REQUEST_COLOR_FROM_RAM 38
|
`define BCU_REQUEST_COLOR_FROM_RAM 38
|
`define BCU_RAM_READ_DELAY 39
|
`define BCU_RAM_READ_DELAY 39
|
`define BCU_READ_COLOR_FROM_RAM 40
|
`define BCU_READ_COLOR_FROM_RAM 40
|
|
|
`define FETCH_GEOMETRY 1
|
`define FETCH_GEOMETRY 1
|
|
|
//Controlo values for RGU
|
//Controlo values for RGU
|
`define RG_AFTER_RESET_STATE 1
|
`define RG_AFTER_RESET_STATE 1
|
`define RG_WAIT_FOR_CONTROL_UNIT_COMMAND 2
|
`define RG_WAIT_FOR_CONTROL_UNIT_COMMAND 2
|
`define EXECUTE_TASK_STEP1 3
|
`define EXECUTE_TASK_STEP1 3
|
`define EXECUTE_TASK_STEP2 4
|
`define EXECUTE_TASK_STEP2 4
|
`define EXECUTE_TASK_STEP3 5
|
`define EXECUTE_TASK_STEP3 5
|
`define EXECUTE_TASK_STEP4 6
|
`define EXECUTE_TASK_STEP4 6
|
`define EXECUTE_TASK_STEP5 7
|
`define EXECUTE_TASK_STEP5 7
|
|
|
|
|
//Cnotrol values for GFU
|
//Cnotrol values for GFU
|
`define REQUSET_PARENT_CUBE 5
|
`define REQUSET_PARENT_CUBE 5
|
`define FETCH_CUBE_STAGE_I 6
|
`define FETCH_CUBE_STAGE_I 6
|
`define FETCH_CUBE_STAGE_I_ACK 7
|
`define FETCH_CUBE_STAGE_I_ACK 7
|
`define FETCH_CUBE_STAGE_II 8
|
`define FETCH_CUBE_STAGE_II 8
|
`define FETCH_CUBE_STAGE_II_ACK 9
|
`define FETCH_CUBE_STAGE_II_ACK 9
|
`define TRIGGER_CUBE_INTERSECTION_UNIT 10
|
`define TRIGGER_CUBE_INTERSECTION_UNIT 10
|
|
|
//Control values for AABBIU
|
//Control values for AABBIU
|
`define RAY_INSIDE_BOX_TEST 5
|
`define RAY_INSIDE_BOX_TEST 5
|
`define WAIT_FOR_T_DIVISION_RESULTS 6
|
`define WAIT_FOR_T_DIVISION_RESULTS 6
|
`define CALCULE_AABB_INTERSECTION 7
|
`define CALCULE_AABB_INTERSECTION 7
|
`define WAIT_FOR_T_MULTIPLICATION_RESULTS 8
|
`define WAIT_FOR_T_MULTIPLICATION_RESULTS 8
|
`define CALCULATE_AABB_HIT 9
|
`define CALCULATE_AABB_HIT 9
|
`define AABB_WRITE_RESULTS 10
|
`define AABB_WRITE_RESULTS 10
|
|
|
//RegisterFileVariables
|
//RegisterFileVariables
|
`define AGENT_WRITING_VALUE_TO_REGISTER_BUS 1
|
`define AGENT_WRITING_VALUE_TO_REGISTER_BUS 1
|
`define AGENT_READING_VALUE_FROM_REGISTER_BUS 0
|
`define AGENT_READING_VALUE_FROM_REGISTER_BUS 0
|
|
|
//Division State Machine Constants
|
//Division State Machine Constants
|
`define INITIAL_DIVISION_STATE 6'd1
|
`define INITIAL_DIVISION_STATE 6'd1
|
`define DIVISION_REVERSE_LAST_ITERATION 6'd2
|
`define DIVISION_REVERSE_LAST_ITERATION 6'd2
|
`define PRE_CALCULATE_REMAINDER 6'd3
|
`define PRE_CALCULATE_REMAINDER 6'd3
|
`define CALCULATE_REMAINDER 6'd4
|
`define CALCULATE_REMAINDER 6'd4
|
`define WRITE_DIVISION_RESULT 6'd5
|
`define WRITE_DIVISION_RESULT 6'd5
|
|
|
//Square Root State Machine Constants
|
//Square Root State Machine Constants
|
`define SQUARE_ROOT_LOOP 1
|
`define SQUARE_ROOT_LOOP 1
|
`define WRITE_SQUARE_ROOT_RESULT 2
|
`define WRITE_SQUARE_ROOT_RESULT 2
|
|
|
//Multiplication State Machine Constants
|
//Multiplication State Machine Constants
|
`define MULTIPLCATION_LOOP 1
|
`define MULTIPLCATION_LOOP 1
|
`define WRITE_MULTIPLCATION_RESULT 2
|
`define WRITE_MULTIPLCATION_RESULT 2
|
|
|
//------------------------------------
|
//------------------------------------
|
|
|
//endmodule
|
//endmodule
|
|
|