From 9ecb54925bbbc218c183c0ee9cb3b27bf79e6e80 Mon Sep 17 00:00:00 2001 From: Alejandro Soto Date: Thu, 7 Mar 2024 16:30:11 -0600 Subject: platform/wavelet3d: implement unified fp-integer lane --- platform/wavelet3d/gfx_pkg.sv | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) (limited to 'platform/wavelet3d/gfx_pkg.sv') 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 -- cgit v1.2.3