VHDL - PROCESS

Apr 20, 2014 8 Replies

Szczerze powiedziawszy nie za bardzo łapię listę czułości - process(coś_tam).



Przykład, zwykły przerzutnik D, wersja 1:



entity fd is Port ( CLK : in std_logic; D : in std_logic; Q : out std_logic; end fd;



architecture Behavioral of fd is



begin



process (CLK)



begin



if CLK'event and CLK='1' then Q<=D; end if; end process;


end Behavioral;



=================



I teraz to samo bez "process", wersja_2 :



entity fd is Port ( CLK : in std_logic; D : in std_logic; Q : out std_logic; end fd;



architecture Behavioral of fd is



begin



if CLK'event and CLK='1' then Q<=D; end if;


end Behavioral;



=====================



Gdzie jest różnica?


Przy tak krótkim kodzie zawartym wewnątrz procesu, to nigdzie. Teoretycznie to co jest zawarte w procesie będzie się realizować "po kolei", czyli "prawie" jak w programie napisanym na uC. Gdzieś czytałem ostatnio także o innej ciekawej kwestii dotyczącej procesu - mniej więcej chodzi o to, że słowo kluczowe "process" oraz podawana wraz z nim lista czułości jest ważna właściwie tylko dla zwiększenia czytelności kodu oraz przy vhdl-u używanym dla symulacji. Przy syntezie do docelowego układu kompilator zwraca uwagę głównie na zależności logiczne między sygnałami, czyli w tym przypadku na if CLK'event and CLK='1' then.

Przy jednym procesie nie ma różnicy ale jak zrobisz ich kilka to myśl o nich jak o układach scalonych TTL, które sobie posadzisz na płytce i połączysz "signalami". A żeby symulator i explorer architektury ładniej pokazywał później to sobie opisz tak:

U1:process (CLK)

U2:process (CLK)

U3:process (CLK)

Jak masz explorator rysujący obrazki to będziesz miał scalaczki na nim :-0

Jak przeczytam to jeszcze raz to będę gryzł. To NIE jest prawie jak w programie napisanym na uC. To jest zdecydowanie inne od programu napisanego dla uC.

Faktycznie największą rolę odgrywa w symulacji. Należy pamiętać że bardzo łatwo jest napisać fragment niesyntezowalny, czyli taki którego nie da się skompilować na 99% dostępnych układów.

Pzdr

Adam Górski

Lista czułości VHDL obejmuje zegary i to co przed nimi.jako input do procesu

U12:process(clk, reset) if reset='0' then x <= '0'; elseif clk'event and clk='1' then .....

W dniu 2014-04-24 14:38, nowyr pisze:

Lista czułości VHDL definiuje przy zmianach jakich sygnałów proces powinien zostać wznowiony.

Adam

Ale nie wszystkich. Tylko zegar i asynchroniczne sygnały nierejestrowane. Wszystko co siedzi pod even'em nie wpisujesz, bo to załatwia zbocze zegara, a nie lista czułości. Cokolwiek będzie pomiędzy elseif clk'event and clk='1' then oraz endifem dla niego nie wpisujemy na listę czułości procesu.

Za bardzo patrzysz na to przez pryzmat architektury na którą piszesz. To że większość fpga ma 4 i więcej wejściowy LUT + reg + kilka dodatków wymusza takie a nie inną konstrukcję. VHDL pozwala na dużo więcej niż może zrealizować hardware.

Najprostszym przykładem jest proces reagujący na oba zbocza. Symuluje się świetnie a "skompilować" już ciężko. Nie znaczy to jednak że projektując ASIC takie konstrukcje nie są możliwe.

Poza tym , nigdzie nie napisałem że to bzdury. Raczej jedna z możliwości.

Pzdr.

Adam Górski

Obaj mamy po części rację :-)

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required