diff --git a/libraries/base/common/src/vhdl/common_pkg.vhd b/libraries/base/common/src/vhdl/common_pkg.vhd index dd8e2b4c9e2b3864e09fddd1ca1780bee457813b..530ec648561940719207aefd953766080524ae1d 100644 --- a/libraries/base/common/src/vhdl/common_pkg.vhd +++ b/libraries/base/common/src/vhdl/common_pkg.vhd @@ -197,7 +197,9 @@ PACKAGE common_pkg IS -- use almost_equal(a/b, 1.0, max_ratio) to verify that a and b differ less than max_ratio/100 percent -- use almost_zero(a/b, max_ratio) to verify that a is less than max_ratio/100 percent of b, so almost zero FUNCTION almost_equal(a, b, delta : REAL) RETURN BOOLEAN; -- return TRUE when abs(a - b) < abs(delta), else return FALSE + FUNCTION almost_equal(a, b, delta : INTEGER) RETURN BOOLEAN; FUNCTION almost_zero(a, delta : REAL) RETURN BOOLEAN; -- return TRUE when abs(a) < abs(delta), else return FALSE + FUNCTION almost_zero(a, delta : INTEGER) RETURN BOOLEAN; FUNCTION ceil_div( n, d : NATURAL) RETURN NATURAL; -- ceil_div = n/d + (n MOD d)/=0 FUNCTION ceil_value( n, d : NATURAL) RETURN NATURAL; -- ceil_value = ceil_div(n, d) * d @@ -678,12 +680,26 @@ PACKAGE BODY common_pkg IS RETURN FALSE; END IF; END; + + FUNCTION almost_equal(a, b, delta : INTEGER) RETURN BOOLEAN IS + BEGIN + IF ABS(a - b) < ABS(delta) THEN + RETURN TRUE; + ELSE + RETURN FALSE; + END IF; + END; FUNCTION almost_zero(a, delta : REAL) RETURN BOOLEAN IS BEGIN RETURN almost_equal(a, 0.0, delta); END; + FUNCTION almost_zero(a, delta : INTEGER) RETURN BOOLEAN IS + BEGIN + RETURN almost_equal(a, 0, delta); + END; + FUNCTION ceil_div(n, d : NATURAL) RETURN NATURAL IS BEGIN RETURN n/d + sel_a_b(n MOD d = 0, 0, 1);