1) Вы не можете назначить значение сигнала, например signal<='100'
, не объявив его. Вы не правы.
VHDL не любит сюрпризы. Все должно быть объявлено до его использования.
Таким образом, вы должны объявить сигнал (в декларативной области из architecture
, то есть между architecture
и begin
):
architecture SOME_NAME of SOME_OTHER_NAME is
-- declare signals (and other things) here, eg
signal SOME_SIGNAL_NAME : std_logic; -- or some other type
begin
Вы также можете инициализировать сигналы, когда вы объявляете их, но я бы очень осторожны, делая это, если вы собираетесь синтезируют код, например:
signal SOME_SIGNAL_NAME : std_logic := '0';
2) Это ext_imme<=(31 downto 16=> imme(15)) & imme
является примером агрегат и a конкатенация. Агрегат - это способ присвоения элементам массива. Конкатенация - это способ объединить два массива вместе, чтобы создать больший массив.
В вашем примере это совокупность: (31 downto 16=> imme(15))
. Здесь вы делаете биты 31 до 16 равными бит 15 imme
. Это дает вам 16 бит, равный бит 15 imme
.
Операция «&» - оператор конкатенации. В вашем примере вы объединяете 16 бит агрегата с 16 битами imme
, чтобы составить 32 бита.
Здесь приведены некоторые другие примеры использования агрегатов: http://www.edaplayground.com/x/CQm.
Ваш синтаксис неверен ('some_signal <=" 100 ";' 'signal' является зарезервированным словом), а также ваше предположение. Именованный сигнал всегда объявляется, это имя может быть префиксом для имени неявного сигнала, имени среза или имени с индексом. Объектом является тип и значение, обозначенное его объявленным именем. Выражение в правой части назначения сигнала к 'ext_imme' содержит агрегат, назначающий длину массива 15 с каждым элементом, имеющим значение imme (15), и объединение этого массива с imme (предположительно с диапазоном 15 до 0) создавая значение массива 32 long. Показать объявления. – user1155120