crhelpers: Constraint "crnum" integer
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>
Wed, 16 Oct 2019 01:11:16 +0000 (12:11 +1100)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Wed, 16 Oct 2019 23:06:10 +0000 (10:06 +1100)
This seems to save quite a few LUTs

Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
crhelpers.vhdl
execute1.vhdl

index f51110c32712a5047a1ba78eefac56b0a2103dae..1e6160f3ff8d54b2d766fb1671b88b6a708c4c7d 100644 (file)
@@ -5,13 +5,16 @@ library work;
 use work.common.all;
 
 package crhelpers is
-    function fxm_to_num(fxm: std_ulogic_vector(7 downto 0)) return integer;
-    function num_to_fxm(num: integer) return std_ulogic_vector;
+    subtype crnum_t is integer range 0 to 7;
+    subtype crmask_t is std_ulogic_vector(7 downto 0);
+
+    function fxm_to_num(fxm: crmask_t) return crnum_t;
+    function num_to_fxm(num: crnum_t) return crmask_t;
 end package crhelpers;
 
 package body crhelpers is
 
-    function fxm_to_num(fxm: std_ulogic_vector(7 downto 0)) return integer is
+    function fxm_to_num(fxm: crmask_t) return crnum_t is
     begin
         -- If multiple fields are set (undefined), match existing
         -- hardware by returning the first one.
@@ -27,7 +30,7 @@ package body crhelpers is
         return 7;
     end;
 
-    function num_to_fxm(num: integer) return std_ulogic_vector is
+    function num_to_fxm(num: crnum_t) return crmask_t is
     begin
         case num is
             when 0 =>
index 002bdac45762ff63636ca2eb2bfb5d802af43d63..6d3a936a822819b8cc7d115d8e4f2936e08569a8 100644 (file)
@@ -109,8 +109,8 @@ begin
        variable newcrf : std_ulogic_vector(3 downto 0);
        variable result_with_carry : std_ulogic_vector(64 downto 0);
        variable result_en : integer;
-       variable crnum : integer;
-       variable scrnum : integer;
+       variable crnum : crnum_t;
+       variable scrnum : crnum_t;
        variable lo, hi : integer;
        variable sh, mb, me : std_ulogic_vector(5 downto 0);
        variable sh32, mb32, me32 : std_ulogic_vector(4 downto 0);