FPGA den clock uretmek (hardware)

Başlatan neontenten, 01 Kasım 2007, 10:03:46

neontenten

Hardware olarak FPGA in internal clockunu divide edip disariya bir clock yaratamaz miyiz? Yani kısaca clock generate edebilirmiyiz fpga in kendi iç clockunu kullanarak yoksa clock uretmek için kristal bulunduran ek bir devre mi kullanmak gerek?

Ersin

Disaridan uygulanan clock u divide edip disariya verebilirsin.Uretici belirtmemisin ama mesela bendeki Spartan 3E kiti icin xilinx in sitesinde freq generator var bu 1Hz ten 999 MHz kadar 1hz adimlarla olan ornek var.
Clock u divide etmek icin illa fpga olmasi gerekmiyo cpld ile de yapabilirsin, bu projene bagli bisey tabii.

neontenten

spartan 2 board kullanıorum. Aslında amacım su yani 12.288mhz de kare dalga ıstıorum fakat elimde bulunan sinyal generatoru o frekansta sınyalı bozuyor kare deıl de daha cok sınıusoıd gelıyor. Bu bakımdan ya dısardakı frekansı yukseltmem gerek ya da board uzerındekı 50 mHz oscıllatoru kullanmam gerek. Benim sorum bu oscillatorden cıkan 50 Mhz lık ınternal clocku bı sekılde dısarı aktarabilirmiyim veya dısardan gelen sınyalın frekansını carpıp dısarı verebılırmıyım?

neontenten

onemlı olan benım ıcın bunu hardware e dokebılmek sımulasyonda değil. Yani carptığım cıkardığım clocku baska bir devrede kullanbilmek.

Ersin

24.576 MHz bir osilator kullan ve bunu 2 ye bol.
Ya da kitteki 50mhz lik osilatoru degistirebiliyorsan onun yerine bagla , devreni etkilemeyecekse tabii.

neontenten

peki kit de bulunan osilatorun cıkısını herhangi porttan okuyabilirim?
bunu yapan bir prog var mı vhdl de yazılmıs ?
eger onu okuyabilirsem içerde bolup dısarıya da verebilirim...

picusta

yanilmiyorsam 2 adet flip-flop ile frekans bölucü yapabilirsiniz.
frekans jeneratörünüz o frekansta sinus çikariyorsa bir yerlerde fazladan kapasite olmasi mümkün. Sinyali schmitt-trigger'den geçirirseniz güzel bir kareniz olabilir.
FPGA'da farkli clock alanlarindan bloklar baglarken dikkat etmek lazim. 2. Clock flip-flop'lardan geçtigi için gecikmeli olarak geliyor.

kurumahmut

50MHZ kristal ile 12,288MHZ frekansı tam olarak elde edemezsin.

50mhz       20ns
12,288mhz 81,38ns

4katından biraz fazla. Olsun bana bu da yeter diyorsan.

Üç bit sayıcı tasarla. Ve MSB sini çıkış olarak al. Böylece %50 dutye sahip 80ns lik frekans elde edersin.

mantığı:
0.bit (LSB) 20ns de bir değişirken 1.bit 40ns de bir değişir. 2.bit 80ns de bir değişir.

Ersin

@neontenten,
sadece frekansi elde etmek ise picustanin dedigi gibi flipflop ile yapman en iyi.

Eger daha ayrintili ne yapmak istedigini anlatirsan, daha net ve kesin cevap alirsin.

ferdem

Konu epey önce açılmış ama şunu ekleyeyim: Clock frekansını yarıya düşürmek için bu clock işaretini T(toggle) tipi bir flip flopa(yani J K tipi flip flopun J si ve K sı birbirne bağlanmış) uygularız. T yi(yani J-K bütününü) 1 de tutarsak çıkışta frekansı yarıya düşmüş bir clok işareti görürüz. Yani 1 adet T tipi flip flopla işimizi görüyoruz.

kurumahmut

Alıntı yapılan: "ferdem"Konu epey önce açılmış ama şunu ekleyeyim: Clock frekansını yarıya düşürmek için bu clock işaretini T(toggle) tipi bir flip flopa(yani J K tipi flip flopun J si ve K sı birbirne bağlanmış) uygularız. T yi(yani J-K bütününü) 1 de tutarsak çıkışta frekansı yarıya düşmüş bir clok işareti görürüz. Yani 1 adet T tipi flip flopla işimizi görüyoruz.


Ayrıca girişteki işaretin duty cycle ne olursa olsun çıkışta %50 olur. Yani lojik1 seviye süresi lojik0 seviye süresine eşit olur.

ferdem

Alıntı yapılan: "kurumahmut"
Alıntı yapılan: "ferdem"Konu epey önce açılmış ama şunu ekleyeyim: Clock frekansını yarıya düşürmek için bu clock işaretini T(toggle) tipi bir flip flopa(yani J K tipi flip flopun J si ve K sı birbirne bağlanmış) uygularız. T yi(yani J-K bütününü) 1 de tutarsak çıkışta frekansı yarıya düşmüş bir clok işareti görürüz. Yani 1 adet T tipi flip flopla işimizi görüyoruz.


Ayrıca girişteki işaretin duty cycle ne olursa olsun çıkışta %50 olur. Yani lojik1 seviye süresi lojik0 seviye süresine eşit olur.

:) Evet, eklediğiniz için teşekkür ederim. T tipi flip floplar düşen kenarda tetiklenir ve "toggle" eder(T=1 iken), "clock"umuzun düşen kenarı eşit zaman aralıklarında geleceğinden çıkışta eşit zaman aralıklarıyla 1-0 olacaktır. Ve sonuç olarak girişe uyguladığımız "clock" ta iki defa düşen kenar olduğunda çıkışta 1 düşen(veya yükselen) kenar olacak, yani frekansımız yarıya düşecektir.


ns lik gecikmeleri çizmedim.
Yanlışım varsa düzeltirseniz memnun olurum, iyi çalışmalar.