Quando usare i latch è migliore delle infradito in un FPGA che supporta entrambi?


20

La domanda:

Quando usare i latch è migliore delle infradito in un FPGA che supporta entrambi?

Sfondo:

È un principio noto che i fermi trasparenti sensibili al livello dovrebbero essere evitati negli FPGA e che le infradito sensibili ai bordi debbano essere utilizzate esclusivamente. La maggior parte delle architetture FPGA supporta nativamente sia chiusure che infradito.

Il consiglio generale - anche da parte dei rivenditori FPGA - è di fare attenzione ai fermi o di non usare mai i fermi, ecc. Ci sono ottime ragioni per questo consiglio, i cui dettagli sono tutti ben noti. Tuttavia, la maggior parte dei consigli è formulata "non usare i fermi se non sai di averne bisogno".

Sono un progettista FPGA con esperienza, e nel corso degli anni, ogni volta che ho pensato che sapevo che avevo bisogno di un chiavistello, una subito capito che c'era un modo migliore per farlo con flip-flop. Sono interessato a sentire esempi di quando l'uso dei fermi è inequivocabilmente migliore.

Nota importante:

Le chiusure e le infradito spesso infastidiscono le persone. Sono interessato solo alla risposta alla domanda. Le risposte che spiegano la differenza tra i latch e i flip-flop, spiegando i motivi per usare NON i latch, spiegando in dettaglio perché i flip-flop sono migliori dei latch, parlando di come i latch sono migliori in target non FPGA, ecc., Sarebbero totalmente fuori tema.


Quando si utilizza un FPGA per imitare esattamente un circuito esistente che utilizza i latch?
Majenko,

Risposte:


11

La tua domanda è sostanzialmente "quando sai di aver bisogno di chiusure?" Che, come hai sottinteso, è una domanda soggettiva. Aspettati più opinioni che fatti come risposte. Detto questo, ecco la mia opinione:

Io, come te, trovo spesso modi migliori di usare le infradito evitando così i fermi. La logica risultante è spesso più elegante e robusta. Ma ci sono momenti in cui non ho abbastanza controllo sulla logica per evitare i latch. Ad esempio, potrei interfacciarmi con un bus del processore che richiede dispositivi di chiusura per soddisfare le specifiche desiderate. Dal momento che non riesco a ridisegnare la CPU o il bus, sono bloccato con il fermo.

Negli ultimi 13 anni, questa è l'unica volta in cui ho avuto bisogno di chiavistelli.


2
Grazie per la risposta. Sto archiviando mentalmente la tua risposta in "compatibilità con le versioni precedenti obbligatoria", che sembra del tutto ragionevole. =)
wjl

8

Le infradito sono spesso preferibili alle chiusure perché hanno solo quattro condizioni / vincoli di gara:

  1. tempo di impostazione tra una modifica dell'input di dati e un successivo fronte di clock attivo e
  2. trattenere il tempo tra un fronte di orologio e la successiva modifica dell'input di dati;
  3. durata minima dell'impulso di clock attivo;
  4. durata minima dell'impulso di clock inattivo.

Se tali vincoli vengono rispettati, l'output di un flip flop sarà interamente "pulito" e privo di complicità. Inoltre, il timing di un flip flop è in un certo senso "digitale": purché vengano rispettati i vincoli di timing, l'output cambierà solo all'interno di una finestra prevedibile dopo un fronte di clock attivo, indipendentemente dal timing di input. L'effetto delle infradito a cascata è quindi prevedibile, indipendentemente dalla profondità. Al contrario, il tempismo di un'uscita latch è molto più "analogico". Un ritardo sul segnale che entra in un latch può causare un ritardo nel segnale in uscita. Anche se vengono rispettati i vincoli del latch, questo ritardo può causare problemi a valle.

Consiglierei di usare i latch nei casi in cui il comportamento richiesto delle uscite di un chip può essere modellato in modo molto ragionevole da uno. Ad esempio, si suppone che il proprio hardware si comporti come un convertitore da seriale a parallelo in cui, tra i fronti di salita e di discesa del primo clock a seguito di una sincronizzazione di trama, la prima uscita segue l'ingresso; tra il fronte di salita e di discesa del secondo orologio, la seconda uscita segue l'ingresso, ecc. complicato di uno che usa i fermi e sarebbe più incline a comportarsi in modo strano se i vincoli di temporizzazione non fossero rispettati.


3
"Le risposte che spiegano la differenza tra i latch e le infradito, spiegando i motivi per usare NON i latch, spiegando in dettaglio perché i flip-flop sono meglio dei latch, parlando di come i latch sono migliori in target non FPGA, ecc., Sarebbero totalmente fuori tema ".
Majenko,

@supercat Beh, almeno la seconda parte della tua risposta ha una risposta pertinente alla domanda. =) Grazie.
wjl

1
@Majenko: forse avrei dovuto dire "più facile da usare" piuttosto che "preferibile"; il mio punto non è stato quello di sostenere che uno dovrebbe evitare i latch ogni volta che è possibile, ma piuttosto suggerire che qualcuno che usa i latch deve essere consapevole delle complessità.
supercat

@supercat, puoi per favore chiarire il tuo esempio con una breve traccia d'onda?
Philippe,

1

Nel mio lavoro a volte dovevo implementare le chiusure nell'FPGA, ma era sempre una soluzione "ultima risorsa". Le applicazioni tipiche includevano connessioni con interfacce o bus asincroni, se non riuscissi a garantire un clock con una velocità sufficiente a garantire un campionamento e una sincronizzazione adeguati del bus e dei segnali di controllo.

Il problema principale è che il latch è un blocco asincrono. Pertanto, è necessario assicurarsi che le funzioni combinatorie che generano segnali di ingresso per il latch siano prive di corse . Altrimenti possono generare anomalie che possono essere bloccate, causando pericoli nel sistema.

Per evitare le razze, devi implementare queste funzioni combinatorie in un modo ridondante speciale. Sfortunatamente (in questo caso particolare ;-), altrimenti è un'ottima proprietà) gli strumenti di sintesi FPGA ottimizzano il tuo progetto rimuovendo tutta la ridondanza. Pertanto, se si desidera implementare un latch in FPGA, è necessario implementarlo "manualmente" e proteggerlo dall'ottimizzazione (ad es. In VHDL potrebbe essere necessario impostare l'attributo "keep" su "true" per i segnali utilizzati internamente nel latch) .


-1 L'OP ha chiesto in particolare quando è necessario utilizzare i latch e ha chiesto ai lettori di non fornire ulteriori motivi per cui i latch non devono essere utilizzati.
Joe Hass,

-1

In termini di tempistica:

Se stiamo usando le infradito in un progetto, le prestazioni dipendono dai ritardi del percorso combinatorio più lunghi.

se utilizziamo i latch al posto delle infradito, possiamo compensare i ritardi del percorso combo più lunghi prendendo in prestito il tempo dai ritardi del percorso più brevi nelle fasi successive. Con questo possiamo ridurre i ritardi e aumentare le prestazioni del design.


3
-1. Meglio analizzarlo correttamente con un vincolo multiciclo e consentire alla parte "asincrona" di funzionare su due cicli. Vedi ad esempio pagina 7-30 di altera.co.uk/literature/hb/qts/qts_qii53018.pdf
shuckc
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.