summaryrefslogtreecommitdiff
path: root/platform/wavelet3d/gfx_pkg.sv
diff options
context:
space:
mode:
authorAlejandro Soto <alejandro@34project.org>2024-03-14 23:05:08 -0600
committerAlejandro Soto <alejandro@34project.org>2024-03-14 23:05:08 -0600
commiteb49b6d871825eaea4e93d47a4368df368b7101a (patch)
tree1621ca431325af0f70a5b193e3c2926e5b07c174 /platform/wavelet3d/gfx_pkg.sv
parent2034e0a7bc2099e43739dc9f47b25369051307c6 (diff)
platform/wavelet3d: implement fixed-point multiply-add and dot-add
Diffstat (limited to '')
-rw-r--r--platform/wavelet3d/gfx_pkg.sv23
1 files changed, 21 insertions, 2 deletions
diff --git a/platform/wavelet3d/gfx_pkg.sv b/platform/wavelet3d/gfx_pkg.sv
index 72c8f80..53bb8cd 100644
--- a/platform/wavelet3d/gfx_pkg.sv
+++ b/platform/wavelet3d/gfx_pkg.sv
@@ -3,11 +3,17 @@ package gfx;
localparam int SHADER_LANES = 4;
typedef logic[31:0] word;
- typedef logic[63:0] dword;
localparam int SUBWORD_BITS = $clog2($bits(word)) - $clog2($bits(byte));
localparam int BYTES_PER_WORD = 1 << SUBWORD_BITS;
+ typedef word uword;
+ typedef logic signed[$bits(word) - 1:0] sword;
+ typedef logic[$bits(word) / 2 - 1:0] uhword;
+ typedef logic signed[$bits(word) / 2 - 1:0] shword;
+ typedef logic[2 * $bits(word) - 1:0] udword;
+ typedef logic signed[2 * $bits(word) - 1:0] sdword;
+
typedef logic[7:0] float_exp;
typedef logic[$bits(word) - $bits(float_exp) - 2:0] float_mant;
typedef logic[$bits(float_mant):0] float_mant_full; // Incluye '1.' explĂ­cito
@@ -112,7 +118,7 @@ package gfx;
float_exp exp;
float_class a_class,
b_class;
- dword product;
+ udword product;
logic sign,
overflow;
} fpint_mulclass_mnorm;
@@ -224,6 +230,19 @@ package gfx;
overflow;
} fpint_rnorm_encode;
+ // Q22.10
+ typedef logic[9:0] fixed_frac;
+ typedef logic[$bits(word) - $bits(fixed_frac) - 1:0] fixed_int;
+
+ typedef struct packed signed
+ {
+ fixed_int fint; // 'int' es una keyword
+ fixed_frac frac;
+ } fixed;
+
+ localparam int FIXED_MULADD_DEPTH = 5;
+ localparam int FIXED_DOTADD_DEPTH = 2 * FIXED_MULADD_DEPTH;
+
localparam int SCHED_BRAM_WORDS = 2048; // 8KiB
typedef word irq_lines;