summaryrefslogtreecommitdiff
path: root/platform/wavelet3d/gfx_pkg.sv
diff options
context:
space:
mode:
authorAlejandro Soto <alejandro@34project.org>2024-03-07 16:30:11 -0600
committerAlejandro Soto <alejandro@34project.org>2024-03-07 16:30:11 -0600
commit9ecb54925bbbc218c183c0ee9cb3b27bf79e6e80 (patch)
tree5e6d6de284a4d0af04499547ef81b9d53e02ab2d /platform/wavelet3d/gfx_pkg.sv
parent3038edc09a2eb15762f2e58533f429489107520b (diff)
platform/wavelet3d: implement unified fp-integer lane
Diffstat (limited to '')
-rw-r--r--platform/wavelet3d/gfx_pkg.sv24
1 files changed, 20 insertions, 4 deletions
diff --git a/platform/wavelet3d/gfx_pkg.sv b/platform/wavelet3d/gfx_pkg.sv
index e108d7d..cfab6a5 100644
--- a/platform/wavelet3d/gfx_pkg.sv
+++ b/platform/wavelet3d/gfx_pkg.sv
@@ -1,9 +1,10 @@
package gfx;
- typedef logic[31:0] float_word;
+ typedef logic[31:0] word;
+ typedef logic[63:0] dword;
typedef logic[7:0] float_exp;
- typedef logic[$bits(float_word) - $bits(float_exp) - 2:0] float_mant;
+ typedef logic[$bits(word) - $bits(float_exp) - 2:0] float_mant;
typedef logic[$bits(float_mant):0] float_mant_full; // Incluye '1.' explĂ­cito
localparam float_exp FLOAT_EXP_BIAS = (1 << ($bits(float_exp) - 1)) - 1;
@@ -40,14 +41,29 @@ package gfx;
typedef struct packed
{
- float val;
logic exp_max,
exp_min,
mant_zero;
- } float_special;
+ } float_class;
+
+ function float_class classify_float(float in);
+ classify_float.exp_max = &in.exp;
+ classify_float.exp_min = ~|in.exp;
+ classify_float.mant_zero = ~|in.mant;
+ endfunction
+
+ function logic is_float_special(float_class in);
+ is_float_special = in.exp_max | (in.exp_min & ~in.mant_zero);
+ endfunction
/* -> 4,4,4,4,4,4,4,4 -> 8,8,8,8 -> 16,16 -> 32
*/
localparam FADD_CLZ_STAGES = 4;
+ typedef struct packed
+ {
+ logic fadd,
+ fmul;
+ } arith_op;
+
endpackage