| Both sides previous revisionPrevious revisionNext revision | Previous revision |
| es_vhdl_simu_01 [2018/01/23 16:31] – admin | es_vhdl_simu_01 [2021/03/05 08:57] (current) – admin |
|---|
| Inserire la porta "a" nella sensitivity list del process significa che il process trrà costantemente sotto controllo "a". Se il process si accorge che a un certo istante $t_T$ il segnale cambia valore (in VHDL si dice che il segnale/porta subisce una "transition" o transizione), allora devono essere svolte le azioni che sono | Inserire la porta "a" nella sensitivity list del process significa che il process trrà costantemente sotto controllo "a". Se il process si accorge che a un certo istante $t_T$ il segnale cambia valore (in VHDL si dice che il segnale/porta subisce una "transition" o transizione), allora devono essere svolte le azioni che sono |
| descritte nel corpo del process, con il valore di "a" e di qualunque altro segnale o porta del sistema che mantengono il valore assunto a $t_T^+$. Capire bene il senso dell'ultima proposizione è di fondamentale importanza per la comprensione del modo in cui in VHDL si descrivono i circuiti. In sistanza, tutte le volte che un qualunque process del sistema si accorge che uno degli elementi della sua sensitivity list ha subito una transizione, è come se si interrompesse immediatamente lo scorrere del tempo. Con il tempo "fermo" (sistema immobile) l'algoritmo che costituisce il corpo del process è come se si svolgesse in una dimensione parallela. L'unico fine di un process è predisporre, sulla base della situzione attuale (quella del sistema con il tempo "congelato", avvenimenti che avranno luogo quando il tempo riprenderà a scorrere. Una volta che questi avvenimenti sono stati "predisposti", il tempo del sistema ricomincia a scorrere, e sono proprio gli avvenimenti predisposti dai porcess del sistema che, intervenendo a modificare il valore dei segnali, possono portare a una nuova attivazione di un process, al congelamento del tempo nel sistema e alla predisposizione di nuovi avvenimenti. Gli avvenimenti di cui parliamo si chiamono "eventi" in VHDL. | descritte nel corpo del process, con il valore di "a" e di qualunque altro segnale o porta del sistema che mantengono il valore assunto a $t_T^+$. Capire bene il senso dell'ultima proposizione è di fondamentale importanza per la comprensione del modo in cui in VHDL si descrivono i circuiti. In sistanza, tutte le volte che un qualunque process del sistema si accorge che uno degli elementi della sua sensitivity list ha subito una transizione, è come se si interrompesse immediatamente lo scorrere del tempo. Con il tempo "fermo" (sistema immobile) l'algoritmo che costituisce il corpo del process è come se si svolgesse in una dimensione parallela. L'unico fine di un process è predisporre, sulla base della situzione attuale (quella del sistema con il tempo "congelato", avvenimenti che avranno luogo quando il tempo riprenderà a scorrere. Una volta che questi avvenimenti sono stati "predisposti", il tempo del sistema ricomincia a scorrere, e sono proprio gli avvenimenti predisposti dai porcess del sistema che, intervenendo a modificare il valore dei segnali, possono portare a una nuova attivazione di un process, al congelamento del tempo nel sistema e alla predisposizione di nuovi avvenimenti. Gli avvenimenti di cui parliamo si chiamono "eventi" in VHDL. |
| Quando di simula il comportamento di un sistema VHDL è come se esistesse una divinità capace di fermare e far ripartire il corso del tempo. Questa divinità è "onnisciente" nel senso che è a conoscenza di tutti gli "eventi" predisposti da tutti i processi. Egli raccoglie tutti gli eventi in una lista ordinata (se un evento $E_1$ deve avvenire al tempo $t_1$ e un evento $E_2$ deve avvenire al tempo $t_2" e $t_2>t_1$ allore $E_1$ precede $E_2$ nella lista degli eventi). Ogni volta che un processo predispone un nuovo evento, la lista viene aggiornata, così Egli sa sempre, a priori, qual'è il prossimo evento che dovrà verificarsi e si prepara a fermare il tempo e ad attivare tutti i processi che sono sensibili al segnale o alla porta che subisce l'evento. | Quando di simula il comportamento di un sistema VHDL è come se esistesse una divinità capace di fermare e far ripartire il corso del tempo. Questa divinità è "onnisciente" nel senso che è a conoscenza di tutti gli "eventi" predisposti da tutti i processi. Egli raccoglie tutti gli eventi in una lista ordinata (se un evento $E_1$ deve avvenire al tempo $t_1$ e un evento $E_2$ deve avvenire al tempo $t_2$ e $t_2>t_1$, allora $E_1$ precede $E_2$ nella lista degli eventi). Ogni volta che un processo predispone un nuovo evento, la lista viene aggiornata, così Egli sa sempre, a priori, qual'è il prossimo evento che dovrà verificarsi e si prepara a fermare il tempo e ad attivare tutti i processi che sono sensibili al segnale o alla porta che subisce l'evento. |
| | |
| Nel caso nel nostro esempio, se "a" cambia da '1' a '0', il corpo del process predisporrà l'evento descritto dalla riga : | Nel caso nel nostro esempio, se "a" cambia da '1' a '0', il corpo del process predisporrà l'evento descritto dalla riga : |
| begin | begin |
| y<='1' after 100 ns, '0' after 200 ns, '1' after 300 ns; | y<='1' after 100 ns, '0' after 200 ns, '1' after 300 ns; |
| | wait; --this means no other event will be generated by this process. |
| end process; | end process; |
| |
| Come ultimo esempio in questa introduzione, costruiamo ora un sistema composto da una catena di inverter. In questo esmpio useremo l'entità "inverter" con l'architettura "veloce". | Come ultimo esempio in questa introduzione, costruiamo ora un sistema composto da una catena di inverter. In questo esmpio useremo l'entità "inverter" con l'architettura "veloce". |
| |
| Il file vhdl seguente (catena.vhdl) descrive una catena di 10 inverter sollecitati dal generatore gig_gen prima definito. | Il file vhdl seguente (catena.vhdl) descrive una catena di 10 inverter sollecitati dal generatore sig_gen prima definito. |
| |
| |
| entity testcatena is | entity testcatena is |
| end entity testcatena; | end entity testcatena; |
| |
| |
| architecture struct of testcatena is | architecture struct of testcatena is |
| |
| signal gen_to_in_1:bit; | signal gen_to_in_1:bit; |
| signal out_1_to_in_2:bit; | signal out_1_to_in_2:bit; |
| signal out_9_to_in_10:bit; | signal out_9_to_in_10:bit; |
| signal out_10:bit; | signal out_10:bit; |
| |
| |
| begin | begin |
| |
| </code> | </code> |
| |
| | Procedendo come in precedenza per eseguire la simulazione della nuova entità, si ottiene il risultato nella figura seguente (sono stati visulizzati il segnale di ingresseo e i segnali di uscita ogni 2 inverter). |
| | |
| | Si invita il lettore a interrogarsi sui trasitori iniziali che si possono osservere nei segnali in uscita alle porte più lontane dal segnale di ingresso. |
| | |
| | {{:catena.png?600|}} |