FPGA da DDR data ve Clock Kalibrasyonu

Başlatan burak_82, 17 Nisan 2014, 13:17:56

burak_82

Bir uygulamada FPGA ve 250MSps ADC kullanmaktayım. ADC data çıkışını DDR olarak veriyor . ADC girişine düzgün olduğundan emin olduğum bir sinüs uyguladığımda ADC datalarında sinüsü görüyorum ancak bazı noktalarda datanın bozulmuş olduğunu görüyorum. Bunun DDR paralel data hatları ve CLK kenarlarının birbirini tam karşılamamasından olduğunu öğrendim. CLK ve Data hatlarına gecikme koydum, deneye deneye uygun değerleri buldum. Şu an datayı düzgün olarak alabiliyorum.

Bunu -deneye deneye- yapmamanın yollarını arıyorum. Bu tip aygıtlarda çıkışa test datası gönder şeklinde seçenekler var. Örneğin çıkışa sürekli 0 gönder, sürekli 1 gönder, toggle yap, sürekli 1er 1er arttır, benim verdiğim datayı bas gibi. Bunlardan bitleri toggle et seçeneğini kullandığımda bazı bitlerin hiç değişmediğini gördüm. Gecikmeyi devreye aldığımda problemli bitler düzeliyor. Ancak nasıl bozuluyor nasıl düzeliyor o kısım meçhul. Çünkü DDR da D0 ve D1 bitleri aynı fiziksel hat üzerinden taşınıyor ve CLK'un yükselen kenarında D0, alçalan kenarında D1 algılanıyor. Her iki bit her clk da terslendiği halde gecikme devreye alınmadan önce nasıl D1 sürekli 1 gelebilir?

Çıkışa istediğim datayı bas özelliğini kullandığımda 5555h datasını sürekli doğru algılayan gecikme değerlerini buldum. Bu gecikme değerlerini ramp test datası ile denediğimde bazı bitlerin sadece bazı durumlarda bozulduğunu gördüm. Bu ISI anlamına gelebilir. Ancak gecikmelerle biraz daha oynadığımda problemsiz datayı elde ediyorum. Bu durumda ISI seçeneği eleniyor. Burada data neden bu şekilde bozuluyor olabilir?

Bu tip aygıtlar için standart bir kalibrasyon algoritması mevcut mu?

speak48

önce yaptığın tasarım çalışma frekansını karşılıyormu ona bak.
ne geçikmesiymiş bu koyduğun

ya tüm sistemin çalışma clokuğun adcnin cloğuna bağla yada
satışı kendi cloğunla yapacaksan alışı adc cloğuyla al ve arada dualclocked fifo kullan.

z

Bu bahsettiğin olay FF devrelerindeki metastability denen olay değil mi?

Eğer sorun bu ise;

Data ile Clk arasında FF'un yapısından kaynaklanan bir zaman aralığı bırakılmak zorunda. Asenkron devrelerde sinyalleri senkronlamak adına ihtiyaç olunan CLK sinyalinden çokdaha yüksek frekansda Clkla Data sinyallerini geciktirebilir ve senkron devrende kullanılacak duruma getirebilirsin.

Gecikmeleri deneme yanılma yapmadan bulmanın tek yolu FF'ın Clk ve Data sinyalleri ile ilgili zamanlama tablosundaki gecikmelere sadık kalacak şekilde tasarım yapmak.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Goo

Data ve clock hatları arasındaki length matching olayına dikkat ettiniz mi?

burak_82

#4
Çalışma frekansı karşılıyor. Clk kaynağı ADC'nin kendisi. 7 bit data hattı var. Data DDR olarak okunuyor. Burada bazı bitler diğerlerine göre daha geç geliyor. O sebeple bu pinlere IDELAY2 primitive ekliyorum deneye deneye değer vermek gerekiyor. Bunu otomatik yapabileceğim bir metod arıyorum.

mesaj birleştirme:: 17 Nisan 2014, 14:43:08

Data ve clock hatlarının uzunluklarına müdahele şansım yok. Evet dediğiniz gibi yol uzunlukları ve FPGA içerisindeki gecikmeler ile ilgili. Yolların aynı boyda çizilemediği durumlarda bu geciktirme metodu kullanılıyor ama otomatik kalibrasyonu nasıl yapabilirim çözemedim.

Goo

#5
Normalde geç gelmemesi gerekiyor. PCB tasarımından kaynaklı bir sorun olması yüksek ihtimal. Data ve clock hattına ait yolların uzunlukları eşit mi?

Bazı fpga'lerde DDRx kontrol blogları mevcut orada bunun için calibrasyon seçenekleri vardı ama buraya nasıl uyarlanır bilmiyorum.

speak48

dataları lvds ile alıyorsun değil mi

burak_82


speak48

yanlış anlamadıysam 250msps + ddr  =>  senin cloğun 500mhz
bu bir sorun ve böyle sorunlarla karşılaşmamak için jesd204b kullanılıyor.
daha önce lvds de özellikle 500mhz de hiç çalışmadım
kullandığın fpga board nedir acaba ne projesi yapıyorsun.

burak_82

Hayır clock 250MHz. ADC Clk nın yükselen kenarında çift indisli bitleri, alçalan kenarında tek indisli bitleri gönderiyor. Datayı doğru olarak alabiliyorum. Ancak doğru olarak alabilmek CLK süresinden daha düşük miktarda süreler kadar gecikmeler koymam gerekiyor. Bunu otomatik olarak yapmak istiyorum.

speak48

lvds yi kullanmadım ama
böyle çift cloklu datayı giriş pinleri donanımsal olarak desteklemiyorsa
ne saçma iş olmuş o öyle

şu kulandığın adcyi fpgayı boardı ve projenin içeriğinden bahsecekmisin

Goo

Alıntı yapılan: speak48 - 18 Nisan 2014, 17:14:51
lvds yi kullanmadım ama
böyle çift cloklu datayı giriş pinleri donanımsal olarak desteklemiyorsa
ne saçma iş olmuş o öyle

şu kulandığın adcyi fpgayı boardı ve projenin içeriğinden bahsecekmisin

Saçma derken? http://en.wikipedia.org/wiki/Double_data_rate, yapılan işe göre donanımlar destekliyor hali hazırda.

speak48

#12
giriş donanımı desteklemiyorsa dedim zaten;desteklediğinde mantıklı

deneye yanıla sinyal bekletmeyi gerektirecek durumun oluşması saçma değilmi

burak_82

Kintex7 kullanıyorum. proje haberleşme ile ilgili bir proje.  CLK da oluşabilecek jitter, yol uzunluklarının eşit olmaması, fpga içindeki latency buna sebep olabiliyor.

speak48

kullandığınız adc kimdir
fpga hazır boardmu
kendi tasarımınızmı
pcbnin görselini gösterirmisiniz.
haberleşme derken wireless mi

böyle bekletmeli duruma ihtiyaç olmaması  gerekir
büyük ihtimalle ayarlanması gereken bir parametre atlanmaktadır.
pll ile ilgili olabilir lvds ile olabilir.