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

Subversion Repositories theia_gpu

[/] [theia_gpu/] [branches/] [gpu_4_cores/] [rtl/] [Collaterals/] [aDefinitions.v] - Blame information for rev 218

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

Line No. Rev Author Line
1 37 diegovalve
/**********************************************************************************
2
Theaia, Ray Cast Programable graphic Processing Unit.
3
Copyright (C) 2009  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
 
22
/*******************************************************************************
23
Module Description:
24
 
25
        This module defines constants that are going to be used
26 120 diegovalve
        all over the code. By now you have may noticed that all
27 37 diegovalve
        constants are pre-compilation define directives. This is
28
        for simulation perfomance reasons mainly.
29
*******************************************************************************/
30
 
31 119 diegovalve
`define MAX_CORES       4 //The number of cores, make sure you update MAX_CORE_BITS!
32
`define MAX_CORE_BITS   2 // 2 ^ MAX_CORE_BITS = MAX_CORES
33
`define MAX_TMEM_BANKS  4 //The number of memory banks for TMEM
34 37 diegovalve
//---------------------------------------------------------------------------------
35
//Verilog provides a `default_nettype none compiler directive.  When
36
//this directive is set, implicit data types are disabled, which will make any
37
//undeclared signal name a syntax error.This is very usefull to avoid annoying
38
//automatic 1 bit long wire declaration where you don't want them to be!
39
`default_nettype none
40 60 diegovalve
 
41
//The clock cycle
42 119 diegovalve
`define CLOCK_CYCLE  5
43 60 diegovalve
`define CLOCK_PERIOD 10
44 37 diegovalve
//---------------------------------------------------------------------------------
45 120 diegovalve
//Defines the Scale. This very important because it sets the fixed point precision.
46 37 diegovalve
//The Scale defines the number bits that are used as the decimal part of the number.
47
//The code has been written in such a way that allows you to change the value of the
48 120 diegovalve
//Scale, so that it is possible to experiment with different scenarios. SCALE can be
49 37 diegovalve
//no smaller that 1 and no bigger that WIDTH.
50 119 diegovalve
`define SCALE        17
51 37 diegovalve
 
52 120 diegovalve
//The next section defines the length of the registers, buses and other structures, 
53 37 diegovalve
//do not change this valued unless you really know what you are doing (seriously!)
54 119 diegovalve
`define WIDTH        32
55 37 diegovalve
`define WB_WIDTH     32  //width of wish-bone buses             
56 119 diegovalve
`define LONG_WIDTH   64
57 37 diegovalve
 
58 119 diegovalve
`define WB_SIMPLE_READ_CYCLE  0
59 37 diegovalve
`define WB_SIMPLE_WRITE_CYCLE 1
60
//---------------------------------------------------------------------------------
61
//Next are the constants that define the size of the instructions.
62
//instructions are formed like this:
63
// Tupe I:
64 120 diegovalve
// Operand         (of size INSTRUCTION_OP_LENGTH )
65 37 diegovalve
// DestinationAddr (of size DATA_ADDRESS_WIDTH )
66 120 diegovalve
// SourceAddrr1    (of size DATA_ADDRESS_WIDTH )
67
// SourceAddrr2    (of size DATA_ADDRESS_WIDTH )        
68 37 diegovalve
//Type II:
69 120 diegovalve
// Operand         (of size INSTRUCTION_OP_LENGTH )
70 37 diegovalve
// DestinationAddr (of size DATA_ADDRESS_WIDTH )
71 120 diegovalve
// InmeadiateValue (of size WIDTH = DATA_ADDRESS_WIDTH * 2 )
72
//
73 37 diegovalve
//You can play around with the size of instuctions, but keep
74
//in mind that Bits 3 and 4 of the Operand have a special meaning
75
//that is used for the jump familiy of instructions (see Documentation).
76
//Also the MSB of Operand is used by the decoder to distinguish 
77
//between Type I and Type II instructions.
78 119 diegovalve
`define INSTRUCTION_WIDTH       64
79
`define INSTRUCTION_OP_LENGTH   16
80
`define INSTRUCTION_IMM_BITPOS  54
81
`define INSTRUCTION_IMM_BIT     6       //don't change this!
82 37 diegovalve
 
83
//Defines the Lenght of Memory blocks
84 119 diegovalve
`define DATA_ROW_WIDTH        96
85
`define DATA_ADDRESS_WIDTH    16
86
`define ROM_ADDRESS_WIDTH     16
87 60 diegovalve
`define ROM_ADDRESS_SEL_MASK  `ROM_ADDRESS_WIDTH'h8000
88 37 diegovalve
 
89
//---------------------------------------------------------------------------------
90 120 diegovalve
//The next section defines the code memory entry point for the various code routines
91 63 diegovalve
//Please keep this syntax ENTRYPOINT_ADDR_* because the perl script that
92
//parses the user code expects this pattern in order to read in the tokens
93 37 diegovalve
 
94 63 diegovalve
//Internal Entry points (default ROM Address)
95 118 diegovalve
`define ENTRYPOINT_ADRR_INITIAL                 `ROM_ADDRESS_WIDTH'd0   //0 - This should always be zero
96
`define ENTRYPOINT_ADRR_CPPU                    `ROM_ADDRESS_WIDTH'd44
97
`define ENTRYPOINT_ADRR_RGU                     `ROM_ADDRESS_WIDTH'd47
98
`define ENTRYPOINT_ADRR_AABBIU                  `ROM_ADDRESS_WIDTH'd69
99
`define ENTRYPOINT_ADRR_BIU                     `ROM_ADDRESS_WIDTH'd157
100
`define ENTRYPOINT_ADRR_PSU                     `ROM_ADDRESS_WIDTH'd232
101
`define ENTRYPOINT_ADRR_PSU2                    `ROM_ADDRESS_WIDTH'd248
102
`define ENTRYPOINT_ADRR_TCC                     `ROM_ADDRESS_WIDTH'd190
103
`define ENTRYPOINT_ADRR_NPG                     `ROM_ADDRESS_WIDTH'd55
104 63 diegovalve
//User Entry points (default ROM Address)
105 118 diegovalve
`define ENTRYPOINT_ADRR_USERCONSTANTS           `ROM_ADDRESS_WIDTH'd276
106
`define ENTRYPOINT_ADRR_PIXELSHADER             `ROM_ADDRESS_WIDTH'd278
107
`define ENTRYPOINT_ADRR_MAIN                    `ROM_ADDRESS_WIDTH'd37
108 60 diegovalve
 
109 63 diegovalve
//Please keep this syntax ENTRYPOINT_INDEX_* because the perl script that
110
//parses the user code expects this pattern in order to read in the tokens
111
//Internal subroutines
112 118 diegovalve
`define ENTRYPOINT_INDEX_INITIAL                `ROM_ADDRESS_WIDTH'h8000
113
`define ENTRYPOINT_INDEX_CPPU                   `ROM_ADDRESS_WIDTH'h8001
114
`define ENTRYPOINT_INDEX_RGU                    `ROM_ADDRESS_WIDTH'h8002
115
`define ENTRYPOINT_INDEX_AABBIU                 `ROM_ADDRESS_WIDTH'h8003
116
`define ENTRYPOINT_INDEX_BIU                    `ROM_ADDRESS_WIDTH'h8004
117
`define ENTRYPOINT_INDEX_PSU                    `ROM_ADDRESS_WIDTH'h8005
118
`define ENTRYPOINT_INDEX_PSU2                   `ROM_ADDRESS_WIDTH'h8006
119
`define ENTRYPOINT_INDEX_TCC                    `ROM_ADDRESS_WIDTH'h8007
120
`define ENTRYPOINT_INDEX_NPG                    `ROM_ADDRESS_WIDTH'h8008
121 63 diegovalve
//User defined subroutines
122
`define ENTRYPOINT_INDEX_USERCONSTANTS          `ROM_ADDRESS_WIDTH'h8009
123 104 diegovalve
`define ENTRYPOINT_INDEX_PIXELSHADER            `ROM_ADDRESS_WIDTH'h800A
124
`define ENTRYPOINT_INDEX_MAIN                   `ROM_ADDRESS_WIDTH'h800B
125 60 diegovalve
 
126 37 diegovalve
`define USER_AABBIU_UCODE_ADDRESS `ROM_ADDRESS_WIDTH'b1000000000000000
127
//---------------------------------------------------------------------------------
128
//This handy little macro allows me to print stuff either to STDOUT or a file.
129
//Notice that the compilation vairable DUMP_CODE must be set if you want to print
130
//to a file. In XILINX right click 'Simulate Beahvioral Model' -> Properties and
131 120 diegovalve
//under 'Specify `define macro name and value' type 'DEBUG=1|DUMP_CODE=1|DEBUG_CORE=<core you want to dump>'
132 37 diegovalve
`ifdef DUMP_CODE
133
 
134
        `define LOGME  $fwrite(ucode_file,
135
`else
136
        `define LOGME  $write(
137
`endif
138 104 diegovalve
//---------------------------------------------------------------------------------     
139 119 diegovalve
`define TRUE     32'h1
140
`define FALSE    32'h0
141
`define RT_TRUE  48'b1
142 37 diegovalve
`define RT_FALSE 48'b0
143
//---------------------------------------------------------------------------------     
144 70 diegovalve
 
145
`define GENERAL_PURPOSE_REG_ADDR_MASK  `DATA_ADDRESS_WIDTH'h1F
146 119 diegovalve
`define VOID                           `DATA_ADDRESS_WIDTH'd0   //0000
147 37 diegovalve
//** Control register bits **//
148
`define CR_EN_LIGHTS   0
149
`define CR_EN_TEXTURE  1
150
`define CR_USER_AABBIU 2
151 70 diegovalve
/** Swapping registers **/
152
//** Configuration Registers **//
153 119 diegovalve
`define CREG_LIGHT_INFO                   `DATA_ADDRESS_WIDTH'd0
154
`define CREG_CAMERA_POSITION              `DATA_ADDRESS_WIDTH'd1
155
`define CREG_PROJECTION_WINDOW_MIN        `DATA_ADDRESS_WIDTH'd2
156
`define CREG_PROJECTION_WINDOW_MAX        `DATA_ADDRESS_WIDTH'd3
157
`define CREG_RESOLUTION                   `DATA_ADDRESS_WIDTH'd4
158
`define CREG_TEXTURE_SIZE                 `DATA_ADDRESS_WIDTH'd5
159
`define CREG_PIXEL_2D_INITIAL_POSITION    `DATA_ADDRESS_WIDTH'd6
160
`define CREG_PIXEL_2D_FINAL_POSITION      `DATA_ADDRESS_WIDTH'd7
161
`define CREG_FIRST_LIGTH                  `DATA_ADDRESS_WIDTH'd8
162
`define CREG_FIRST_LIGTH_DIFFUSE          `DATA_ADDRESS_WIDTH'd8
163 37 diegovalve
//OK, so from address 0x06 to 0x0F is where the lights are,watch out values are harcoded
164
//for now!! (look in ROM.v for hardcoded values!!!)
165
 
166
 
167 70 diegovalve
//Don't change the order of the registers. CREG_V* and CREG_UV* registers
168
//need to be in that specific order for the triangle fetcher to work 
169
//correctly!
170 37 diegovalve
 
171 119 diegovalve
`define CREG_AABBMIN                   `DATA_ADDRESS_WIDTH'd42
172
`define CREG_AABBMAX                   `DATA_ADDRESS_WIDTH'd43
173
`define CREG_V0                        `DATA_ADDRESS_WIDTH'd44
174
`define CREG_UV0                       `DATA_ADDRESS_WIDTH'd45
175
`define CREG_V1                        `DATA_ADDRESS_WIDTH'd46
176
`define CREG_UV1                       `DATA_ADDRESS_WIDTH'd47
177
`define CREG_V2                        `DATA_ADDRESS_WIDTH'd48
178
`define CREG_UV2                       `DATA_ADDRESS_WIDTH'd49
179
`define CREG_TRI_DIFFUSE               `DATA_ADDRESS_WIDTH'd50
180
`define CREG_TEX_COLOR1                `DATA_ADDRESS_WIDTH'd53
181
`define CREG_TEX_COLOR2                `DATA_ADDRESS_WIDTH'd54
182
`define CREG_TEX_COLOR3                `DATA_ADDRESS_WIDTH'd55
183
`define CREG_TEX_COLOR4                `DATA_ADDRESS_WIDTH'd56
184
`define CREG_TEX_COLOR5                `DATA_ADDRESS_WIDTH'd57
185
`define CREG_TEX_COLOR6                `DATA_ADDRESS_WIDTH'd58
186
`define CREG_TEX_COLOR7                `DATA_ADDRESS_WIDTH'd59
187 37 diegovalve
 
188
 
189 70 diegovalve
/** Non-Swapping registers **/
190 37 diegovalve
// ** User Registers **//
191
//General Purpose registers, the user may put what ever he/she
192
//wants in here...
193 70 diegovalve
`define C1     `DATA_ADDRESS_WIDTH'd64
194
`define C2     `DATA_ADDRESS_WIDTH'd65
195
`define C3     `DATA_ADDRESS_WIDTH'd66
196
`define C4     `DATA_ADDRESS_WIDTH'd67
197
`define C5     `DATA_ADDRESS_WIDTH'd68
198
`define C6     `DATA_ADDRESS_WIDTH'd69
199
`define C7     `DATA_ADDRESS_WIDTH'd70
200 119 diegovalve
`define R1              `DATA_ADDRESS_WIDTH'd71
201
`define R2              `DATA_ADDRESS_WIDTH'd72
202
`define R3              `DATA_ADDRESS_WIDTH'd73
203 70 diegovalve
`define R4              `DATA_ADDRESS_WIDTH'd74
204
`define R5              `DATA_ADDRESS_WIDTH'd75
205
`define R6              `DATA_ADDRESS_WIDTH'd76
206
`define R7              `DATA_ADDRESS_WIDTH'd77
207
`define R8              `DATA_ADDRESS_WIDTH'd78
208
`define R9              `DATA_ADDRESS_WIDTH'd79
209
`define R10             `DATA_ADDRESS_WIDTH'd80
210
`define R11             `DATA_ADDRESS_WIDTH'd81
211
`define R12             `DATA_ADDRESS_WIDTH'd82
212 37 diegovalve
 
213 70 diegovalve
//** Internal Registers **//
214 119 diegovalve
`define CREG_PROJECTION_WINDOW_SCALE   `DATA_ADDRESS_WIDTH'd83
215
`define CREG_UNORMALIZED_DIRECTION     `DATA_ADDRESS_WIDTH'd84
216
`define CREG_RAY_DIRECTION             `DATA_ADDRESS_WIDTH'd85
217
`define CREG_E1_LAST                   `DATA_ADDRESS_WIDTH'd86
218
`define CREG_E2_LAST                   `DATA_ADDRESS_WIDTH'd87
219
`define CREG_T                         `DATA_ADDRESS_WIDTH'd88
220
`define CREG_P                         `DATA_ADDRESS_WIDTH'd89
221
`define CREG_Q                         `DATA_ADDRESS_WIDTH'd90
222
`define CREG_UV0_LAST                  `DATA_ADDRESS_WIDTH'd91
223
`define CREG_UV1_LAST                  `DATA_ADDRESS_WIDTH'd92
224
`define CREG_UV2_LAST                  `DATA_ADDRESS_WIDTH'd93
225
`define CREG_TRI_DIFFUSE_LAST          `DATA_ADDRESS_WIDTH'd94
226
`define CREG_LAST_t                    `DATA_ADDRESS_WIDTH'd95
227
`define CREG_LAST_u                    `DATA_ADDRESS_WIDTH'd96
228
`define CREG_LAST_v                    `DATA_ADDRESS_WIDTH'd97
229
`define CREG_COLOR_ACC                 `DATA_ADDRESS_WIDTH'd98
230
`define CREG_t                         `DATA_ADDRESS_WIDTH'd99
231
`define CREG_E1                        `DATA_ADDRESS_WIDTH'd100
232
`define CREG_E2                        `DATA_ADDRESS_WIDTH'd101
233
`define CREG_DELTA                     `DATA_ADDRESS_WIDTH'd102
234
`define CREG_u                         `DATA_ADDRESS_WIDTH'd103
235
`define CREG_v                         `DATA_ADDRESS_WIDTH'd104
236
`define CREG_H1                        `DATA_ADDRESS_WIDTH'd105
237
`define CREG_H2                        `DATA_ADDRESS_WIDTH'd106
238
`define CREG_H3                        `DATA_ADDRESS_WIDTH'd107
239
`define CREG_PIXEL_PITCH               `DATA_ADDRESS_WIDTH'd108
240 76 diegovalve
 
241 119 diegovalve
`define CREG_LAST_COL                  `DATA_ADDRESS_WIDTH'd109 //the last valid column, simply CREG_RESOLUTIONX - 1
242 70 diegovalve
`define CREG_TEXTURE_COLOR             `DATA_ADDRESS_WIDTH'd110
243 119 diegovalve
`define CREG_PIXEL_2D_POSITION         `DATA_ADDRESS_WIDTH'd111
244
`define CREG_TEXWEIGHT1                `DATA_ADDRESS_WIDTH'd112
245
`define CREG_TEXWEIGHT2                `DATA_ADDRESS_WIDTH'd113
246
`define CREG_TEXWEIGHT3                `DATA_ADDRESS_WIDTH'd114
247
`define CREG_TEXWEIGHT4                `DATA_ADDRESS_WIDTH'd115
248 104 diegovalve
`define CREG_TEX_COORD1                `DATA_ADDRESS_WIDTH'd116
249
`define CREG_TEX_COORD2                `DATA_ADDRESS_WIDTH'd117
250
`define R99                            `DATA_ADDRESS_WIDTH'd118
251
`define CREG_ZERO                      `DATA_ADDRESS_WIDTH'd119
252 119 diegovalve
`define CREG_CURRENT_OUTPUT_PIXEL      `DATA_ADDRESS_WIDTH'd120
253
`define CREG_3                         `DATA_ADDRESS_WIDTH'd121
254 115 diegovalve
`define CREG_012                       `DATA_ADDRESS_WIDTH'd122
255 37 diegovalve
 
256 70 diegovalve
//** Ouput registers **//
257 37 diegovalve
 
258 119 diegovalve
`define OREG_PIXEL_COLOR               `DATA_ADDRESS_WIDTH'd128
259
`define OREG_TEX_COORD1                `DATA_ADDRESS_WIDTH'd129
260
`define OREG_TEX_COORD2                `DATA_ADDRESS_WIDTH'd130
261
`define OREG_ADDR_O                    `DATA_ADDRESS_WIDTH'd131
262 37 diegovalve
//-------------------------------------------------------------
263
//*** Instruction Set ***
264 120 diegovalve
//The order of the instructions is important here!. Don't change
265
//it unless you know what you are doing. For example all the 'SET'
266 37 diegovalve
//family of instructions have the MSB bit in 1. This means that
267
//if you add an instruction and the MSB=1, this instruction will treated
268
//as type II (see manual) meaning the second 32bit argument is expected to be
269
//an inmediate value instead of a register address!
270
//Another example is that in the JUMP family Bits 3 and 4 have a special
271
//meaning: b4b3 = 01 => X jump type, b4b3 = 10 => Y jump type, finally 
272
//b4b3 = 11 means Z jump type.
273
//All this is just to tell you: Don't play with these values!
274
 
275
// *** Type I Instructions (OP DST REG1 REG2) ***
276 119 diegovalve
`define NOP    `INSTRUCTION_OP_LENGTH'b0_000000         //0
277 37 diegovalve
`define ADD     `INSTRUCTION_OP_LENGTH'b0_000001        //1
278
`define SUB             `INSTRUCTION_OP_LENGTH'b0_000010        //2
279
`define DIV             `INSTRUCTION_OP_LENGTH'b0_000011        //3
280
`define MUL     `INSTRUCTION_OP_LENGTH'b0_000100        //4
281
`define MAG             `INSTRUCTION_OP_LENGTH'b0_000101        //5
282
`define COPY    `INSTRUCTION_OP_LENGTH'b0_000111        //7
283
`define JGX             `INSTRUCTION_OP_LENGTH'b0_001_000       //8
284
`define JLX             `INSTRUCTION_OP_LENGTH'b0_001_001       //9
285 70 diegovalve
`define JEQX    `INSTRUCTION_OP_LENGTH'b0_001_010       //10 - A
286
`define JNEX    `INSTRUCTION_OP_LENGTH'b0_001_011       //11 - B
287
`define JGEX    `INSTRUCTION_OP_LENGTH'b0_001_100       //12 - C
288
`define JLEX    `INSTRUCTION_OP_LENGTH'b0_001_101       //13 - D
289
`define INC             `INSTRUCTION_OP_LENGTH'b0_001_110       //14 - E
290
`define ZERO    `INSTRUCTION_OP_LENGTH'b0_001_111       //15 - F
291 37 diegovalve
`define JGY             `INSTRUCTION_OP_LENGTH'b0_010_000       //16
292
`define JLY             `INSTRUCTION_OP_LENGTH'b0_010_001       //17
293
`define JEQY    `INSTRUCTION_OP_LENGTH'b0_010_010       //18
294
`define JNEY    `INSTRUCTION_OP_LENGTH'b0_010_011       //19
295
`define JGEY    `INSTRUCTION_OP_LENGTH'b0_010_100       //20
296
`define JLEY    `INSTRUCTION_OP_LENGTH'b0_010_101       //21
297
`define CROSS   `INSTRUCTION_OP_LENGTH'b0_010_110       //22
298
`define DOT             `INSTRUCTION_OP_LENGTH'b0_010_111       //23
299
`define JGZ             `INSTRUCTION_OP_LENGTH'b0_011_000       //24
300
`define JLZ             `INSTRUCTION_OP_LENGTH'b0_011_001       //25
301
`define JEQZ    `INSTRUCTION_OP_LENGTH'b0_011_010       //26
302
`define JNEZ    `INSTRUCTION_OP_LENGTH'b0_011_011       //27
303
`define JGEZ    `INSTRUCTION_OP_LENGTH'b0_011_100       //28
304
`define JLEZ    `INSTRUCTION_OP_LENGTH'b0_011_101       //29
305
 
306
//The next instruction is for simulation debug only
307
//not to be synthetized! Pretty much behaves the same
308
//as a NOP, only that prints the register value to
309
//a log file called 'Registers.log'
310
`ifdef DEBUG
311
`define DEBUG_PRINT `INSTRUCTION_OP_LENGTH'b0_011_110   //30
312
`endif
313
 
314 119 diegovalve
`define MULP     `INSTRUCTION_OP_LENGTH'b0_011_111                      //31    R1.z = S1.x * S1.y
315
`define MOD      `INSTRUCTION_OP_LENGTH'b0_100_000                      //32    R = MODULO( S1,S2 )
316
`define FRAC     `INSTRUCTION_OP_LENGTH'b0_100_001                      //33    R =FractionalPart( S1 )
317
`define INTP     `INSTRUCTION_OP_LENGTH'b0_100_010                      //34    R =IntergerPart( S1 )
318
`define NEG      `INSTRUCTION_OP_LENGTH'b0_100_011                      //35    R = -S1
319
`define DEC      `INSTRUCTION_OP_LENGTH'b0_100_100                      //36    R = S1--
320 37 diegovalve
`define XCHANGEX `INSTRUCTION_OP_LENGTH'b0_100_101              //              R.x = S2.x, R.y = S1.y, R.z = S1.z
321
`define XCHANGEY `INSTRUCTION_OP_LENGTH'b0_100_110              //              R.x = S1.x, R.y = S2.y, R.z = S1.z
322
`define XCHANGEZ `INSTRUCTION_OP_LENGTH'b0_100_111              //              R.x = S1.x, R.y = S1.y, R.z = S2.z
323
`define IMUL     `INSTRUCTION_OP_LENGTH'b0_101_000              //              R = INTEGER( S1 * S2 )
324
`define UNSCALE  `INSTRUCTION_OP_LENGTH'b0_101_001              //              R = S1 >> SCALE
325
`define RESCALE  `INSTRUCTION_OP_LENGTH'b0_101_010              //              R = S1 << SCALE
326
`define INCX     `INSTRUCTION_OP_LENGTH'b0_101_011         //    R.X = S1.X + 1
327
`define INCY     `INSTRUCTION_OP_LENGTH'b0_101_100         //    R.Y = S1.Y + 1
328 104 diegovalve
`define INCZ     `INSTRUCTION_OP_LENGTH'b0_101_101         //    R.Z = S1.Z + 1
329
`define OMWRITE  `INSTRUCTION_OP_LENGTH'b0_101_111         //47    IO write to O memory
330 119 diegovalve
`define TMREAD   `INSTRUCTION_OP_LENGTH'b0_110_000         //48    IO read from T memory
331 104 diegovalve
`define LEA      `INSTRUCTION_OP_LENGTH'b0_110_001         //49    Load effective address
332 37 diegovalve
 
333
//*** Type II Instructions (OP DST REG1 IMM) ***
334 60 diegovalve
`define RETURN          `INSTRUCTION_OP_LENGTH'b1_000000 //64  0x40
335 119 diegovalve
`define SETX            `INSTRUCTION_OP_LENGTH'b1_000001 //65  0x41
336
`define SETY            `INSTRUCTION_OP_LENGTH'b1_000010 //66
337
`define SETZ            `INSTRUCTION_OP_LENGTH'b1_000011 //67
338
`define SWIZZLE3D       `INSTRUCTION_OP_LENGTH'b1_000100 //68 
339
`define JMP             `INSTRUCTION_OP_LENGTH'b1_011000 //56
340 104 diegovalve
`define CALL            `INSTRUCTION_OP_LENGTH'b1_011001 //57
341
`define RET             `INSTRUCTION_OP_LENGTH'b1_011010 //58
342 60 diegovalve
 
343 37 diegovalve
//-------------------------------------------------------------
344
 
345 120 diegovalve
//All the posible values for the SWIZZLE3D instruction are defined next
346 37 diegovalve
`define SWIZZLE_XXX             32'd0
347
`define SWIZZLE_YYY             32'd1
348
`define SWIZZLE_ZZZ             32'd2
349
`define SWIZZLE_XYY             32'd3
350
`define SWIZZLE_XXY             32'd4
351
`define SWIZZLE_XZZ             32'd5
352
`define SWIZZLE_XXZ             32'd6
353
`define SWIZZLE_YXX             32'd7
354
`define SWIZZLE_YYX             32'd8
355
`define SWIZZLE_YZZ             32'd9
356
`define SWIZZLE_YYZ             32'd10
357
`define SWIZZLE_ZXX             32'd11
358
`define SWIZZLE_ZZX             32'd12
359
`define SWIZZLE_ZYY             32'd13
360
`define SWIZZLE_ZZY             32'd14
361
`define SWIZZLE_XZX             32'd15
362
`define SWIZZLE_XYX             32'd16
363
`define SWIZZLE_YXY             32'd17
364
`define SWIZZLE_YZY             32'd18
365
`define SWIZZLE_ZXZ             32'd19
366
`define SWIZZLE_ZYZ             32'd20
367
`define SWIZZLE_YXZ             32'd21
368
 
369
 

powered by: WebSVN 2.1.0

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