FPGA sayıcı tasarımı

Başlatan Ankaralı, 15 Mart 2011, 00:29:16

Ankaralı

Merhabalar;

FPGA de bir sayıcı tasarlamak istiyorum.
1. olarak gelen pulsler 5HZ civarında.Gelen puls ler çıkışdaki ledlere aktarılacak.
2. olarak gelen puls ler 555 den belirli frekanslarda olmayacak.Potla sürekli frekansı değiştirilecek.Gelen puls leri çıkıştaki ledlere aktaracağım.Bunu tasarlamam için neler yapmalıyım?

Teşekkürler....
@ NEXYS2

xenix

Bahsettiğin iş kolay görünüyor, FPGA lüks kalabilir bu projede. FPGA'in bir boy küçüğü olan CPLD'yi kullanmanı tavsiye ederim.

http://www.xilinx.com/products/coolrunner2/index.htm
http://www.altera.com/products/devices/max3k/m3k-index.html

Ankaralı

Üstat;  Bu projede FPGA kullanmam lazım.Bitirme tezinde paylaşmam gerekiyor bunu.
1.yazdığımı bugün gerçekleştirdim.
Ancak 2. dediğim uygulamayı bir türlü halledemedim.Şu PIC lerdeki kadar kolay bir TIMER(RB0 kesmesi gibi) özelliği yokmudur bu fpga lerde.?Varsa nasıl kullanırım bunu merak ediyorum ?
@ NEXYS2

Ankaralı

150 sene ise gayet iyi.Ben 24 senedir yazmıyordum  :o  ...Yazdığın kodları görünce geçen sene üni.de asm de yazdığım 16f877 geldi aklıma.Oradada girişi al W' ye at, W dan al PortB ye at gibiydi vs vs....

Şimdi kodlarına ek olarak birde integer tanımlayıp içine yazdırmak kaldı gelen pulslerı...Yalnız burada bir sıkıntı olacak Xtal (50Mhz) değerini biz belli oranlarda böldüğümüz için gelen bazı pulsleri kaçırcaz gibi bir his doğdu içime.
@ NEXYS2

teknikelektronikci

bu konuda fpga paralel calismiyormu ?
architecture icindekiler paralel calisir biliyordum
birde ankarali hocam sen sadece tek bir led de mi göstrecen ?
firatin verdigi kodda bakinca girisdeki sinyali oldugu gibi cikisa aktaran program yaniliyormuyum ?
ayrica fpga da pll modul ekleme imkanimiz var diye biliorum spoc builder ile yanlismiyim ?
Ey Türk istikbalinin evlâdı! İşte, bu ahval ve şerâit içinde dahi, vazifen; Türk İstiklâl ve Cumhuriyetini kurtarmaktır! Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!

Ankaralı

Alıntı yapılan: teknikelektronikci - 15 Mart 2011, 21:44:48
bu konuda fpga paralel calismiyormu ?
architecture icindekiler paralel calisir biliyordum
birde ankarali hocam sen sadece tek bir led de mi göstrecen ?
firatin verdigi kodda bakinca girisdeki sinyali oldugu gibi cikisa aktaran program yaniliyormuyum ?
ayrica fpga da pll modul ekleme imkanimiz var diye biliorum spoc builder ile yanlismiyim ?

Hocam fpga de bu durumda daha doğrusu Process endprocess arasında tüm komutları paralel çalışır.Datasheet yalancısıyım söyleyim.
Aslında istenilen benden 2 farklı şey birincisinin frekansı belli her gelen pulsi ister led ile istersende 7Segment te göstericem.Yani şöyle
sayici:=sayici +1;
cikis<= sayici ;  gibi...Bu işi hallettim.

Asıl önemli olan Frekansını bilmediğim bir sinyalin (555 den potla oynayarak) benden kısacası frekansının ölçülmek istenmesi....Bunuda gene programda belirlediğim bir integer değerin içine atarak led yada 7segm göstermek....Benim kullandığım fpga de pll yok ama digilentteki kartlarda 4xpll yazdığını görmüştüm(400Mhz).

Evet fıratın verdiği kod dediğin gibi girişi alıp bir bit lik register içinde tutup çıkışa aktarmak...
@ NEXYS2

pic365

Büyük olasılıkla konu zaman aşımına uğramış ama birkaç ipucu vereyim.


- Gelen sinyali öncelikle kullandığınız clock ile senkronlamanız gerekir. Tabii bunu tek bir register ile yaparsanız meta-stable duruma girme ihtimali var. Bu nedenle art arda 3 tane register kullanırsanız böyle bir sorun ile karşılaşma ihtimaliniz sıfıra yakın olur.

- Sinyali senkronladıktan sonra pulse'ların yükselen kenarını mı düşen kenarını mı sayacağınıza karar vermeniz lazım. İkisinin pek bir farkı yok. 3. register'dan çıkan sinyali bir kez daha register'layalım.

- Daha sonra 3. register'ın 1, 4. registerın 0 olduğu durumda sayacımızı bir artıralım. Burada yükselen kenarı yakalamış oluyoruz.

- Eğer frekansmetre tarzı bir şey yapacaksanız FPGA'in çalışma frekansına bağlı olarak 1 saniyeyi tespit edecek bir sayaç daha tutabilirsiniz. Örneğin frekansınız 50 Mhz ise sayacınız 50 milyona kadar sayıp başa dönecek.

- 2. sayacınız her 50 milyona ulaştığında 1. sayacın içindeki değeri bir register'a aktarıp o sayacı sıfırlarsanız her saniye sonunda elinizde bir frekans değeri olur. Bu değeri sürekli 7-segment ledlere basarsanız frekansmetre gibi çalışır.