Я делаю проект на VHDL и застрял на этом этапе. Любая помощь приветствуется. Проблема описывается следующим образом: у меня есть 2D-массив с N (числом) сигналов std_logic_vector. Число N определено в дженериках, поэтому мы не знаем конкретную длину массива (вместо этого мы используем N). Этот массив используется как список чувствительности процесса для его запуска. Вот так: process(arrayOfSignals)
Мой вопрос: есть ли способ узнать, какой конкретный сигнал массива запустил процесс? (Например, сигнал: arrayOfSignals(2))
Я видел этот пост: Какой сигнал в списке чувствительности запускает процесс, но здесь это не так. Это было бы так, если бы все сигналы их списка чувствительности находились внутри массива, и этот массив запускал процесс.
Чтобы стало ясно, ниже приведен код VHDL того, что я пытаюсь сделать.
process(arrayOfSignals)
begin
for i in 0 to N-1 loop
if arrayOfSignals(i)'transaction'event then --I want to determine which signal of arrayOfSignals (position in the array) triggerd the process.
case arrayOfSignals(i) is
when "01" =>
AD(i)(30 downto 23) <= AD(i)(7 downto 0);
exit;
when others => null; exit;
end case;
exit;
end if;
end loop;
end process;
'transaction'event
должен делать то, что вы ищете. Процесс запускается'event
для любого сигнала в списке чувствительности, поэтому любое изменение любого бита в сигналеarrayOfSignals
запустит процесс, и вы можете использовать'transaction'event
, чтобы определить, в каких из них произошло событие. - person Tricky   schedule 11.07.2021arrayOfSignals'transaction'event
возвращает True, если какой-либо сигнал во всем массиве запускает процесс. В моем случае я хочу найти конкретный сигнал в массиве, который запускает процесс.arrayOfSignals(i)'transaction'event
не работает, но я написал это выше, чтобы показать вам, что я хочу сделать. - person spisams   schedule 11.07.2021arrayOfSignals(i)'transaction'event
подчеркнуто как ошибка, поэтому не работает. Ошибка простыми словами говорит о том, что атрибут'transaction'event
должен использоваться только для статических значений, а не для индексированных значений. - person spisams   schedule 11.07.2021arrayOfSignals(i)
в свой собственный процесс, чтобы вы могли обнаружитьevent
. Но вы так и не объяснили контекст. То, что вы делаете, кажется гораздо более сложным, чем должно быть. - person Tricky   schedule 11.07.2021'last_value
, который возвращает предыдущее значение одного сигнала (до изменения). Таким образом, я сравниваю все текущие значения массива с предыдущими и должен получить требуемый результат. Проблема сейчас в том, можно ли все это синтезировать. Потому что я прочитал здесь: xilinx.com/support/ documentation/sw_manuals/xilinx2019_2/, что я не могу использовать массивы std_logic_vector в качестве портов. Хотя, в другом посте здесь говорят, что это можно сделать даже в VHDL93. - person spisams   schedule 11.07.2021