RTL için tamsayılar kullanımı hakkında hiçbir şey yanlış yok haddi zatında , ama nedeni vardır bazı önlemek öyle. Bu gerçekten öznel "en iyi uygulama" ile ilgili bir sorudur ve sonunda kendinize neyi tercih ettiğinizi bulmanız gerekecektir. Buna bir yardım olarak, bu konudaki deneyimlerimi ve düşüncelerimi paylaşacağım.
Prensip olarak , sentez için yazarken de (kısıtlanmış) tamsayıları kullanmaktan yanayım. Bazen yaparım, ama pratikte genellikle signed
ve unsigned
. Nedenini açıklayacağım.
Yine de tasarımınızın bir kısmında vektörleştirilmiş bir veri türü kullanmak zorunda kalacaksınız:
Herhangi bir tedarikçi IP'si veya 3. taraf IP'si integer
bağlantı noktaları için türü kullanmaz
Örneğin, BlockRam aracılığıyla veri gönderirken, çıkarımda bulunmanıza ve bu nedenle asla herhangi bir IP / makro / ilkel arayüze arayüze ihtiyaç duymasanız bile, büyük olasılıkla yine de vectorized türe dönüştürmeniz gerekecektir.
Yukarıdakilerin hiçbiri geçerli olsa bile, çoğunlukla az başka bir şey arayüzüne gerekecek bazı noktası (bir üst düzey limanında başka bir şey ise)
integer
Tam tasarım için kullanamayacağınızdan , hepsini birlikte atlamak isteyebilirsiniz, çünkü:
Bazı noktalarda, dönüşümleri yine de yapmanız gerekir ve bu integer
, ilk etapta kullanım noktasının bir kısmını alır
Ayrıca, simülasyon için, bu dönüşümler tipik vektörler ile çağrılır 'U'
veya 'X'
reset önce ya da diğer zamanlarda ya ve her tür fonksiyon çağrısı / istemi sizin simülasyon uyarıları yığılan paket işlevinden bir uyarı mesajlarını üretecektir
Kullanmanın sakıncalarıinteger
:
Vektörize tiplerin aksine, tamsayılar yoktur 'U'
ve 'X'
; Bunları simülasyonlarda çok yararlı buluyorum. Başlatılmamış sinyallerin tasarımda nasıl yayıldığını görürsünüz ve sıfırlamadan sonra çok sayıda başlatılmamış sinyal görürseniz muhtemelen tepki verirsiniz. Tamsayılar kullanıldığında durum böyle olmaz.
Tamsayılarla, toplama / çıkarma sırasında düşük / taşma ile sonuçlanan daha büyük bir simülasyon / sentez yanlış eşleşme riski vardır. (Zaten başka biri tarafından işaret edildiği gibi.)
integer
Gerçekten iyi bir seçenek bulduğum tipik durumlar :
ChipScope / signalTap vb. Aracılığıyla izlediğiniz hata ayıklama sinyalleri / sayaçları için.
Asla kendi kodunuza girmeyen veya girmeyen sayaçların tamamen dahili temsili. Evet, orada bir FIFO yazıyorsanız örneğin vakalardır ve ölü-hesaplaşma yazıyor vardır / sinyalleri oluşturmak üzere okur full
, empty
, almostFull
vb (işaretçileri ancak aritmetiği bu durumda ölü hesaplaşma daha iyi bir yoldur. ..)
Kendi çıkarımlarım: Bazen tamsayılar kullanıyorum ama idareli olarak ve çoğunlukla yukarıda anlatılan durumlarda. Tamsayı kullanmakta unsigned
ve signed
tamsayı yerine fazla bir yük görmüyorum ve bu nedenle genellikle onlara bağlı kalıyorum .