2-ff eşleyici, uygun senkronizasyonu nasıl sağlar?


9

2-ff senkronizatörlerin kullanılması, sinyalin saat sınırlarını aşması için bir standart olmuştur. Ve mekanizmayı gösteren çok sayıda kağıt / şekil var, bunun gibi:resim açıklamasını buraya girin

Öyle görünüyor BCLK sadece darbe örnek olabilir ADAT kez (ikinci yükselen kenarında BCLK çıkış metastability neden olur) bq1_dat . Bir sonraki etkin saat kenarında bq1_dat nasıl "yüksek" olarak örneklenebilir?


Soruma ek olarak, bir sinyalin başka bir saat alanına güvenli bir şekilde geçmesi için düşündüğüm şeyi eklemek istiyorum (2-FF'nin MTBF gereksinimini karşılamak için yeterli olduğunu varsayalım). Herhangi bir hata varsa lütfen beni düzeltin.

resim açıklamasını buraya girin

ps: Metastabl durum "etrafında dolaşıp" dalga formu değil, "1" veya "0" seviyesi göstermez. Aşağıdaki şekilde yarı kararlı çıktı örneği gösterilmektedir.resim açıklamasını buraya girin

Orijinal figür , EJ108A için Ders Notları, Ders 13: Metastabilite ve Senkronizasyon Hatası (ow İyi Parmak arası Terlik Kötü Olduğunda) WJ Dally'den geldi.


4
Sadece "etrafında dolaşan" metastabil çıkışı gösteren diyagramların son derece yanıltıcı olduğunu söylemek istiyorum. Metastabilite hiç de öyle değil. Bir FF metastabl olduğunda, çıkışı tek bir spesifik ara gerilime (değer uygulama teknolojisine bağlıdır) gider ve orada kalır. Öngörülemeyen bir süre sonra, voltaj yüksek veya düşük salınır ve hangi yöne gideceği de tahmin edilemez.
Dave Tweed

@Dave Tweed ♦ Yorum için teşekkür ederim. Metastabilite ile ilgili okuduğum hemen hemen tüm belgelerde "dolaşıp dolaşan" dalga formlarını gördüm. Etrafı araştırdım ve bir yazı buldum ( Eğer bir flip flop bir kurulum ihlali varsa ve metastabil hale gelirse , o-kapsamdan alınan metastabil durum ile bir çekim içeren giriş değerine yerleşmesi garanti edilir mi? ). Şekilde orijinal referansa bir bağlantı bu yazıya dahil edilmiştir.
fiedel

Evet, bu benim açımı mükemmel bir şekilde gösteriyor ve geldiği Powerpoint sunumunda çok iyi bilgiler var.
Dave Tweed

Yanıtlar:


8

Basit cevap, kendi başlarına değiller. Senkronizasyon, verilerin aktarılmasını sağlamak için değil, diğer birçok sinyali besleyen ve sorunlara neden olan metastabil sinyallerle sonuçlanmadığınızdan emin olur. Diyagramın gösterdiği gibi ikinci FF, metastabil birinci FF çıkışını yakalar ve tasarım boyunca daha fazla yayılmasını önler.

Çeşitli türde sinyaller vardır ve senkronizatörleri nasıl eklediğiniz hakkında konuştuğunuz sinyale bağlıdır. Ancak birkaç ortak türe bakalım:

  1. Tetikleme Sinyalleri - veya temelde başka bir şey çalıştırmaya başlaması gereken bir darbe olan herhangi bir sinyal. Bunlar genellikle veri taşımaz ve ilgilendiğiniz tek şey, başka bir saat alanına giden bir şeye başlamak için yükselen bir kenar olmasıdır. Bunların üstesinden gelmek için bir senkronizere ihtiyacınız var (esas olarak diyagramınızda gösterilenleri yapıyor), ancak biraz daha fazlasına ihtiyacınız var.

    En basit seçenek darbeyi uzatmaktır - esas olarak giriş darbesinin hedef saatin 1 saatten fazla olduğundan emin olun (hedef kayıt için en az kurulum ve tutma sürelerinden en az 1 döngüden daha uzun olmalıdır) . Örneğin, 20MHz'lik bir saatten 15MHz'lik bir saate gidiyorsanız, girişinizde nabzınızın iki saat döngüsü olduğundan emin olursunuz, bu da hedef saatine sunulmasını ve kaybolmamasını sağlar. Bu aynı zamanda sinyalin nasıl geçeceği konusunda sorularınızı yanıtlar. Nabız bir hedef saat periyodundan daha genişse, ilk saat kenarında metastabil giderse ve 0 olarak görülüyorsa, ikinci saat kenarında kesinlikle nabzı yakalayacağı anlamına gelir.

    Bu tür bir sinyal ile sadece nabzın karşılanmasıyla ilgileniyorsunuz, çıkış sinyalinin bir süre yüksek iki saat çevrimi ile bitmesi ve geri kalanının sadece bir döngüsü olması önemli değil. Tek döngü darbesi olduğundan emin olmanız gerekiyorsa, basit bir kenar dedektörü devresi başlatabilirsiniz.

  2. Kontrol Veri Yolları - veya muhtemelen veri yolu türleri. Senkronize kalması gereken çok bitli veri akışınız varsa bunlar muhtemelen daha zordur. Bu durumda yapacağınız şey "el sıkışma" adı verilen bir şey uygulamaktır. Temel olarak verilerinizi kaynak saate yükler ve tutarsınız. Daha sonra bir senkronizör üzerinden bir istek sinyali (1'de olduğu gibi) gönderirsiniz. İstek sinyali karşı karşıya geldiğinde, veri yolunun hedef etki alanında da dengeleneceğini bilirsiniz. Daha sonra, hedefteki bir kayıt bankasına saatle izleyebilirsiniz. Hedef daha sonra kaynağı bir sonraki kelimeyi yükleyebileceğini bildirmek için tekrar bir nabız gönderir.

    Hedef saatine, bir başkasını göndermeden önce oraya ulaştığını bilmeniz gereken bir kontrol sözcüğü göndermeniz gerekiyorsa, bu tür bir otobüsü kullanırsınız (örneğin, bir şey yapmak için komut gönderirseniz).

  3. Veri veri yolları - sürekli veya seri veri gönderen bir kaynağınız olan veriler için, FIFO kullanarak senkronizörlerden daha iyi durumdasınızdır. FIFO, verileri tutmak için çift saatli bir bellek ve FIFO'da ne kadar veri olduğunu takip etmek için sayaçlar kullanır. Boşluk olduğunda verileri FIFO'ya yazar ve daha sonra yazma adresini artırırsınız. Bu adres daha sonra genellikle adresteki her artışın yalnızca bir tanesine neden olmasını sağlayan bir "Gri Kodlama" şemasına kodlanıradres bus'unda bit (birden fazla biti senkronize etmeniz gerekmez). Bu adres daha sonra, hedef adrese (senkronize edici zincirlerinizden biri aracılığıyla) aktarılır ve burada okunan adresle karşılaştırılır. FIFO'da veri varsa, hedef saat bağlantı noktası kullanılarak bellekten okunabilir. Okuma adresi benzer şekilde Gri kodludur ve başka bir eşleyici aracılığıyla kaynağa geri gönderilir, böylece yazma bağlantı noktası FIFO'da herhangi bir boşluk olup olmadığını hesaplayabilir.

  4. Sinyalleri Sıfırla - bunlar genellikle senkronize edicinin "Eşzamansız Assert, Eşzamanlı Deassert" olarak bilinen değiştirilmiş bir sürümünü kullanır. Bu değiştirilmiş versiyonda, ilk flip flopa veri girişi GND'ye bağlıdır ve bunun yerine gelen sıfırlama sinyali senkronizördeki her flip-flopun asenkron önayar sinyallerine bağlanır. Bu, yüksek olduğunda tamamen senkronize olmayan bir çıkış sinyali ile sonuçlanır, ancak senkronizasyon zinciri, kayıt zincirindeki sıfırlar arasında saatleme yaparak hedef saatle senkronize olarak düşük gitmesini sağlar.

    Bu tip senkronizatör veri ve kontrol için korkunçtur, ancak sinyalleri sıfırlamak için mükemmel şekilde uygundur. Tüm hedef mantık, bu zincirin çıkışını etki alanındaki herhangi bir kaydın asenkron sıfırlama girişlerine beslerse, tüm kayıtlar bilinen bir duruma zorlandığından, iddiada (asenkron olsa bile) metastabilite konusunda çok az endişe vardır. Ardından, sıfırlama sinyali kaynak etki alanında dağıtıldığında, hedef etki alanında eşzamanlı olarak deasserts anlamına gelir, yani tüm kayıtlar aynı saat döngüsünde sıfırlanır (eşzamansız deassert ise +/- 1 döngüsü yerine).


Yukarıdan da görebileceğiniz gibi, saat alanından geçiş yapmak, sinyale sadece 2 flip-flop senkronizatörü yapıştırmaktan çok daha karmaşıktır. Kullanılan kesin yöntem uygulamaya bağlıdır.


Tom'un cevabına ek olarak, bu durumlar için uygulamaları olan PoC'ye bir referans eklemek istiyorum . Senkronizör dokümanlar RTD mevcuttur. Temel bir 2-FF senkronizörü için 2 parmak arası terlik zincirleme teorisine ek olarak, PoC, sync_BitsXilinx ve Altera FPGA'ları için metastabilite davranışını iyileştirmek için özel uygulamalar ( ) sağlar. 2-FF senkronizörü örneğin sync_Strobedarbeler için daha karmaşık senkronizörler oluşturmak için kullanılır .
Paebbels

Senkronizasyon stratejilerine ayrıntılı bir giriş yaptığınız için teşekkür ederiz. Bu resim Clifford E. Cummings'in "Systemverilog kullanarak saat etki alanı geçişi (CDC) tasarım ve doğrulama teknikleri" nden geldi. Bir bitlik sinyal için genişliğin en az 1 saat döngüsü + kurulum süresi + alıcı tarafın güvenli bir şekilde geçmesi için bekleme süresi olması gerektiğini anlıyorum. Bu resimde, adat nabzı bclk örnekleri tarafından düşen kenarında sadece bir kez örneklendiği için bq1_dat'ın metastabil olmasına neden olduğundan bu kriterler karşılanmaz.
fiedel

... Sonuç olarak, bclk'in bir sonraki yükselen kenarındaki bq1_dat değeri '0' ya da '1' olabilir. Yani resimdeki senkronizasyon başarısız görünüyor. Haklı mıyım?
fiedel

@Paebbels Referansınız için teşekkür ederiz. Bir göz
atacak

Bunu sorunuzda düzenlemelisiniz, cevap olarak göndermemelisiniz, ama aslında evet, bu örnekteki çıktıda 1 alabilirsiniz veya alamayabilirsiniz.
Tom Carpenter

1

1) Çiziminizi örnek olarak kullanarak, aclk ve bclk birbiriyle eşzamansızdır. Başka bir deyişle, farklı saat kaynaklarına sahiptirler. Bunlar geçerli veri olarak gösterilir, ancak yalnızca kabul etmek için senkronize edilir. Bclk senkronizatörü devreye girer.

2) Bu çizim, en kötü durum senaryosunu varsayar; burada bq1_dat dağınık bir çıktıdır, çünkü bq1 FF, verilerin sonunun sadece bir kısmını yakalar ve çıktının genellikle çöp olduğu bir metastabil durum oluşturur. İşte hile. Bq2, bq1 ile aynı bclk değerine sahiptir, ancak verilerin geçmesi ve bq2_dat'ta görünmesi için 2 bclk döngü süresi gerekir.

3) İlk bclk, verilerin dağınık bir çıktıyla sonuçlanan bir kısmını yakaladı, ancak ikinci bclk, bir saat çevriminden sonra, bq1_dat'tan belirsiz verilerin yüksek veya düşük bir duruma yerleşmesi için yeterli süredir. Dağınık bq1_dat darbesi, bq2'nin geçerli bir '1' (mantık yüksek) mantığını yakalaması ve geçerli ve şimdi senkronize edilmiş veri (mantık yüksek) olarak bq2_dat'a iletmesi için yeterince uzun sürdü.

4) Aşağı yönde, bclk kullanan herhangi bir saatin çalışması için senkronize edilmiş veriler olacaktır. Sadece ilk bclk FF'nin yarıiletken bir durumla uğraşmak zorunda olduğuna dikkat edin . Adat sadece pico veya nano saniye çok geç olsaydı, çıktı mantık düşük olabilirdi. Bu parmak arası terlik örneklerinin veri girişini yalnızca saatin yükselen kenarında unutmayın. Yükselen kenardan önce veya sonra neler göz ardı edilir.


Bununla birlikte, bclk gecikmesinin sadece olasılıklı bir güvenlik ölçümü sağladığını ve kesin miktarın hem FF teknolojisine hem de bclk süresine bağlı olduğunu unutmayın. Bazı yüksek rel durumlarda, hata oranını kabul edilebilir seviyelere düşürmek için 3 veya daha fazla aşama gerekebilir.
WhatRoughBeast

@WhatRoughBeast. En kötü senaryoda, birçok senkronizasyon aşamasının yanı sıra dijital filtreleme gerektiğini biliyorum. Açıkçası cevabım çok basitti.
Sparky256

@ Sparky256 Beni şaşırtan 3) yorumunuzda. Bq1_dat yarıiletken durumdayken bq2 nasıl '1' yakalayabilir?
fiedel

@fiedel, iki şeyin bq2'nin temiz bir girdi yakalayabilmesine katkıda bulunur (en azından). İlk olarak, metastabil durumun tam bir saat döngüsü boyunca devam etmesi gerekir. İkincisi, bq1'den gelen metastabil (sözde orta-ray) değerinin, bq2'nin de metastabil olmasına neden olacak pencerede olması olası değildir (veya kaçınmak için optimize edilebilir) - ancak esas olarak bunların ilki. Teknolojinin% 5'lik metastabilite şansıyla yeterince uzun sürdüğünü varsayalım. 3-FF senkronizasyon aşaması bunu her iki hücrenin de başarısız olması gerektiğinden% 0,25'e düşürür. Dağınık pratikte neredeyse kararlı durumdan iyi tanımlanmış bir üstel sapmadır.
Sean Houlihane

@SeanHoulihane. Açıklama için teşekkürler. 'Yükselen kenar' terimi bazılarını karıştırır çünkü veri kabul etme penceresi (metastabil veya kararlı) yükselen kenarın yarı noktasındadır ve sadece birkaç pico veya nano saniye sürer. Sadece o anda, IC'nin mantık 1 veya 0 eşiği ile karşılaştırıldığında voltaj seviyesine bağlı olarak, metastabil veya kararlı olsun, '1' veya '0' mantığındaki giriş verileri.
Sparky256
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.