Newsgroup: it.hobby.elettronica.digitale
Titolo: Generare un clock a frequenza 1/3 di un altro

(usate un carattere a spaziatura fissa, tipo Courier New)
Ho a disposizione questo:
   ___    ___    ___    ___          Ckin
  |   |  |   |  |   |  |   |
---   ----   ----   ----   ---  
   Stato2 Stato3 Stato1
e vorrei questo:
   ______*___           ______       Ckout
  |          |         |
---          ----*------
Il problema puo' essere risolto teoricamente con un banale automa di
Mealy a 3 stati, o un automa di Moore e un multiplexer, che realizzino
una cosa di questo tipo:
Stato1/Ckout=0 ---> Stato2/Ckout=1 --> Stato3/Ckout=Ckin ....
Questa soluzione pero' in pratica mi sembra un po' critica perche'
potrebbe generare glitch indesiderati nei punti con '*'.
Avete qualche alternativa + "pulita"?
--
Per rispondermi via email sostituisci il risultato
dell'operazione (in lettere) dall'indirizzo

Se devi disegnare qualcosa prova ad usare fidocad e poi posta quello schema... cosě non ho capito molto.
Cmq se la frequenza da dividere non č eccessiva (diciamo entro qualche MHz) potresti provare con un contatore binario (cd4040 ad
esempio) e una porta AND a 2 ingressi (7408), pilotati dalle 2 uscite meno significative del contatore. L'uscita della and la porti
al reset del counter e sempre dall'uscita prelevi il tuo segnale ad una frequenza che č 1/3 di quella che mandi in input al
contatore
Ciao!

 potrebbe generare glitch indesiderati nei punti con '*'.
In realtà i glitch (o alee statiche/dinamiche) possono essere eliminati
effettuando una sintesi priva di corse critiche.
Ciao
Pow

 Avete qualche alternativa + "pulita"?
Se vuoi che la frequenza sia un terzo, non c'e' nessun problema,
ti basta un contatore modulo 3.
Pero' non avrai un duty cycle del 50% come sembra tu desideri.
In questo caso non puoi usare automi, visto che ti servono
commutazioni sia sui passaggi 0-1 che 1-0 del clock.
Se proprio vuoi il duty cycle del 50%, prima devi raddoppiare
la frequenza del clock e poi dividere per tre e poi per due.
Se la frequenza e' costante puoi farlo con PLL , oppure se
la frequenza non e' molto alta (<20% della massima permessa
dalla logica) un differenziatore con una rete di ritardo e una
porta XOR. Se vuoi chiarimenti chiedi pure.

 Avete qualche alternativa + "pulita"?
Se ho interpretato bene il disegno mi sembra che sia
sufficiente un divisore x4 di frequenza, che si realizza
facilmente mettendo in serie due FF!
Se ho intepretato male il disegno, per ottenere una
soluzione pulita ti basta in ogni caso usare una macchina di
Moore, codificare gli stati in modo opportuno (Gray,
one-hot...), e prendre come uscita una loro funzione
booleana semplice (dipendente dalla codifica).
Ciao,
Antonio

cosě non ho capito molto.
Probabilmente non hai un carattere a spaziatura fissa.
Facciamo una prova.
Queste 2 righe:
iiiiiiiiiiiiii
XXXXXXXXXXXXXX
Le vedi della stessa lunghezza?
Se si', stai usando un carattere a spaziatura fissa, altrimenti no.
Ciao!


porta XOR. Se vuoi chiarimenti chiedi pure.
Devo scrivere in un dispositivo (assimilabile a una memoria) con una
FPGA. 
Le temporizzazioni del dispositivo richiedono che si fissino gli
indirizzi, si abbassi il CS, POI si abbassi il WR, poi si rialzi il WR,
POI si rialzi il CS.
A causa dei "POI" (cioe' CS e WR NON possono essere modificati
contemporaneamente), ho quindi bisogno di un CK veloce a frequenza 3
volte del CK con cui fisso gli indirizzi.
Quindi, sincronizzandomi su dei fronti sia di salita che di discesa del
CK veloce, riesco a ottenere quella sequenza di CS e WR che ti dicevo.
Spero di essermi spiegato.
Vedi qualche alternativa a questa soluzione? A me pare di no
Altra domanda: ma allora i processori che si interfacciano a memorie
come quella che dico io, come fanno a rispettare le temporizzazioni? Non
credo usino 2 clock a frequenze diverse! 
Quindi introducono ritardi voluti con catene di buffer sui segnali
interessati? Se fosse cosi', l'aumento di frequenza di CK del processore
sarebbe critica, dal momento che i ritardi delle catene di buffer
rimangono costanti, ma invece sappiamo che molti processori funzionano
per range di frequenze molto elevati (il mio va tranquillo da 750MHz a
1400MHz!). Che dici?
Ciao!


Moore, codificare gli stati in modo opportuno (Gray,
Purtroppo con un automa di Moore puro non si riesce a fare perche' ci si
dovrebbe sincronizzare sul fronte sia positivo che negativo del ck.
Cmq. mi sa che mi accontento di un normale divisore per 3 e lascio
perdere il duty cycle 50%.


 ha scritto nel messaggio
news:400ebf95...@powernews.libero.it...


 Purtroppo con un automa di Moore puro non si riesce
Ok, avevo visualizzato male il disegno... :-)
Comunque ho capito meglio qual è il problema leggendo dagli
altri post. Ci sono diverse soluzioni, dipendenti anche
dalla tecnologia con cui stai lavorando.
Nel caso di FPGA credo che le migliori siano, in ordine
decrescente di semplicità ed affidabilità:
1) Organizzare la comunicazione con la pseudo-memoria in
modo "pipelined", usando un solo clock.
2) Usare due clock, di cui un clock a frequenza doppia,
ottenuto con un DLL o PLL (disponibile in molte FPGA),
ed eventualmente usare ancora una pipeline.
3) Usare effettivamente i due fronti del clock, oppure
i fronti di salita del clock a frequenza doppia.
4) Se il "poi" a cui ti riferisci è dell'ordine dei ns, puoi
ottenere questi ritardi con un'accurata opera di
floorplanning o con altri stratagemmi simili (questa
soluzione è veramente brutta! Però in molti casi
funziona!!!)
Queste ed altre soluzioni (anche più sporche!) sono
utilizzate a volte anche negli ASIC...
Ciao,
Antonio

utilizzate a volte anche negli ASIC...
Questo risponde in parte anche all'altro mio dubbio.
Immaginavo cose di questo tipo... d'altra parte quando si devono
generare segnali con ritardi asincroni al clock... c'e' poco da fare, si
va con ritardi "puri"
Ciao!


 Infatti, sono ns. Si potrebbe anche fare.
In questo caso mi viene in mente un'altra possibilitą: se
usi FPGA Xilinx puoi provare ad impostare nei blocchi di I/O
dei segnali da ritardare uno slew rate lento (contraint SLEW
o SLOW) e/o una corrente di pilotaggio bassa (constraint
DRIVE). In questo modo, tenendo conto del carico a valle, i
segnali dovrebbero proprio rallentare di qualche ns...
Ciao,
Antonio