Boyutlandırılmamış Sayılar
Coddy'nin Verilog Journey'sinin Temeller bölümünün bir parçası — ders 15 / 90.
Bir unsized sayı, kaç bit olduğu belirtilmeden yazılan bir sayıdır. Boyut öneki olmadan bir sayı yazdığınızda, Verilog varsayılan olarak bunun 32 bits olduğunu varsayar.
a = 'b1010; // Unsized: Verilog treats this as 32 bits
a = 32'b1010; // Yukarıdaki ile aynı, ama açıkUnsized sayılar yalnızca biçimi ve değeri kullanır: [format][value]
<strong>format</strong>— sayının tabanı: binary içinb, decimal içind, hexadecimal içinhveya sekizli (octal) içino<strong>value</strong>— gerçek sayı (örneğin,1010)
Format ve değer arasında kesme işareti ' kullanılması yine gereklidir, ancak önünde bir bit sayısı bulunmaz.
'b1010— 32-bit binary 1010'd255— 32-bit decimal 255'hFF— 32-bit hex FF'b1— 32-bit binary 1 (başında 31 sıfır ile)
Kod Örneği:
reg [7:0] data;
initial begin
data = 1010; // Boyutsuz: 32-bit değer (uyarıya neden olabilir)
data = 'd255; // Unsized: 32-bit decimal 255
data = 'hFF; // Boyutsuz: 32-bit hex FF
endUnsized vs Sized
| Unsized | Sized | |
|---|---|---|
| Örnek | 1010 or 'd255 | 8'b1010 or 8'd255 |
| Bit genişliği | 32 bits (varsayılan) | Explicit (belirtildiği gibi) |
| Apostrof | Format ile gerekli | Gerekli |
| Kullanım zamanı | Basit testbench kodu | Donanım atamaları |
Potansiyel Problem
Unsized sayılar, daha küçük yazmaçlara atandığında beklenmeyen davranışlara cause olabilir:
reg [3:0] small;
small = 'b1111; // 32-bit value, but fits in 4 bits (fine)
small = 'b10000; // 32-bit değer, ama çok büyük! (uyarı)İkinci örnek, 32-bitlik bir 10000 değerini 4-bitlik bir yazmaca atar. Yalnızca alt 4 bit saklanır (0000), bu da beklediğiniz şey olmayabilir (may not be what you expect).
Boyutlandırılmamış Sayılar Ne Zaman Kullanılır?
Boyutlandırılmamış sayılar şunlar için kullanışlıdır:
- Testbench'lerdeki basit sayılar
- Döngü sayaçları
$displayifadeleri
Gerçek donanım atamaları için, açık olmak ve uyarıları önlemek adına sized sayılar kullanın.
Görev
Aşağıdaki kodda bazı sayılar boyutlandırılmamıştır (unsized). Uyarıları önlemek için bunları boyutlandırılmış sayılara (8 bits) dönüştürün.
Yapılacaklar:
adeğişkenini 1010 için 8-bitlik bir binary sayı yapınbdeğişkenini 255 için 8-bitlik bir decimal sayı yapıncdeğişkenini FF için 8-bitlik bir hex sayı yapın
Kendin dene
module unsized_challenge;
reg [7:0] a, b, c;
initial begin
a = 'b1010; // Change to sized (8-bit binary)
b = 'd255; // Boyutlu hale getir (8-bit ondalık)
c = 'hFF; // Change to sized (8-bit hex)
$display("a = %b", a);
$display("b = %b", b);
$display("c = %b", c);
$finish;
end
endmoduleBu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Temeller bölümündeki tüm dersler
4Operatörler Bölüm 1
Aritmetik OperatörlerModül OperatörüKarşılaştırma OperatörleriÖzet - Basit MatematikBitsel Operatörler7Atama ve Kapılar
Sürekli AtamaOperatörlerle AtamaYerleşik Kapı PrimitifleriAND OR NOT KapılarıXOR XNOR KapılarıÖzet - Mantık Kapısı Devresi10Karar Yapıları
If İfadesiIf - ElseÖzet - Basit KarşılaştırıcıCase İfadesiCasex ve CasezÖzet - ALU Tasarımı5Operatörler Bölüm 2
Mantıksal Operatörlerİndirgeme OperatörleriKaydırma OperatörleriBirleştirme OperatörüKoşullu OperatörÖzet - Operatör Meydan Okuması11Döngüler
For DöngüsüWhile DöngüsüRepeat DöngüsüSonsuz DöngüDevre Dışı Bırakma İfadesiÖzet - Döngü Kalıpları3Sayı Sistemleri
İkilik GösterimBoyutlandırılmış SayılarBoyutlandırılmamış SayılarNegatif SayılarÖzel Değerler X ve ZÖzet - Sayı Formatları6Modüller
Modül YapısıGiriş ve Çıkış PortlarıInout PortlarıModül Örneklendirmeİsme Göre Port EşlemeSıraya Göre Port EşlemeÖzet - Bir Modül Oluşturun9Prosedürel Bloklar
Always BloğuInitial BloğuDuyarlılık ListesiEngelleyici AtamaEngelleyici Olmayan AtamaÖzet - Always vs Initial15Trafik Işığı Kontrolcüsü
Durumları TanımlamaDurum Makinesi Mantığı