ИЛИ все элементы std_logic_vector с гибким размером - PullRequest
1 голос
/ 01 ноября 2019

У меня есть вектор, который имеет настраиваемый размер, например

signal a_vector : std_logic_vector(size-1 downto 0);

, где size определено в файле конфигурации. Теперь я хотел бы, чтобы ИЛИ все элементы a_vector в отдельный std_logic таким образом, как

signal result : std_logic;
result <= a_vector(0) or a_vector(1) or ... or a_vector(size-1)

Есть ли способ сделать это с помощью оператора GENERATE, яне могу понять это.

scary_jeff ответ работает как заклинание для данной проблемы. Есть ли аналогичный способ, если бы у меня был

type byte_array is array (0 to size) of std_logic_vector(7 downto 0);
signal a_vector : byte_array;

, и я бы хотел иметь

result <= a_vector(0)(1) or a_vector(1)(1) or ... or a_vector(size-1)(1);

1 Ответ

3 голосов
/ 01 ноября 2019

Если вы используете VHDL2008 или более позднюю версию, в которую встроены «редуктивные» функции and и or, вы можете просто написать result <= or(a_vector); или result <= or a_vector;.

Если нет, выможно использовать цикл for (не цикл generate). Вы можете поместить этот цикл в функцию, если хотите.

function reductive_or (a_vector : std_logic_vector) return std_logic is
  variable r : std_logic := '0';
begin
  for i in a_vector`range loop
    r := r or a_vector(i);
  end loop;
  return r;
end function;
...