Правя проект в 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