Metavalue cleanup for mmu.vhdl
authorMichael Neuling <mikey@neuling.org>
Thu, 14 Jul 2022 00:32:16 +0000 (10:32 +1000)
committerMichael Neuling <mikey@neuling.org>
Thu, 28 Jul 2022 00:16:02 +0000 (10:16 +1000)
Signed-off-by: Michael Neuling <mikey@neuling.org>
mmu.vhdl

index d95cd3cc3eba1b261489d82112dfd368534b5d99..17748228b14e43c31106d15119ae7c1dd6a2c192 100644 (file)
--- a/mmu.vhdl
+++ b/mmu.vhdl
@@ -163,11 +163,15 @@ begin
     begin
         -- mask_count has to be >= 5
         m := x"001f";
-        for i in 5 to 15 loop
-            if i < to_integer(r.mask_size) then
-                m(i) := '1';
-            end if;
-        end loop;
+        if is_X(r.mask_size) then
+            m := (others => 'X');
+        else
+            for i in 5 to 15 loop
+                if i < to_integer(r.mask_size) then
+                    m(i) := '1';
+                end if;
+            end loop;
+        end if;
         mask <= m;
     end process;
 
@@ -178,7 +182,9 @@ begin
     begin
         m := (others => '0');
         for i in 0 to 43 loop
-            if i < to_integer(r.shift) then
+            if is_X(r.shift) then
+                m(i) := 'X';
+            elsif i < to_integer(r.shift) then
                 m(i) := '1';
             end if;
         end loop;