Ho iniziato da poco a fare qualche esperimento in VHDL ma ho qualche dubbio:
1) Esattamente quale è la differenza tra i costrutti sequenziali e quelli concorrenti ? Non riesco a capire la loro differenza a livello implementativo.
2) All'interno di un processo è obbligatorio inserire solo costrutti sequenziali ? E' per come viene sintetizzato un processo ? Lo stesso vale per i costrutti sequenziali ? Per es. all'interno di un if non posso metterne uno concorrente ?
Scusate per le molte domande forse banali ma sono agli inizi...
Innanzitutto ricordati *sempre* che il VHDL e' un linguaggio molto potente che non serve solo per sintetizzare hardware, e quindi NON tutto quello che si scrive in VHDL e' possibile replicarlo sull'hardware. Di conseguenza il fatto di avere all'interno di un processo istruzioni sequenziali e' solo un *comportamento* che il sintetizzatore hardware riconosce nel suo complesso e *tenta* di implementare. All'interno dell'FPGA i segnali digitali viaggiano in modo combinatorio, non stanno certo a guardare quale riga di codice e' stata scritta prima: e' il sintetizzatore che deve mappare opportunamente la logica affinche' il *risultato* sia quello che tu vuoi.
Si'
I processi sono eseguiti tra di loro in maniera concorrente, ma al loro interno il comportamento e' sequenziale. Non focalizzarti troppo sul concorrente o meno, quando non serve: all'interno puoi fare gli IF che vuoi, basta che siano coperti *tutti* i casi possibili (pena la creazione di flip flop e latch nella sintesi del circuito).
Ad esempio:
begin -- behavioral
out_mux: process (Q,C,cin,conf) variable muxsel : Std_logic_vector(1 downto 0); begin -- process out_mux
if conf = '0' then muxsel(0) := C(0); else muxsel(0) := cin; end if; muxsel(1) := C(1); case muxsel is when "00" => out_data out_data(3 downto 2)
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.