Reset: sincrono vs asincrono


15

Lavoro con fpgas da anni e ho sempre usato i reset sincroni per ogni parte (che ne ha bisogno) dei miei circuiti. Aiuta a ripristinare globalmente il circuito in un determinato ciclo di clock.

Tuttavia, mi è stato detto che nei circuiti ASIC le persone tendono a usare il ripristino asincrono ovunque. Mi chiedo perché, e se lo è anche in alcuni progetti di FPGA. Mi piacerebbe sentire le opinioni professionali.

Grazie

Risposte:


11

Sembra che ci siano molte opinioni su questo.
L'asserzione asincrona, la disserzione sincrona si dice che sia una buona pratica. Questo evita che l'orologio non funzioni (o funzioni troppo lentamente per catturare il segnale di reset) sull'asserzione sincrona e la possibile metastabilità sulla disserzione asincrona.

Dovresti usare un sincronizzatore di reset (due FF) con l'output legato al resto dei ripristini dei progetti:

Ripristina

Coppia di discussioni:
Ripristino asincrono e sincronizzazione
Letters On Sync vs. Async Reset


Come si confrontano i requisiti di tempo di installazione / attesa tra il rilascio del segnale di reset di un latch e il suo clock con quelli per l'immissione dei dati? Mi sentirei più a mio agio se i fermi nel sistema vedessero la fine del segnale di reset verificarsi sul bordo dell'orologio inattivo. Il rilascio di un ripristino asincrono su un fronte di clock attivo sarebbe garantito per non influire sul ciclo in cui si verifica?
supercat

No, non è garantito che il rilascio del ripristino in modo asincrono sia pulito a causa del tempo di ripristino del ripristino necessario (come impostazione / attesa). Per questo motivo si dovrebbe rilasciare il ripristino in modo sincrono.
Oli Glaser,

La mia domanda è se avere un latch1 rilasciare il segnale di reset che alimenta latch2 sullo stesso fronte di clock che userebbe latch2 è completamente kosher, vale a dire se il tempo minimo di propagazione dall'orologio di latch1 al suo output soddisferebbe i requisiti di mantenimento per l'ingresso di reset di latch2. A proposito, cosa ne pensi della mia risposta sopra? Il circuito che hai disegnato offre poca immunità per eseguire gli impulsi sulla linea di ripristino, quando dovrebbe essere possibile un'immunità quasi totale.
supercat

Su ulteriore considerazione, si potrebbe aggiungere protezione dagli impulsi di runt aggiungendo un terzo latch e avere il suo segnale di reset asincrono essere una versione soppressa del glitch del segnale inviato ai primi due, in modo tale che un segnale che disturbasse in modo asincrono il terzo latch sarebbe garantito per ripristinare in modo pulito i primi due. Un impulso di riscontro sull'ingresso di ripristino può far sì che la linea di ripristino principale nel chip ottenga un impulso di riscontro, ma se si verifica un tale impulso, sarebbe seguito da un impulso di ripristino sincrono.
supercat

Scusa, penso di vedere cosa intendi ora. Se intendi l'output dal secondo fermo nel sincronizzatore al reset FF di sistema, la mia comprensione è che il tempo di ripristino del ripristino è in genere inferiore al tempo di impostazione dei dati per lo stesso FF, quindi dovrebbe essere a posto. Sono d'accordo sugli impulsi di rottura, non offre immunità a quelli senza qualcosa come te che suggerisci di essere implementato.
Oli Glaser,

7

Preferirei un ripristino asincrono rispetto a un ripristino sincrono per alcuni motivi (in nessun ordine particolare):

  • L'aggiunta di un set asincrono o di una funzione di reset a un flip-flop comporterà probabilmente un design più piccolo a causa dell'integrazione della logica in una singola cella (rispetto a un flip-flop non ripristinabile con una porta AND sull'ingresso)
  • Un numero inferiore di porte comporta un cablaggio / luogo e percorso meno congestionati
  • È un processo più semplice / più semplice per ripristinare il chip (più user / test friendly)
  • Rendere asincrono il percorso di reset semplifica il partizionamento dell'analisi di temporizzazione statica del segnale di reset
  • Un ripristino sincrono aggiungerebbe ulteriore logica al percorso critico del flusso di dati e renderebbe più difficile soddisfare i requisiti di installazione e mantenimento
  • Mentre un FPGA ha una funzione logica arbitraria di ingresso 4-6 sull'ingresso, si "paga" per ciascun ingresso in un gate su un ASIC (più input = gate più grande; funzioni complesse = gate multipli)

In definitiva, non penso che nessuno di questi problemi sia un ostacolo allo spettacolo, ma contribuirebbero sicuramente a una forte preferenza per il ripristino asincrono sugli ASIC.


2
Un pericolo derivante dall'utilizzo di reimpostazioni asincrone nella propria logica interna è che un impulso di rottura sull'ingresso di ripristino può provocare qualsiasi tipo di caos. Se si intende consentire il ripristino dei circuiti in modo asincrono, è necessario progettare i circuiti di ingresso in modo tale da garantire che qualsiasi impulso di ripristino sufficiente a causare eventualmente qualsiasi tipo di ripristino asincrono per raggiungere i circuiti interni sia garantito anche a causare si verifica un ripristino sincrono.
supercat

4

Il ripristino asincrono con disasserzione sincrona funziona molto bene. Come accennato in precedenza, i flop di ripristino asincrono sono più piccoli e non richiedono un orologio attivo per garantire il ripristino, quindi è possibile forzare una parte in ripristino (di solito uno stato noto, a basso consumo) con solo alimentazione e un singolo pin cablato o power- al ripristino.

Se vuoi davvero approfondire questo, potresti leggere gli articoli di Cumming su questo, in particolare:

http://www.sunburst-design.com/papers/CummingsSNUG2003Boston_Resets.pdf

Saluti.


Un problema che penso che il signor Cummings manchi nel suo articolo è che mentre i rilevatori di glitch possono sopprimere quelli che altrimenti sarebbero impulsi di rottura, possono anche trasformare quelli che sarebbero impulsi di lunghezza legittima in impulsi di rottura. L'effetto di ciò è che un impulso della giusta lunghezza potrebbe ostruire arbitrariamente lo stato del sistema senza causare un corretto ripristino. Dato che è molto difficile evitare la metastabilità in tutti i casi senza doppia sincronizzazione, suggerirei di avere due circuiti di acquisizione asincrona, uno dei quali ha un criterio di rilevamento del glitch "più rigoroso", e quindi ...
supercat

... sistemare le cose in modo che un breve glitch possa o meno causare un reset dopo uno o due cicli in seguito, ma un impulso sufficientemente lungo provocherà un reset immediato. Inoltre, mentre l'uso degli input di "ripristino asincrono" sui flip flop può aiutare la sintesi in alcune topologie, ciò non significa che debbano essere usati in modo asincrono. Può essere utile sincronizzare la maggior parte dei segnali di reset interno all'orologio anche quando si guidano input di "reset asincrono" sui dispositivi di chiusura.
supercat

Cummings dice che i filtri glitch "sono brutti". Non ne ho mai visto uno nei circuiti integrati su cui ho lavorato. Tendiamo a utilizzare i trigger di Schmitt in tutte le celle del pad di input per evitare questi problemi e i ripristini all'accensione che utilizzo vengono similmente ripuliti. A proposito, in quali casi avresti impulsi brevi su una linea di reset? L'ho visto in alcuni scenari di test di scansione, ma sono ancora nell'ordine del ciclo di clock lungo, non di impulsi brevi intenzionali. Nel tuo ultimo commento, la disserzione del reset deve essere sincronizzata con l'orologio per evitare violazioni di s / h sul reset e garantire che tutti i flop escano dal reset sullo stesso bordo.
mixed_signal_old

I filtri glitch sono spesso utili per determinare quali tipi di input possono causare metastabilità, ma non eliminano gli stati metastabili. L'obiettivo con un filtro glitch dovrebbe essere quello di garantire che tutti gli stati metastabili che possono verificarsi siano in situazioni di "non-cura". A volte è necessario che un dispositivo sia in grado di reimpostare un altro dispositivo collegato. A meno che il filo di ripristino non sia sincronizzato due volte, vi sarà il rischio di impulsi di rottura da eventi ESD vicini e altri simili.
supercat

Per quanto riguarda l'ultimo punto, stavo semplicemente dicendo che anche uno sta sintetizzando un design su hardware che fornisce input di reset asincroni "liberi" su infradito, ciò non significa che non si possa sincronizzare completamente il segnale con l'orologio principale su entrambi affermazione e rilascio. È possibile che i segnali rivolti verso l'esterno debbano reagire in modo asincrono a un ingresso di ripristino, ma ciò non significa che sia necessario ripristinare in modo asincrono tutti i blocchi. In effetti, per evitare stati incoerenti, può essere utile avere solo due delle chiusure nel proprio progetto sincrone.
supercat

2

Un altro approccio, che sembrerebbe persino più sicuro dell'approccio "asserzione asincrona / rilascio di sincronizzazione", sarebbe quello di avere un rilevatore di ripristino asincrono (come descritto altrove, con "asserzione" asincrona e "rilascio" sincrono), ma avere l'output da che gate qualsiasi dispositivo I / O rivolto verso l'esterno senza reimpostare in modo asincrono nulla (tranne il fermo nel rivelatore stesso). Se uno utilizza due rilevatori di ripristino asincrono, uno per le linee di I / O e uno per alimentare il rilevatore di ripristino sincrono, e se si progetta quello per le linee di I / O in modo che possa essere fatto scattare solo da impulsi di ripristino che sono sufficientemente affidabili per essere affidabili far scattare il rilevatore principale, si potrebbe evitare anche di avere anomalie delle uscite nei casi in cui non si ripristinerà la CPU. Si noti che se si esegue questa operazione, un impulso di ripristino di lunghezza legittima ripristinerà le uscite in modo asincrono,

Un'altra cosa da considerare è che i sistemi hanno spesso dei registri che non dovrebbero essere interessati da un reset. Se un reset asincrono potrebbe colpire la circuiteria che scrive su quei registri, sarebbe possibile che un impulso di reset che arriva nel momento sbagliato ostruisca quei registri, anche se si tratta di un impulso pulito (non runt). Ad esempio, se il codice sta provando a scrivere all'indirizzo 1111 e un reset asincrono che arriva appena prima di un impulso di clock forza uno dei fermi dell'indirizzo a zero proprio quando arriva l'impulso di clock, ciò potrebbe causare una scrittura errata all'indirizzo 1110. Mentre si potrebbero usare più righe di reset interne con ritardi combinatori per assicurarsi che le scritture dei registri fossero disabilitate prima che l'indirizzo venisse bloccato, usando la logica di reset interna sincrona si evita del tutto il problema.

A proposito, ecco un circuito che illustra il concetto. Vicino all'angolo in basso a sinistra ci sono due ingressi logici per il ripristino. Uno genererà un impulso di ripristino "pulito" e l'altro genererà un impulso davvero icky. Il LED giallo indica il ripristino del sistema principale; il LED ciano indica abilitazione I / O. Colpire un reset pulito provocherà un "reset" immediato delle uscite; colpire un reset icky provocherà un reset ritardato delle uscite o le lascerà inalterate (nel simulatore, non c'è modo di causare il caso 'lasciatele inalterate').


Penso che questa sia una buona idea. così tante sfumature di grigio con cose apparentemente semplici come il reset.
Oli Glaser,

0

Come ingegnere esperto ( 3 anni con progettazione FPGA e sistemi integrati ), ti sto dicendo che è necessario controllare la scheda e la guida dell'utente FPGA. Non è una risposta semplice.

Devi rendere il tuo FIT di progettazione il tipo FPGA che hai scelto. Alcuni FPGA hanno FlipFlops progettati per il ripristino Asincrono, altri per il ripristino della sincronizzazione.

Devi controllare la guida dell'utente FPGA per quale tipo di FlipFlops hai.

Il responsabile dell'implementazione / Mapper sceglierà percorsi dedicati per il ripristino (il codice può essere eseguito con frequenza più elevata e occupa meno spazio ) se abbini il codice con il tipo di primitive FPGA.

Il tuo progetto funzionerà in QUALSIASI caso , ma a volte l'attuatore FPGA farà di tutto per far funzionare la tua logica ( aggiunge più logica ), ma ciò causerà una frequenza massima inferiore e / o più risorse FPGA.

Esempio: testato con ZYNQ di Xilinx ( FPGA è progettato per il reset sincronizzato - consultare la guida per l'utente delle primitive ). Modificando il reset da asincrono a sincronizzare , la frequenza massima stabile è passata da 220 MHz a 258 MHz e quindi ho superato il mio margine di frequenza.

Potrei anche aggiungere che l'implementatore non sa cosa sia un segnale di clock e reset. Assegna i pin di Flip-flop ai segnali per ORDINE, non per nome. Quindi in alcuni FPGA, l'implementatore sceglie il primo segnale dopo "process () begin" in VHDL come clock, in alcuni come reset, a seconda dell'FPGA su cui è impostato l'implementatore.


Non sono d'accordo con la tua affermazione che "l'implementatore non sa cosa sia un segnale di clock e reset". Gli strumenti di sintesi deducono quale è l'orologio e che viene ripristinato dal modo in cui vengono utilizzati. Il segnale di clock viene utilizzato con una specifica di fronte, il reset no. Inoltre, qualsiasi flip-flop può essere utilizzato con una specifica di ripristino sincrono e, come hai osservato, ciò porta spesso a percorsi critici più rapidi.
Joe Hass,
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.