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:
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.
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).
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.
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.