Bir "mandal", bir FF'nin sadece bir saat kenarına cevaben çıkışını değiştirdiği "Flip-Flop" dan farklıdır. Bir mandal, bir saatten başka bir şeye yanıt olarak çıktısını değiştirebilir. Örneğin, bir SR-Latch bir set ve reset girişine sahiptir ve eğer herhangi biri aktifse çıkış değişebilir. Bir SR-FF olarak sadece bir saat kenarı olduğunda bir ayar veya sıfırlama yanıt verdiği zaman.
Bir FPGA'da, mantığınızın tamamen senkronize olmasını istiyorsunuz. Bunun anlamı, tüm depolama elemanlarının (FF'ler gibi) tek bir saat kaynağından saatlenmiş olmasıdır. Bu saate eşzamanlı olmayan herhangi bir şeyin çok dikkatli bir şekilde ele alınması gerekir, aksi halde zamanlama hataları meydana gelir.
Bir mandal temel olarak asenkron bir depolama elemanıdır. Saat girişi yok ve bu nedenle herhangi bir saatle senkronize edilemiyor. Eşzamansız sıfırlama ve sıfırlama girişleri olan FF'lerin bulunduğunu ve bunların normal mandallarla aynı özenle ele alınması gerektiğini not etmeliyim.
Mandalların neden olabileceği tüm zamanlama konularına girmek, burada kapsanabileceklerin ötesindedir, ancak size bir örnek vereyim:
Diyelim ki bir SR-Latch'ınız var ve her 8-bitlik bir sayaç belli bir değere ulaştığında ayarlanmasını istiyorsunuz. Verilog kodunun ne olacağından emin değilim, ancak VHDL'de kod şöyledir: count = "11010010" else '0' olduğunda <= '1'; Bu ayar sinyali SR-Latch üzerindeki ayar girişine gider.
Üreten mantık tamamen birleştiricidir; ve geçitlerin, geçitlerin ve invertörlerin (veya LUT'lerin) bir karışımı. Ancak bu birleşimsel mantıktan geçen sinyal yolları her zaman mükemmel değildir ve “set” sinyali üzerinde aksaklıklar olabilir. Belirli bir kapı grubundan geçen sinyal yolu, başka bir gruba göre daha uzun sürebilir ve bu da ayarlanan çıktının, son duruma yerleşmeden önce kısa bir süre boyunca aktif kalmasına neden olabilir.
Bu çıkış aksaklığı, olması gerekmese de, SR-Latch'umuzun ayarlanmasına neden olabilir. Bir SR-Mandalından bir SR-FF'ye geçersek, sayacın olduğu saatin aynı olduğu saatte kaldırılırsa, SR-FF durumu değiştirmeden önce bütün bir saat döngüsünü bekleyecektir. Temelde, set sinyaline bakmadan önce yerleşmesini bekleyecektir.
Ayarlanan sinyal için kombinatoryal mantıktan geçen yollar farklı şekilde yönlendirilirse (farklı gecikmelere neden olur), o zaman aksaklık davranışı da değişecektir. Mantık işe yarayabilir, ancak daha sonra tamamen ilgisiz bir şeyi değiştirdiğiniz için bu mantık farklı şekilde yönlendirilir ve böylelikle böcek açılır. Sıcaklık ve voltaj aynı zamanda sinyal zamanlamasını da değiştirecek ve böylece aksaklık davranışını değiştirebilecek.
Zamanlamadaki bu belirsizlik, mantığınızdaki mandallardan kaçınmanızın nedenidir. FF'ler kullanımı çok daha güvenlidir. Bu nedenle derleyiciniz sizi mandallar konusunda uyarıyor, çünkü yanlışlıkla mandal yapmak kolaydır ve muhtemelen yine de orada istemezsiniz.
Tabii ki, bazen mandallar gerekli. Bunları çok nadiren kullanmanız gerekiyor, yalnızca kesinlikle gerektiğinde ve ardından mantığı doğru tasarlamanız gerekir, böylece hiçbir aksaklık olmaz.