Utilizzando entrambi i bordi di un orologio


10

Sto programmando un Altera Cyclone IV usando Verilog e Quartus II. Nel mio progetto, vorrei usare entrambi i bordi di un orologio in modo da poter fare la divisione dell'orologio per un fattore dispari con un ciclo di lavoro del 50%. Ecco un frammento del mio codice:

  always @(posedge low_jitter_clock_i or negedge low_jitter_clock_i or posedge reset_i) begin
    if(reset_i) begin
      fixed_clock <= 1'b0;
      divider_dummy <= 'b0;
    end else begin
      fixed_clock <= fixed_clock_next;
      divider_dummy <= divider_dummy_next;
    end
  end

Ora, quando lo compilo, Quartus II genera il seguente errore:

Verilog HDL Errore di costruzione sempre su adc_clocking.v (83): il controllo degli eventi non può verificare i bordi positivo e negativo della variabile "low_jitter_clock_i"

Come posso usare sia il fronte positivo che negativo di un determinato orologio nel mio progetto?

Risposte:


7

Quando si assegna a un registro in un blocco sensibile sempre ai bordi, si definisce un flip-flop. Gli FPGA non hanno infradito che possono innescarsi su entrambi i bordi di un orologio.

Per fare ciò che vuoi, avrai bisogno di avere due blocchi sempre separati, uno per ogni fronte dell'orologio, e quindi trovare un modo per combinare le uscite dei due blocchi senza creare problemi.

Ad esempio, un blocco sempre potrebbe contenere il divisore programmabile. Progettarlo in modo che il ciclo di lavoro in uscita sia inferiore al 50% quando viene assegnato un numero dispari. Utilizzare il secondo blocco sempre (sull'altro fronte del clock) per ritardare l'uscita del primo blocco di 1/2 clock, quindi OPPURE le due uscite insieme. Disabilita l'output del secondo blocco per valori di divisori pari.


Il motivo per cui voglio usare i lati positivo e negativo dell'orologio è avere un duty cycle del 50%.
Randomblue,

Sì, l'ho capito. La mia risposta si rivolge direttamente a questo. Presumo che tu sappia già come ottenere un duty cycle del 50% quando il valore del divisore è pari. Cosa non è chiaro?
Dave Tweed,

Nessuna infradito a doppio bordo? Non vi è alcun motivo intrinseco per questo. Si scopre solo che nessuno li sta facendo (o almeno nessuno di cui siamo a conoscenza). Come sottolinea Martin, esiste un CPLD che supporta le infradito dual-edge: xilinx.com/products/silicon-devices/cpld/coolrunner-ii/…
Philippe

3

Se questo è per la logica interna, probabilmente dovrai scrivere molto più vicino alle infradito disponibili. Ad eccezione di Coolrunner-II, non sono a conoscenza di alcuna logica programmabile con registri intrinsecamente double-edge.

Pertanto, dovrai creare due alwaysblocchi, uno per il negedge e uno per il posedge e combinare i loro output con una logica combinatoria.

Oppure utilizzare un PLL per raddoppiare l'orologio e quindi è possibile utilizzare la logica convenzionale a singolo taglio.



1

Come osserva Dave Tweed, a meno che un FPGA non includa hardware flip flop che può funzionare su entrambi i bordi di un orologio, sarà necessario scrivere la propria logica per implementare il comportamento desiderato utilizzando i tradizionali infradito single-edge. Mentre ci sono un certo numero di modi diversi in cui si può implementare un circuito che si comporta in modo molto simile a un flip flop a doppio bordo, tali circuiti generalmente aggiungono alcuni vincoli di temporizzazione che sono diversi da quelli associati ai flip flop.

Ad esempio, un approccio semplice consiste nell'avere un modulo che combina due xors a 2 ingressi e una coppia di flip flop a "T" (dove lo stato dell'ingresso quando arriva un impulso di clock indica se quel fronte di clock deve commutare l'uscita), uno innescato da un fronte di salita e uno innescato da un fronte di discesa. L'output del modulo sarà lo xor degli output dei flip flop, e l'ingresso a entrambi i flip flop sarà lo xor dell'output del modulo e del suo input.

Un circuito progettato in questo modo funzionerà essenzialmente come un flip flop a doppio bordo, sebbene con tempi di installazione e propagazione più lunghi, ma con un vincolo di temporizzazione aggiuntivo. Un normale infradito che non si trova su un percorso di feedback non importerebbe se l'inizio di un fronte di clock ha un mucchio di impulsi di rottura, a condizione che l'orologio si stabilizzi a un livello valido e che il vincolo del tempo di impostazione, misurato da prima del il primo impulso di risposta e i vincoli del tempo di mantenimento e del tempo di orologio attivo, misurati dal momento in cui l'impulso di orologio è stabilmente attivo, sono rispettati. Il comportamento dell'uscita del flip flop sarà indefinito durante il tempo in cui l'orologio è instabile, ma sarà definito dopo che l'orologio si è stabilizzato. Il modulo double-xor-double-flop aggiungerebbe il vincolo di temporizzazione aggiuntivo che qualsiasi fronte di clock che cambierebbe l'uscita deve essere una distanza di sicurezza da qualsiasi altro limite di clock che potrebbe farlo. Non riuscire a soddisfare questo vincolo, ad esempio avendo tre fronti di clock in successione molto ravvicinata mentre l'input non corrisponde all'output, potrebbe lasciare l'output in uno stato indeterminato o metastabile (notare che gli scenari che coinvolgono un numero pari di edge non sono un problema , poiché tali scenari non implicherebbero altro che impulsi di runt; il caso a tre fronti (o altri casi di numero dispari maggiore di uno) è un problema perché ci sarebbe un impulso valido che segue gli impulsi di runt.

Un progetto di circuito alternativo sarebbe quello di avere i due infradito come sopra, ma alimentare le loro uscite in un multiplexer. Questo circuito non sarebbe gettato in cattivo stato dagli impulsi di rottura, e i suoi vincoli di clock sarebbero gli stessi dei latch sottostanti, ma avrebbe lo svantaggio che un'uscita che era alta e dovrebbe rimanere (o era bassa e dovrebbe rimanere bassa ), quindi potrebbe presentare un breve errore sul bordo dell'orologio. In alcuni circuiti non avrebbe importanza, ma in altri lo sarebbe.

Probabilmente sarebbe possibile per gli strumenti di sintesi logica implementare automaticamente le infradito double-edge analizzando quali vincoli temporali sono stati specificati come importanti, ma farlo sarebbe alquanto difficile. Aumenterebbe anche il rischio che una piccola modifica a un progetto possa causare un grande cambiamento nell'implementazione e quindi produrre un cambiamento significativo e inaspettato nel comportamento.

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.