Поскольку вы упоминаете Vivado, я думаю, вас больше интересует семантика синтеза, чем семантика моделирования. Таким образом, я предполагаю, что ваши объекты std_logic_vector
несут информацию, которую можно рассматривать как двоичное представление целых чисел, и что вас не интересуют значения std_logic
, отличные от '0'
и '1'
.
Чтобы преобразовать значения std_logic_vector
в перечислимый тип, вам сначала понадобится достаточно большой перечислимый тип. Итак, если ваши векторы имеют длину N
бит, вам понадобится перечисляемый тип 2^N
значений, например, если N=16
:
type s2e_t is (s2e0, s2e1,... , s2e65535);
(много ввода, но как вы просили. ..) Затем вы можете просто преобразовать свои векторные значения в неотрицательные целочисленные значения и выбрать соответствующее значение перечислимого типа с атрибутом val
type (двойным атрибуту pos
):
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
...
type s2e_t is (s2e0, s2e1,... , s2e65535);
signal e: s2e_t;
signal s: std_logic_vector(15 downto 0);
...
e <= s2e_t'val(to_integer(unsigned(s));