VHDL: Назначение меньшего std_logic_vector большему

Я пытаюсь назначить поменьше std_logic_vector к большему, как это:

library ieee;
    use ieee.std_logic_1164.all;
    use ieee.numeric_std.all;

entity subarray_tb is
end subarray_tb;


architecture VERHALTEN of subarray_tb is 

signal big : std_logic_vector(15 downto 0) := x"A5A5";
signal small : std_Logic_vector(7 downto 0) := x"F0";

begin

  big <= small;

end VERHALTEN;

Как и ожидалось, я получаю следующую ошибку из Modelsim:

** Ошибка (подавляемая): C:/altera/15.1/subarray_tb.vhd(19): (vcom-1272) Ожидаемая длина составляет 16; фактическая длина 8.

Я знаю, как это исправить, но я не доволен результатом, потому что он выглядит очень нечитаемым:

big(big'LEFT downto (big'LEFT-small'LENGTH+1)) <= small;

Я не хочу использовать фиксированные диапазоны в скобках, потому что моя настоящая проблема немного сложнее. Меньший массив представляет собой объединение разных std_logic_vectors, поэтому я хочу, чтобы решение было гибким.

У кого-нибудь есть более приятное решение, которое более читабельно для человека?

1 ответ

Вы могли бы использовать именованный диапазон. Вы определяете subtype:

subtype big_upper is integer range big'LEFT downto (big'LEFT-small'LENGTH+1);

А затем используйте его вместо диапазона:

big(big_upper) <= small;

http://www.edaplayground.com/x/2Pcn

Другие вопросы по тегам