VHDL - PROCESS

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?

Reply to
stchebel
Loading thread data ...

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.

Reply to
Jakub Rakus

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

Reply to
nowyr

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

Reply to
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 .....

Reply to
nowyr

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

Reply to
Adam Górski

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.

Reply to
nowyr

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

Reply to
Adam Górski

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

Reply to
nowyr

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.