Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

lista degli eventi, scheduler e alee nel vhdl

Elettronica lineare e digitale: didattica ed applicazioni

Moderatori: Foto Utentecarloc, Foto UtenteIsidoroKZ, Foto Utenteg.schgor, Foto UtenteBrunoValente

0
voti

[1] lista degli eventi, scheduler e alee nel vhdl

Messaggioda Foto UtenteSimona99 » 18 mar 2021, 14:05

Ciao ragazzi,
ho problemi nel capire quando si verificano le alee nel caso di una rete logica progettata in vhdl.
MI spiego meglio, consideriamo la seguente rete che fa il gating del clock di un flip-flop d


Il prof ha detto che nel momento in cui A cambia da 1 a 0, si ha che B diventa 1 e lo scheduler deve valutare due eventi contemporanei, il nand e l'and ed a seconda dell'ordine con cui li valuta posso avere che d diventi 1 e poi torni 0, o resti sempre a zero. Però se io ho
t=0 a 1->0
t=delta b 0->1
t=2delta d 0->1 e c 1->0
t=3delta d 1->0
In questo caso indipendentemente dall’ordine con cui lo scheduler esegue i due assegnamenti in t=2delta io avrei sempre un’alea a meno che non metto un after sulla riga di codice in cui si fa l’assegnamento a d, perché comunque i due comandi vengono eseguiti nello stesso delta. Allora quando io ho effettivamente che lo scheduler se due eventi sono contemporanei decide di eseguirli in 2 tempi diversi creando l'alea?
Non so se la mia domanda è abbastanza chiara, sperò che qualcuno riesca a rispondermi
Avatar utente
Foto UtenteSimona99
50 1 5
 
Messaggi: 47
Iscritto il: 9 lug 2020, 14:04

0
voti

[2] Re: lista degli eventi, scheduler e alee nel vhdl

Messaggioda Foto Utentedadduni » 25 mar 2021, 11:59

Provo a rispondere con pensieri un po'sparsi e un po'di domande per ragionare.
Partiamo col dire che qualsiasi logica combinatoria persenta questi fenomeni, se hai un sommatore combinatorio che esce con 8 bit, non puoi mai pensare che quando fissi i due ingressi, rimanga tutto fermo per un tempo stabilito e poi "in contemporanea" i bit di uscita cambino perfettamente insieme e si ti scrivano il valore finale. Non vedrai mai la transizione pulita:
"somma precedente" -> "somma successiva"
come se fossero due numeri ideali che si susseguono.

Questo perché per ogni path ingresso-uscita ci sono ritardi diversi o perché qualche uscita successiva dipende dalle uscite precedenti (tipo carry-ripple).
Quindi in uscita vedrai sempre:
"somma precedente" -> "immondizia transitoria" -> "somma successiva"

Questo è inevitabile e si può risolvere facilmente, basta che la logica successiva tenga in considerazione che non tutti i dati in uscita dalla logica combinatoria precedente sono validi. Spesso, ad esempio, si aggiunge un registro di memoria, che campiona il dato solo sul fronte di clock e quindi garantisce una trnansizione "sincrona" di tutti i bit di uscita, cosa che una logica puramente combinatoria non garantisce mai.

Inoltre se si aggiunge un registro bisogna verificare (il sintetizzatore lo fa al posto nostro) che siano rispettati i tempi di setup e di hold, quindi il dato dalla logica combinatoria può switchare quanto vuole e avere tutta la sporcizia che vuole, ma prima del colpo di clock e subito dopo il colpo di clock deve essere fermo e quindi deve aver terminato tutti gli alea transitori.

Fatta questa premessona iniziale parliamo del tuo circuito. Come si comporta? L'unica risposta è "bho", ragionare a "scheduler" in VHDL è strano, perché quel circuito una volta sintetizzato non viene "eseguito" con un ordine ma è fisicamente implementato con componenti che lavorano letteralmente in contemporanea, e allora quale commuterà prima e quale dopo è un conto impossibile da farsi perché dipende da temperatura, parametri produttivi, routing ecc ecc.

A finire: se ti piace pensare allo scheduler cosa aggiorna per apprezzare la sensitivity list dei processi va bene, ma bisogna tenere a mente che poi sulla FPGA NON c'è uno scheduler e quei componenti lavorano negli stessi istanti. Se aggiorni dei segnali in uno stesso processo allora si aggiornano allo stesso deltaTime, vuol dire che dopo la commutazione si stabilizzeranno su quel valore, ma il transitorio non ti viene mai garantito da nessuno: di questo devi tenerne conto quando sviluppi la logica successiva.

PS: il comando after funziona ***SOLO*** su un testbench che viene eseguito sul PC, non è sintetizzabile e non indica un ritardo dei componenti combinatori all'interno della FPGA.

Mi sono perso il tuo thread altrimenti avrei risposto prima.
Davide
Avatar utente
Foto Utentedadduni
1.784 2 7 12
Expert EY
Expert EY
 
Messaggi: 1223
Iscritto il: 23 mag 2014, 16:26

0
voti

[3] Re: lista degli eventi, scheduler e alee nel vhdl

Messaggioda Foto UtenteSimona99 » 27 mar 2021, 21:06

Ciao, intanto ti ringrazio per la risposta, so che nella realizzazione fisica del circuito i ritardi ci sono e non possono essere previsti perché dipendono da molti parametri. Penso che il mio dubbio riguardi solamente il livello della simulazione. Mi spiego meglio: il prof ha detto che quando scriviamo il codice in vhdl dobbiamo fare in modo che la nostra logica non dipenda dall'ordine con cui lo scheduler esegue gli eventi (nel caso in cui questi siano concorrenti), perché altrimenti la simulazione potrebbe tornarci un risultato "sbagliato", uno degli esempi fatti è stato quello di avere un flip-flop d e ipotizzare che il segnale al suo ingresso cambi in contemporanea all'arrivo del clock (cosa che nelle reti reali non si fa mai, perché bisogna rispettare il tempo di hold e di set up), in questo caso abbiamo due eventi paralleli che lo scheduler esegue in sequenza in due delta time distinti e quindi a seconda dell'ordine con cui gli esegue (ordine che non ci è dato sapere), in uscita la simulazione ci darà il nuovo o il vecchio valore dell'ingresso. Questo esempio per quanto sbagliato a livello pratico mi è chiaro. Dopodiché il prof ha fatto come esempio la rete riportata nel precedente messaggio, dicendo che anche in questo caso a seconda dell'ordine con cui lo scheduler esegue la valutazione del AND e del NAND cambia il risultato finale, nel senso che in un caso il segnale D resta fisso a 0 e in un altro ha una variazione a 1 per poi tornare a 0. Questa sua affermazione non mi è chiara perché io ho solo un evento (la variazione di B) e quindi ho che AND e NAND vengono valutati nello stesso delta time e quindi il valore che ho alla fine del delta non dovrebbe dipendere dall'ordine con cui lo scheduler gli esegue? Non so se il mio ragionamento è corretto o se c'è qualcosa di sbagliato, spero tu possa aiutarmi.

Ti ringrazio, non sapevo che il comando AFTER si usasse solo nei testbench.
In generale quando devo scrivere la rete in vhdl ragiono tenendo sempre a mente la realizzazione fisica (che mi sembra anche più intuitiva dello scheduler)
Avatar utente
Foto UtenteSimona99
50 1 5
 
Messaggi: 47
Iscritto il: 9 lug 2020, 14:04


Torna a Elettronica generale

Chi c’è in linea

Visitano il forum: Nessuno e 56 ospiti