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

Subversion Repositories theia_gpu

[/] [theia_gpu/] [branches/] [icarus_version/] [rtl/] [aDefinitions.v] - Blame information for rev 214

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

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

powered by: WebSVN 2.1.0

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