2016-03-31 5 views
0

Я новичок в vhdl, не очень понимаюсь на сигнале.Использование декларации сигнала Vhdl

Насколько я понимаю, вы можете назначить значение сигнала, например signal<='100', но вам не нужно его объявлять. Это верно?

Кроме того, для расширения знака ext_imme<=(31 downto 16=> imme(15)) & imme; для чего это необходимо для продления 16 бит до 32 бит путем повторения imme(15)?

+0

Ваш синтаксис неверен ('some_signal <=" 100 ";' 'signal' является зарезервированным словом), а также ваше предположение. Именованный сигнал всегда объявляется, это имя может быть префиксом для имени неявного сигнала, имени среза или имени с индексом. Объектом является тип и значение, обозначенное его объявленным именем. Выражение в правой части назначения сигнала к 'ext_imme' содержит агрегат, назначающий длину массива 15 с каждым элементом, имеющим значение imme (15), и объединение этого массива с imme (предположительно с диапазоном 15 до 0) создавая значение массива 32 long. Показать объявления. – user1155120

ответ

2

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.

Смежные вопросы