std_logic veya std_ulogic?


24

Görünen o ki, dünya VHDL'de bitleri temsil etmenin varsayılan yolu std_logic(ve std_logic_vector) olduğuna karar vermiş . Alternatif std_ulogic, çözülmemiş olabilir.

Bu beni şaşırtıyor çünkü genelde bir otobüsü tarif etmiyorsunuz , bu yüzden birden fazla sürücü istemiyorsunuz ve bir sinyal çözmeniz gerekmez . Bunun avantajı, birden fazla sürücünüz varsa derleyicinin sizi erken uyarmasıdır.std_ulogic

Soru: Bu sadece kültürel / tarihi bir şey mi, yoksa std_logic'i kullanmak için hala teknik sebepler var mı?


3
"Dünya" yanlıştır. Akıllı mühendisler, doğru semantikaya sahip oldukları için std_ulogic kullanıyor.
11:57

@wjl Bunu "kültürel / tarihi bir şey" olarak yorumlayacağım. Aşağıdaki yanıtınız, buradaki yorumdan çok daha yararlıdır.
Philippe,

İlk önce yorumu yazdım, daha sonra daha ayrıntılı bilgi içeren bir cevap bırakmanın daha uygun olacağını düşündüm. Üzgünüm, sanırım biraz saygısız geliyor. Ancak benim yorumum anlamlıdır, çünkü çoğu insan std_logic'i kullanmaya başlar, çünkü o şekilde öğrendiler, daha sonra bir süre sonra std_ulogic'i merak etmeye başladılar, araştırdılar, anlambildiklerini farkettiler ve sonra ona dönüştüler. =)
wjl

Yanıtlar:


16

Std_logic, bir std_ulogic'in alt tipidir ve tam olarak bir ekstra özelliği vardır: Birden fazla sürücü varsa çözümlenir.

Yaygın uygulamadan bağımsız olarak, std_ulogic 9 değerli mantık gerektiren çözülmemiş sinyaller için kullanılacak doğru tiptir. (Genellikle, "bit" kullanmak daha da doğrudur - örneğin, 'X' veya 'U' gibi bir şeye sahip olmayan bazı FPGA mimarilerinde).

Temel olarak, yapılacak en iyi şey iş için doğru türü kullanmaktır. Genelde kötü uygulamalar, başkalarının kullandıklarını gördükleri stili nedenini papağan, nedenini anlamadan yapan insanlar tarafından yayılır.


8
Mimaride bir 'U' olmayabilir, ancak genellikle yanlış başlatmalar bulmuş gibi yaptığınız benzetimi yapmak yararlıdır. "Yapılacak en iyi şey iş için doğru türü kullanmaktır" için +1, ancak "en iyisi" hakkında da ilerlerken öğrenmeye meyilliyiz :)
Martin Thompson

8

Tarihim şudur:

Her std_ulogic*zaman kullanarak (yaklaşık 1999 IIRC'de) başladım - bunu yapmak için doğru olanı, sadece tarif ettiğiniz sebeplerden dolayı.

Sonra bir sürü sihirbazla oluşturulan satıcı IP'sine arabirim kurmak zorunda kaldım std_logic. Port eşlemelerinde ( _vectoröğeler için) dönüşüm anlamına geliyordu ve tembel oldum ve kullanmaya başladım std_logic*.

Ancak, çok az sayıda "çift sürücü" hatası yapıyor gibiyim, bu yüzden std_ulogicdüşündüğüm kadarını özlemedim. Ve Modelsim'in driversemri, ara sıra ihtiyaç duyduğumda, "neyi sürdüğünü" bulmayı çok kolaylaştırıyor ...


Evet, IP çekirdekleri (ve özellikle Verilog'dan otomatik olarak çevrilenler) std_logic'i kullanma eğilimindedir. Cevabınız, sebebin çoğunlukla "kültürel / tarihi" olduğunu gösteriyor.
Philippe,

Bağlantı noktalarında std_logic ile std_ulogic arasında dönüşüm yapmanız gerekmez. Std_logic_vector ve std_ulogic_vector arasında dönüşüm yapmanız gerektiğini mi kastediyorsunuz?
wjl

@ wjl: üzgünüm, evet demek istediğim buydu. Gönderiyi güncelleyeceğim.
Martin Thompson,

AFAIK, std_logic ve std_ulogic, aynı taban tipine sahip oldukları için atama uyumludur. Bu nedenle, el ile dönüştürmeye gerek kalmaz.
Val

@Val: öyle dedi wjl (ve aynı fikirdeyim) - ama *vectorliman bölgelerinin hala dönüşümlere ihtiyacı var
Martin Thompson

4

IIRC'nin ünlü Yeniden Kullanım Metodolojisi El Kitabı tavsiye edildi std_logic(_vector), bu yüzden belki şirketlerdeki vb. Şahsen, std_ulogicmümkün olduğunda kullanmak için +1 .


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.