From eb49b6d871825eaea4e93d47a4368df368b7101a Mon Sep 17 00:00:00 2001 From: Alejandro Soto Date: Thu, 14 Mar 2024 23:05:08 -0600 Subject: platform/wavelet3d: implement fixed-point multiply-add and dot-add --- platform/wavelet3d/gfx_pkg.sv | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) (limited to 'platform/wavelet3d/gfx_pkg.sv') 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; -- cgit v1.2.3