From 75d51c0b92015b48b176374f9a387b2d25fa8198 Mon Sep 17 00:00:00 2001 From: Dimitris Lampridis <dimitris.lampridis@cern.ch> Date: Fri, 13 Dec 2019 10:16:09 +0100 Subject: [PATCH] [common] add VHDL functions to upper/lower case characters and strings --- CHANGELOG.md | 2 ++ modules/common/gencores_pkg.vhd | 48 +++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index dafb1c35..f96fdc8a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +### Added +- VHDL functions to convert characters and strings to upper/lower case. ## [1.0.0] - 2019-10-21 ### Added diff --git a/modules/common/gencores_pkg.vhd b/modules/common/gencores_pkg.vhd index 4b0f986d..454c8e64 100644 --- a/modules/common/gencores_pkg.vhd +++ b/modules/common/gencores_pkg.vhd @@ -726,6 +726,12 @@ package gencores_pkg is function f_pick (cond : std_logic; if_1 : std_logic_vector; if_0 : std_logic_vector) return std_logic_vector; + -- Functions to convert characters and strings to upper/lower case + function to_upper(c : character) return character; + function to_lower(c : character) return character; + function to_upper(s : string) return string; + function to_lower(s : string) return string; + end package; package body gencores_pkg is @@ -954,4 +960,46 @@ package body gencores_pkg is return f_pick (f_to_std_logic(cond), if_1, if_0); end function f_pick; + ------------------------------------------------------------------------------ + -- Functions to convert characters and strings to upper/lower case + ------------------------------------------------------------------------------ + + function to_upper(c : character) return character is + variable i : integer; + begin + i := character'pos(c); + if (i > 96 and i < 123) then + i := i - 32; + end if; + return character'val(i); + end function to_upper; + + function to_lower(c : character) return character is + variable i : integer; + begin + i := character'pos(c); + if (i > 64 and i < 91) then + i := i + 32; + end if; + return character'val(i); + end function to_lower; + + function to_upper(s : string) return string is + variable uppercase : string (s'range); + begin + for i in s'range loop + uppercase(i) := to_upper(s(i)); + end loop; + return uppercase; + end to_upper; + + function to_lower(s : string) return string is + variable lowercase : string (s'range); + begin + for i in s'range loop + lowercase(i) := to_lower(s(i)); + end loop; + return lowercase; + end to_lower; + end gencores_pkg; -- GitLab