Многомерный псевдоним в VHDL - PullRequest
0 голосов
/ 09 февраля 2020

Я хотел бы спросить, возможно ли использовать псевдоним с многомерными массивами в VHDL и как решить (1).

У меня есть следующий массив, определенный в начале архитектуры>

subtype WORD8 is STD_LOGIC_VECTOR (7 downto 0);  
type IMEM is array (0 to 576) of WORD8;
signal MEM: IMEM;

Через программу я использую процессы и псевдоним части памяти, например, так>

alias Version: STD_LOGIC_VECTOR (3 downto 0) is MEM(0)(3 downto 0);
alias IHL: STD_LOGIC_VECTOR (3 downto 0) is MEM(0)(7 downto 4);

Эта следующая строка тоже псевдоним, обе строки работают

alias TOS: STD_LOGIC_VECTOR (7 downto 0) is MEM(1);
alias TOS: STD_LOGIC_VECTOR (7 downto 0) is MEM(1)(7 downto 0);

Теперь у меня есть данные, которые больше, чем WORD8, длиной 2xWORD8. Я попробовал следующий код, но безуспешно. Это вызывает>

Ошибка: индексированное имя не является 'std_logic_vector'

--(1) How to solve this?
alias TL: STD_LOGIC_VECTOR (15 downto 0) is MEM(3 downto 2);

Эта строка также выдает ту же ошибку>

alias TL: STD_LOGIC_VECTOR (15 downto 0) is MEM(3 downto 2)(7 downto 0);

Я экспериментировал с обходным путем но тоже безуспешно>

alias TL2: STD_LOGIC_VECTOR (7 downto 0) is MEM(2);
alias TL3: STD_LOGIC_VECTOR (7 downto 0) is MEM(3);
alias TL4: STD_LOGIC_VECTOR (15 downto 0) is TL3&TL2;

1 Ответ

1 голос
/ 09 февраля 2020

Это все из-за строгой типизации в VHDL и из-за правил псевдонимов. Псевдонимы должны быть непосредственно для объекта того же типа. Это также не может быть для нового объекта, который не из объявления, такого как функция return. Все ваши ошибки из-за этих ограничений.

std_logic_vector(7 downto 0) - это 1d массив std_logi c. MEM(3 downto 2)(7 downto 0) является 1d массивом std_logic_vectors. Поэтому не тот же тип

TL3 & TL2 не является объявленным объектом, это возвращаемое значение функции.

Ваше единственное решение будет использовать сигнал (или переменную), потому что вы создаете новый подтип.

signal TL4: STD_LOGIC_VECTOR (15 downto 0);

TL4 <= TL2 & TL3;
...