Dün Lattice EVDK geliştirme kartında DDR3 Demo hata ayıklaması yaparken açıklanamayan bir sorunla karşılaştım, bugün özetleyip sizlerle paylaşacağım.
1. Sorunun açıklaması
Demo'nun ddr3_test_top.v üst düzey dosyasında aşağıdaki cümleler vardır:
girdi test1; çıktı çıktı_test1; atama out_test1 = test1;Ve test1 ve out_test1'in Tasarım'daki diğer mantıklarla hiçbir ilgisi yoktur, ancak onu sildiğimde, normal olarak çalışan demonun yanlış olduğunu buldum! ! !
Bu nedenle, önce bu iki pinin donanımla ilişkili olup olmadığını kontrol edin ve ilgili kısıtlamaları LPF dosyasında bulun:
LOCATE COMP "test1" SITE "F5"; IOBUF PORT "test1" IO_TYPE = SSTL15_I; LOCATE COMP "out_test1" SITE "B1"; IOBUF PORT "out_test1" IO_TYPE = SSTL15_I;Ardından EVDK geliştirme panosunun şematik diyagramını kontrol edin:
Çimi tut, bu da ne?
O zamandan beri daha fazla test yapın ve test1 ve out_test1'i diğer pinlerle değiştirmeye çalışın. Sonuçlar şunu buldu: test1 Sıra7 üzerindeyken Demo işlevi normaldir, test1 Sıra7'de olmadığında ise işlev anormaldir!
Uzun süre düşündükten sonra benim gibi bir çaylak çözemedi, ben de Daniel'e sordum!
2. Problem analizi
Öncelikle şematik ve LPF dosyalarını kontrol edin, çünkü EVDK kartında iki Mircon DDR3 bellek parçacığı vardır ve her ikisi de x16 Yapılandırmasıdır. Yani, DQ'nun genişliği 16bittir ve iki parçacık bir 32bit DQ'da birleştirilir. Bunların arasında, parçacık bir DQ0 ~ DQ15'e karşılık gelir ve parçacık iki DQ16 ~ DQ31'e karşılık gelir. DQ0 ~ DQ15, Bank6'ya bağlanır ve DQ16 ~ DQ31, Bank7'ye bağlanır. Ancak bazı kontrol sinyallerinin (RST, CS, WE, DM, vb.) Bank6'da dağıtıldığı unutulmamalıdır. ile Bank7'de, başka bir deyişle, Tasarımda sadece bir DDR3 parçacığı kullanılsa bile, Bank6 ve Bank7 aynı anda kullanılmalıdır.
DDR3, SSLT15 I seviye standardını kullandığından, Bank6 ve Bank7'nin VREF'ini ayarlamak gerekir. LPF dosyasında şunları bulabiliriz:
KONUM VREF "BANK_6_VREF" SİTE "V4"; VREF BANK_7_VREF "SİTE" J7 ";Şematik diyagramı kontrol edin ve V4 ve J7 pinlerinin de referans voltajına doğru şekilde bağlandığını bulun.
Bu noktada yukarıda bahsettiğimiz ddr3_test_top.v'deki test1 ve out_test1 ile ilgili ifadeleri bir kez daha silip LPF dosyasındaki ilgili ifadeleri siliyoruz.
Ardından MAP ve PAR'ı yeniden entegre edin. Şu anda PAR raporunda aşağıdaki uyarılar bulunabilir:
WARNING-par: LOCATE VREF "BANK_7_VREF" tercihi yok sayıldı çünkü "7" bankasındaki hiçbir PIO bu VREF'i kullanmıyor.
Başka bir deyişle, Diamond Tasarımımızın Bank7'de PIO kullanmadığına, dolayısıyla VREF'e ihtiyaç olmadığına ve LPF dosyasında verilen kısıtlamalar göz ardı edildiğine inanmaktadır. Bu nedenle, Bank7'nin VREF pini VREF moduna değil, normal bir IO (varsayılan mod) olarak ayarlanmıştır. Bununla birlikte, DDR3, aşağıdaki şekilde gösterildiği gibi, VRF pinin 0.75V'luk bir referans voltajı (genellikle 1.5V VCCIO yeterlidir) sağlamasını gerektiren SSLT15 I seviye standardını kullanır:
ECP5 veri sayfasını kontrol edin ve aşağıdaki cümleyi bulun:
VREF voltajı, referans verilenler için eşiği ayarlamak için kullanılır. giriş tamponlar, örneğin SSTL.
Dikkat giriştir! Bu, test1 pininin Bank7'ye tahsis edildiğinde neden diğer pinlere tahsis edilemediğini açıklar. Çünkü Bank7'de herhangi bir girdi yoksa, Diamond şu anda Bank7 için VREF'i ayarlamanın gereksiz olduğunu düşünecek ve bu nedenle LPF'deki kısıtlamaları yok sayacaktır.
ECP5'in veri sayfası yanlış olabilir mi? DDR çıkışı da VREF'e ihtiyaç duyar mı?
Aslında, EVDK kartının şematik diyagramını tekrar kontrol edin ve Bank6 ve Bank7'nin VREF'lerinin aslında aynı voltaja bağlı olduğunu bulun (diğer bir deyişle, iki VREF doğrudan birbirine bağlıdır). Ancak makul bir donanım tasarım yöntemi, farklı bankaların VREF'lerinin bağımsız olmasıdır (yani, onları birbirine bağlamayın). Bu makalede tartışılan sorunlara yol açan bu mantıksız tasarım yöntemidir.
Tasarımımızda, aslında sadece Bank6 için VREF ayarlamamız gerekiyor, Bank7 aslında gerekli değil, ama neden Bank7'ye VREF vermiyorsunuz, DDR normal çalışamıyor? Bunun nedeni, Bank7'nin J7 pini (VREF1_7) VREF giriş modu olarak yapılandırılmamışsa, varsayılan olarak yukarı çekilmesidir. J7 piminin (VREF1_7) yukarı çekilmesi, VREF voltajını etkileyecek ve bu da Bank6'daki V4 pininin (VREF1_6) VREF girişini etkileyecek ve bu da sonunda Bank6'nın stabil ve etkili bir VREF'ye sahip olmamasına neden olacak, bu nedenle DDR normal çalışamaz.
J7 pininin (VREF1_7) VREF voltajını etkilemesini önlemek için en iyisi onu VREF giriş moduna ayarlamaktır.Ayarlarımızın Diamond tarafından optimize edilmesini önlemek için, bu makalede daha önce tartışılan sorun ortaya çıktı.
3. SSTL seviyesi hakkında (güncellenmiş içerik)
DDR3 ile ilgili IO girişinin neden bir referans voltajına ihtiyaç duyduğunu ancak çıkışın neden olmadığını inceleyelim. DDRx SDRAM sıradan IO, SSTL seviye standardını kullanır (clk ve dqs, SSTL SSTLD'nin diferansiyel versiyonunu kullanır) ve SSTL aslında bir sözde diferansiyel seviyedir.
Sözde diferansiyel seviye, sinyalin alıcı ucunun bir diferansiyel alıcı olduğu, ancak bir ucunun VREF referans voltajına sabit bir şekilde bağlı olduğu ve diğer ucunun tek uçlu bir sinyal hattına bağlı olduğu anlamına gelir. Giriş sinyalinin voltajı, giriş sinyalinin seviyesini değerlendirmek için bir kriter olarak referans voltajı ile karşılaştırılır. Sözde diferansiyel standardın çıkış sürücüsü, tek uçlu sinyal standardında ortak bir itme-çekme yapısıdır (İtme-Çekme) ve açıkça VREF referans voltajına ihtiyaç duymaz.
Sözde diferansiyel seviyenin sinyal çıkış dalgalanması küçük olduğundan ve geçici akım küçük olduğundan, sinyal bütünlüğünü korumak nispeten kolaydır. Bu nedenle, bu seviye esas olarak DDRx SDRAM, QDR SRAM ve RLDRAM gibi yüksek hızlı bellek arayüzlerinde kullanılır.
Bu yapının avantajı, giriş sinyalinin, giriş sürücüsü tarafından doğru bir şekilde alınabilmesi için yalnızca küçük bir genlikte VREF'i yukarı ve aşağı sallaması gerektiğidir. Bu şekilde, sinyalin gürültü marjı çok geniştir.Sinyal doğru alınıp alınamasa da, VREF anahtar bir rol oynayacaktır, bu nedenle tasarım sırasında daha yüksek bir VREF doğruluğu sağlamak gerekir.