deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak Hacker News – Front Page (native)

LiteDRAM kılavuzu, DDR3 ve DDR4 arayüzlerinin neden her açılışta ayarlanması gerektiğini anlatıyor

Hacker News'in ana sayfasına ulaşan bir LiteDRAM kılavuzu bölümü, bir FPGA ile DRAM arasındaki sinyalleri, strobe'ları ve leveling adımlarını ve her byte lane'in açılışta kalibrasyona neden ihtiyaç duyduğunu adım adım anlatıyor.

LiteDRAM kılavuzu, DDR3 ve DDR4 arayüzlerinin neden her açılışta ayarlanması gerektiğini anlatıyor

Bir donanım derinlemesine incelemesi Hacker News'e konuk oldu

FPGA'lar için açık kaynak DRAM denetleyicisi LiteDRAM'ın kılavuzundan bir bölüm, 11 Kasım'da Hacker News ana sayfasına ulaştı. Projenin GitHub deposunda barındırılan bölüm, bir FPGA ile bellek çipleri arasındaki kablolar üzerinde sinyal sinyal ne olduğunu ve bir DDR3 veya sonrası arayüzün neden bir kez doğru kablolanmakla yetinemediğini ortaya koyuyor: her byte lane, her açılışta yeniden ölçülüp kalibre edilmek zorunda.

Belge fiziksel katmanı sırayla ele alıyor — sinyal grupları, data strobe'ları, kart üzerindeki yönlendirme, leveling prosedürleri, terminasyon ve referans gerilimleri, ardından FPGA'nın saatleri ve bellek denetleyicisini PHY'ye bağlayan DFI arayüzü. Her bölüm, az önce anlatılanları LiteDRAM'ın hangi parçasının uyguladığını belirterek sona eriyor ve eşlik eden bir bölüm de BIOS'un gerçekleştirdiği adımları tek tek sayıyor.

İki yarı, çok sayıda byte lane

Kılavuza göre arayüz iki asimetrik yarıya bölünüyor. Komutlar ve adresler yalnızca tek yönde, denetleyiciden DRAM'e gidiyor ve bir rank'taki tüm çipler tarafından paylaşılıyor: diferansiyel bir saat çifti, chip select, komutları kodlayan RAS/CAS/WE hatları, adres ve bank pinleri, ayrıca güç tasarrufu, on-die termination ve reset için denetim hatları. Veri ise iki yönde hareket ediyor ve byte lane'lere bölünüyor — her birinde sekiz veri pini, diferansiyel bir strobe çifti ve bir data-mask biti bulunuyor. Her lane bağımsız olarak yönlendirildiğinden her biri DRAM'e biraz farklı bir zamanda ulaşıyor ve her biri ayrıca ayarlanıyor.

Saat değil, strobe neden önemser

Single-data-rate parçalar, denetleyicinin saatinin yükselen kenarında saat başına bir kelime yakalar. DDR aygıtları saat başına iki kelime taşır ve bu hızlarda saat artık örnekleme için güvenilir olamaz: kart üzerindeki izler ve çip giriş/çıkışları göz ardı edilemeyecek kadar büyük gecikmeler yaratır. Kılavuzun anlattığı çözüm source synchronous — verici taraf, veriyle birlikte özel bir strobe olan DQS'yi sunar ve ikisi aynı yolu izlediğinden gecikmeleri birbirini götürür. Yazma işlemleri strobe'u her bitin ortasına gelecek şekilde gönderir; okuma işlemlerinde ise strobe bit geçişlerine gönderilir ve alıcı onu çeyrek saat geciktirir; preamble ve postamble, burst'u çerçeveler.

LiteDRAM farklı FPGA'lerde farklı yollarla buraya varır: Artix-7 PHY'si yazma strobe'unu 90 derece döndürülmüş bir saatten serileştirir, Kintex-7, Virtex-7 ve UltraScale PHY'leri programlanabilir çıkış gecikmeleri kullanır, Lattice ve Gowin PHY'leri ise kaydırılmış yazma saatini FPGA'lerinin DQS bloklarından ödünç alır. Okuma tarafında yaklaşımlar daha da ayrışır — Xilinx PHY'leri DQS'yi yok sayar ve veriyi ayarlanabilir bir giriş gecikmesiyle hızlı bir iç saatle yakalar; Lattice ve Gowin parçaları ise DQS'yi DQS blokları içinde 90 derece geciktirir ve algılanan burst'ları işaretler.

Fly-by yönlendirmesi lane başına kalibrasyonu zorunlu kılar

Açılış zamanı ayarlamanın var olmasının temel nedeni, DDR3 ve DDR4'ün fly-by topolojisidir. Saat, komut ve adres pinleri her çipin yanından zincirleme geçen ve uçta sonlandırılan tek bir veri yolu oluşturur; bu, ağır yüklü bu izleri yüksek hızlarda temiz tutar — ama aşağı yöndeki çipler saati giderek daha geç yakalar. Kılavuz, ilk ve son çip arasındaki sapmanın tam bir saat periyodundan fazla olabileceğini belirtirken veri lane'leri noktadan noktaya olduğundan bu sapmanın hiçbirini almaz. Yine de bir strobe her çipin kendi saat kenarına yakın düşmek zorundadır; dolayısıyla her lane kendi gecikmesine ihtiyaç duyar.

Write leveling bunu bulur: denetleyici bir mode-register bitini ayarlar, DQS'yi darbeletir ve DRAM, strobe kenarının kendi saat kenarından önce mi sonra mı geldiğini DQ üzerinden bildirir; örneklenen değer ters dönene kadar gecikme adım adım artırılır. Sonraki geçişler yazma gecikmesini tam saat artışlarıyla belirler, geçen aralığın ortasını tutmak için DQ-DQS zamanlamasını tarar ve kılavuza göre 7-Series FPGA'lerde 200 MHz referansla tap başına yaklaşık 78 pikosaniyelik ince bir giriş gecikmesiyle eşleşen kaba bir bitslip — hangi hızlı-saat döngüsünün ilk kelimeyi tuttuğu — ile birlikte read leveling çalıştırır.

Read leveling ve data eye

Okumalarda denetleyici verinin ne zaman geleceğini önceden bilemez, çünkü kart ve giriş/çıkış gecikmeleri lane başına farklıdır. Ortaya çıkan tarama, gecikme hattı boyunca data eye'ı çizer: geniş marjlar sağlam bir arayüzü gösterirken dar olanı bütünlük veya saatleme arızalarına işaret eder. DDR3 ve DDR4 ayrıca dahili bir multi-purpose register'dan sabit bir örüntü döndürebilir; böylece okuma yolu, henüz hiçbir şey yazılmadan ayarlanabilir. DQS ile yakalama yapan PHY'ler ek bir sorunla karşılaşır — strobe burst'lar arasında sabit durmaz — bu yüzden FPGA onu geçitler ve burst algılamayı bildirir.

Neden önemli

DDR3 veya DDR4 ile açılan her sistem, sessizce bu kalibrasyonun başarısına güvenir; oysa prosedür üretici kılavuzları dışında nadiren belgelenir. LiteDRAM her PHY'nin hangi kalibrasyonları desteklediğini beyan etmesini ister; böylece BIOS yalnızca silikonun yapabildiklerini çalıştırır — çıkış gecikmeleri bulunmadığı için saatin kendisini kaydıran bir Artix-7 çözümü dahil. Özel FPGA kartlarını ayağa kaldıran, bellek eğitimine yakın firmware yazan veya bir kartta çalışıp diğerinde başarısız olan bir tasarımın peşinde koşan mühendisler için bu bölüm, fiziği açıklayan ve aynı yerde koda işaret eden nadir bir herkese açık metin.

  • #fpga
  • #dram
  • #hardware
  • #open-source
  • #embedded

İlgili yazılar