blob: 6e96b4e0f4cf834edc349350c79cbbdf17aa70e6 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
`ifndef GFX_DEFS_SV
`define GFX_DEFS_SV
// Esto es arquitectural, no se puede ajustar sin cambiar otras cosas
`define FLOAT_BITS 16
`define FLOATS_PER_VEC 4
`define VECS_PER_MAT 4
// Target de 200MHz (reloj es 143MHz) con float16, rounding aproximado
`define FP_ADD_STAGES 10 // ~401 LUTs
`define FP_MUL_STAGES 5 // ~144 LUTs ~1 bloque DSP
`define FP_INV_STAGES 3 // ~178 LUTs ~1 bloque DSP
typedef logic[`FLOAT_BITS - 1:0] fp;
typedef fp vec2[2];
typedef fp vec4[`FLOATS_PER_VEC];
typedef fp[`FLOATS_PER_VEC - 1:0] vec4_packed;
typedef vec4 mat4[`VECS_PER_MAT];
`define FP_UNIT 16'h3c00
typedef struct packed
{
fp x, y, z, w;
} attr4;
typedef logic[1:0] index4;
`define INDEX4_MIN 2'b00
`define INDEX4_MAX 2'b11
typedef logic[9:0] y_coord;
typedef logic[8:0] x_coord;
typedef logic[18:0] linear_coord;
typedef logic[19:0] half_coord;
`define GFX_X_RES 640
`define GFX_Y_RES 480
`define GFX_LINEAR_RES (`GFX_X_RES * `GFX_Y_RES)
typedef struct packed
{
logic[7:0] r, g, b;
} rgb24;
typedef struct packed
{
logic[9:0] r, g, b;
} rgb30;
`define GFX_MASK_SRAM_STAGES 3
`define GFX_MASK_STAGES (1 + `GFX_MASK_SRAM_STAGES + 1)
`define GFX_SCAN_STAGES 3 // Ajustable
`endif
|