From b2440f3d992af68ad370bad3ab3898aece186c03 Mon Sep 17 00:00:00 2001
From: Eric Kooistra <kooistra@astron.nl>
Date: Mon, 7 Mar 2022 14:56:31 +0100
Subject: [PATCH] Added ROTATE_UVEC().

---
 libraries/base/common/src/vhdl/common_pkg.vhd | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/libraries/base/common/src/vhdl/common_pkg.vhd b/libraries/base/common/src/vhdl/common_pkg.vhd
index 6153caf04a..13d8042484 100644
--- a/libraries/base/common/src/vhdl/common_pkg.vhd
+++ b/libraries/base/common/src/vhdl/common_pkg.vhd
@@ -473,7 +473,9 @@ PACKAGE common_pkg IS
   
   FUNCTION SHIFT_UVEC(vec : STD_LOGIC_VECTOR; shift : INTEGER) RETURN STD_LOGIC_VECTOR;  -- < 0 shift left, > 0 shift right
   FUNCTION SHIFT_SVEC(vec : STD_LOGIC_VECTOR; shift : INTEGER) RETURN STD_LOGIC_VECTOR;  -- < 0 shift left, > 0 shift right
-  
+
+  FUNCTION ROTATE_UVEC(vec : STD_LOGIC_VECTOR; shift : INTEGER) RETURN STD_LOGIC_VECTOR;  -- < 0 rotate left, > 0 rotate right
+
   FUNCTION offset_binary(a : STD_LOGIC_VECTOR) RETURN STD_LOGIC_VECTOR;
   
   FUNCTION truncate(                vec : STD_LOGIC_VECTOR; n              : NATURAL) RETURN STD_LOGIC_VECTOR;  -- remove n LSBits from vec, so result has width vec'LENGTH-n
@@ -2271,6 +2273,17 @@ PACKAGE BODY common_pkg IS
     END IF;
   END;
 
+  FUNCTION ROTATE_UVEC(vec : STD_LOGIC_VECTOR; shift : INTEGER) RETURN STD_LOGIC_VECTOR IS
+  BEGIN
+    IF shift < 0 THEN
+      RETURN STD_LOGIC_VECTOR(ROTATE_LEFT(UNSIGNED(vec), -shift));  -- /<-- vec <--\
+                                                                    -- \---------->/
+    ELSE
+      RETURN STD_LOGIC_VECTOR(ROTATE_RIGHT(UNSIGNED(vec), shift));  -- /--> vec -->\
+                                                                    -- \<----------/
+    END IF;
+  END;
+
   --
   -- offset_binary() : maps offset binary to or from two-complement binary.
   --
-- 
GitLab