Публикация этого вопроса на SO, а не EE, заключается в том, что я борюсь с недостатками кодирования/программного обеспечения.bit_vector ограничивает нарушение статической константой
Я новичок в VHDL и просматриваю книгу «Free range VHDL». Играя с bit_vector
, я узнал, что для доступа к одиночному проводу в синтаксисе шины следует bus_name(0)
(0, например,).
Помня об этом, я написал простое представление 4-х входного мультиплексора.
library ieee;
use ieee.std_logic_1164.all;
entity Multiplexer4_1 is
port
(
data : in bit_vector(3 to 0);
selector : in bit_vector(1 to 0);
output : out bit
);
end entity Multiplexer4_1;
architecture m4_1 of Multiplexer4_1 is
begin
output <= data(3) when (selector = "11") else
data(2) when (selector = "10") else
data(1) when (selector = "01") else
data(0) when (selector = "00") else
'0';
end architecture m4_1;
Я использую ghdl
обрабатывать VHDL под Linux с помощью следующей команды.
ghdl -a 4Multiplexer.vhdl
В результате я получаю 4 сообщения об ошибках, по-видимому, из-за data(0)
, data(1)
и другие, которые перечислены ниже.
4Multiplexer.vhdl:15:23: static constant violates bounds
4Multiplexer.vhdl:16:21: static constant violates bounds
4Multiplexer.vhdl:17:21: static constant violates bounds
4Multiplexer.vhdl:18:21: static constant violates bounds
ghdl: compilation error
Вопросов:
- Как решить эту проблему?
- Если
bus_name(index)
является правильным синтаксисом для этого?
Update:
Не делать ту же ошибку, что я сделал это крайне важно, чтобы понять, как массивы/диапазоны работают в VHDL.
Спасибо за помощь!
IEEE Std 1076-2008, 5.2.1 «Диапазон от L до R называется восходящим диапазоном, если L> R, тогда диапазон является нулевым диапазоном». 5.3.2.2 «.... Если какой-либо из дискретных диапазонов определяет нулевой диапазон, любой ограниченный таким образом массив является нулевым массивом, не имеющим элементов». Почему при анализе? «9.4.1» ... Определенные формы выражения могут быть оценены во время анализа проектной единицы, в которой они появляются; такое выражение называется локально статическим. ", 9.4.2 Локально статические выражения, n)" Индексированное имя, префикс которого является локально статическим первичным, а индексные выражения - это все локально статические выражения ". – user1155120
Битовый_вектор не имеет значащего бита или младшего значащего бита, а numeric_bit. подписанный или .unsigned (самый левый - MS). Использование bit_Vector с пакетом numeric_bit_unsigned сделает арифметически левой MS. Это не так. Предложение use для доступа к std_logic_1164 тоже не нужно. – user1155120
Да. Это не так, как MSB и LSB. Это просто для интерпретации пользователя. Спасибо, что указали ошибку – Anonymous