Çıkarılan mandallar neden kötü?


22

Derleyicim birleştirici döngülerdeki ( always @(*)Verilog'daki) çıkarımlı sürgülerden şikayetçi . Ayrıca, çıkarılan mandalların tercihen kaçınılması gerektiği söylendi.

Çıkarılan mandallarda tam olarak yanlış olan nedir? Kesinlikle kombinatoryal döngüler yazmayı kolaylaştırır.


Yaptıklarınıza HDL örneği eklemek iyi olurdu
shuckc

Bu sorunun son zamanlarda birkaç kez belirtildiğini fark ettim. Bu şekilde gelen bir uzman olmayanlar için, Oli Glaser'in dışındaki tüm cevapların yanlış ve / veya yararsız bir kombinasyon olduğunu unutmayın.
EML

Tam olarak ne yaptığınızı bilmiyorsanız, çıkarılan mandallardan kaçınılması ve genel olarak şeffaf mandallardan kaçınılması daha az önem taşır (quartus'un, şeffaf mandalları içermeyen bazı durumlarda "inffered mandalı" nı yanıltıcı şekilde verdiğini unutmayın. tamamen güvenli).
Peter Green

Yanıtlar:


20

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.


Açıkça verilog veya başka bir dilde bir mandal açıkça belirtilirse ve eğer bir mandal besleyen herhangi bir birleşimsel gecikme kombinasyonu ile doğru şekilde çalışacak şekilde bir devre tasarlarsa (bunun için bir araya getirilecek sinyalleri ürettiği anlamına gelir) beklerdim. mandal, öyle ki öyle ki, sıfır gecikmeli mantık yolları ve maksimum gecikmeli mantık yolları arasındaki en kötü durum kombinasyonlarıyla bile, mandalların zamanlama gereklilikleri hala karşılanacaktı, bir sentezleyici bir çalışma devresi üretmelidir. mandalın kendisi negatif olmayan bir gecikmeye sahiptir. Eğer, ancak ...
supercat

... biri negatif gecikmesi olması gereken herhangi bir düğümü belirtmeden birleştirici mantığı ve geri bildirimi kullanır, hemen hemen her şey olabilir. Eşzamanlı mantığın, zaman uyumsuzluktan daha kolay tasarlandığını takdir ediyorum, ancak birçok cihazın tamamen ölü olmadan güçten tasarruf etmek için uyurken saatlerini kapatması gerekiyor. Tamamen eşzamanlı olan, ancak her bir pim ile "pim yüksekse çalıştır" ve "pim düşükse çalıştır" için birkaç mantık çıktısı ve bununla birlikte bir saat üretme kabiliyetine sahip olması ilginç olabilir. herhangi bir pin gerekli olduğunu belirtti.
supercat

Böyle bir yetenek, asenkron mantığa olan ihtiyacın çoğunu azaltacaktır, çünkü cihaz uyurken gelen bir girdi, dahili osilatöre ve devrelere, girişin işlenmesi ve onaylanması için yeterince uzun bir süre güç verebilir. Böyle bir özellik, tek bir "uyandırma" pimine sahip olmaktan çok daha yönlü olacaktır, ancak tek uyandırma tasarımları normal görünüyor. Tanımladığım gibi çok uyandırma yaklaşımı aşırı silikon tüketir mi? Silikon gereksiniminin çipte kalan diğer şeylerle karşılaştırıldığında oldukça küçük olacağını düşünüyorum.
supercat

13

Çıkarımlı bir mandal yapan şey nedir?
Kombinatoryal mantık için, devrenin çıkışı yalnızca girişin bir fonksiyonudur ve herhangi bir hafıza veya dahili durum (mandal) içermemelidir.

Verilog'da, her zaman bloğunda bir değer atanmamışsa bir değişken önceki değerini koruyacaktır . Bu mevcut değeri saklamak için bir mandal oluşturulması gerekir.

Eksik bir if-else ifadesi mandal üretecektir. Bir if-else çıkış devlet tüm olası giriş koşulları için tanımlı değilse ifadesi "eksik" olarak kabul edilir. Aynısı eksik bir durum ifadesi veya varsayılanı olmayan bir durum ifadesi için de geçerlidir : madde.

Çıkarılan mandallar neden kötü?
Çıkarılan mandallar, mantık tasarımının amaçlandığı gibi uygulanamayabileceği bir 'uyarı işareti' olarak hizmet edebilir. Tasarımdaçok önemli bir if-else veya case ifadesi eksik olabilir.

Sürgüler zamanlama sorunlarına ve yarış koşullarına neden olabilir. Kombinasyonel geri bildirime - çıktının tekrar girdiye yönlendirilmesi - tahmin edilemeyebilir.

Kısırlaştırılmış mandallar oluşturmamak için:

  • Bir if veya case ifadesinin tüm dallarını dahil et
  • Her daldaki her çıkış sinyaline bir değer atama
  • Prosedürün başında varsayılan atamaları kullanın, böylece her sinyal atanacaktır.

P. Chu'nun "Verilog Örnekleriyle FPGA Prototiplemesi" nden alıntıladığı bazı parçalar


2
"Verilog Örnekleriyle FPGA Prototiplemesi", Sentez için pratik Verilog'u öğrenmek için iyi bir kitaptır. Temel kombinatoryal malzemeden temel sıralamaya, UART, VGA, yumuşak çekirdekli işlemci (Picoblaze) ve hatta bir Pong oyunu gibi faydalı tasarımlara yol açan bazı iyi örnek tasarımlara sahiptir. Aynı zamanda temel test tezgahını ve simülasyonu da kapsar. @Randomblue, daha önce almadıysanız bir kopyasını almalısınız. Ben de VHDL versiyonunu yaptığını düşünüyorum.
Oli Glaser

8

Mandallar FPGA'larda veya CPLD'lerde kullanımı çok zordur, bu yüzden birçok insan onlardan tamamen kaçınır. Sebeplerden biri, birçok FPGA'nın yerleşik bir mandal içermemesidir, bu nedenle mantık geçitlerinden yapılmıştır - bu kötü zamanlama sorunlarına neden olabilir.
Ayrıca, mandal kullanılırken zamanlama gecikmeleri ve yarış koşulları üzerinde hiçbir kontrolünüz yoktur (yerel bir öğe yoksa)

Onlar olmadan yapamayacağınız sürece (örneğin, gerekli bir maksimum saat frekansını karşılamak için zaman ödünç alma) mandalları kullanmamanızı ve yanlışlıkla mandalları çıkarmayı daha az olası kılmak için kodlama tekniklerini kullanmamanızı tavsiye ederim.


6

Birleştirici mantık ve geri besleme kullanılarak oluşturulan sıralı mantık tasarımları, genellikle fiziksel geçitleri kullanırken makul görünecek bir varsayımda bulunur: bir kapının çıktısının, girdi gerçekte bir süre sonra değişene kadar, girdideki değişikliğe cevaben değişmeyeceği varsayılır. Gerçek geçitleri kullanırken varsayımın geçerli olamayacağı bazı durumlar vardır (örneğin, hızlı bir NOR kapısı ve hızlı bir invertör hem VSS'den VDD'ye yavaşça yükselen bir sinyal tarafından sürülürse, hem de inverter NOR iken 1.2 voltta devreye girerse) Geçit 1.7 volt'a kadar değişmez, NOR geçit sürücünün çıkışının yavaşça yükselen sinyalin yüksek olduğunu görmeden önce azaldığını görebilir), ancak bu sorunlar genellikle yavaşça değişen bir arabellek eklenerek çözülebilir. sinyal birden fazla hedefe yönlendirilir. Ne yazık ki,

Buradaki sorun, aksi açıkça belirtilmediği sürece, bir FPGA derleyicisinin bir kombinasyonlu devreyi aynı sabit durum davranışına sahip tamamen farklı bir devre ile keyfi bir şekilde değiştirebilmesi, ancak tamamen farklı bir zamanlamaya sahip olmasıdır. Örneğin, karmaşık bir kombinasyon işlevinin F, altıdan U'ya Z ila Z girişini aldığını varsayalım. F doğrudan P devresine beslenir ve (F NAND Z) Q devresine beslenir. Derleyici, Q değerine yalnızca verilen değere bağlı olacağını fark edebilir. Z yüksek olduğunda F, Z'nin yüksek olması dışında F'ye benzer bir fonksiyon hesaplayabilir; Q daha sonra (F NAND Z) yerine (F 'NAND Z) ile beslenebilir. P'nin en verimli gerçekleşmesinin beş geçit gecikmesine sahip olması tamamen mümkün olacaktı, ancak Q'nun en verimli gerçekleşmesinin yalnızca iki olacağı kesindi. Böylece,

Bir devrenin bir kombinatoryal geri besleme döngüleri varsa, bir FPGA derleyicisinin fiziksel olarak pozitif bir gecikmeye sahip olacak fiziksel sinyal düğümleri eklemesi gerekecektir (bir sıfır gecikmeli geri besleme döngüsü gerçek dünyada var olamaz), ancak bunun garantisi yoktur. bu tür düğümler, devrenin istenen şekilde davranmasını sağlamak için gerekli olan yerlere eklenecektir. Tasarımda yapılan küçük bir değişikliğin, derleyicinin gerçek dünyada işe yarayan keyfi bir yerleşimden, başarısız olan farklı bir yerleşim yerine değişmesine neden olmayacağının bir garantisi bile yoktur.


0

Tasarımda mandalın nasıl yakalanacağına ilişkin detaylar bu linkte kısaca açıklanmaktadır.

https://www.doulos.com/knowhow/fpga/latches/


1
EE.SE'ye Hoşgeldiniz! Bağlantıdaki bazı ilgili ayrıntıları ekleyerek cevabınızı geliştirebilirsiniz. Bu, orijinal sayfa kaybolsa bile cevabınızın yüksek kalitede olmasını sağlar.
David,
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.