Unsized Numbers
Coddy'nin Verilog Journey'sinin Temeller bölümünün bir parçası. Ders 15 / 90.
Boyutu belirtilmemiş sayı, kaç bite sahip olduğu belirtilmeden yazılan sayıdır. Bir sayıyı boyut ön eki olmadan yazdığınızda Verilog, varsayılan olarak bunun 32 bit olduğunu varsayar.
a = 'b1010; // Unsized: Verilog treats this as 32 bits
a = 32'b1010; // Yukarıdakiyle aynı, ancak açıkUnsized sayılar yalnızca biçim ve değeri kullanır: [format][value]
<strong>format</strong>: sayının tabanı: binary içinb, decimal içind, onaltılık içinhveya sekizlik içino<strong>value</strong>: gerçek sayı (örneğin,1010)
Apostrof ', biçim ile değer arasında hâlâ gereklidir, ancak öncesinde bit sayısı yoktur.
'b1010: 32 bitlik binary 1010'd255: 32 bitlik decimal 255'hFF: 32 bitlik hex FF'b1: 32 bitlik 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 ve Sized
| Unsized | Sized | |
|---|---|---|
| Örnek | 1010 veya 'd255 | 8'b1010 veya 8'd255 |
| Bit genişliği | 32 bits (varsayılan) | Explicit (belirtildiği şekilde) |
| Apostrof | Biçim ile birlikte gereklidir | Gereklidir |
| Ne zaman kullanılır | Basit testbench kodu | Donanım atamaları |
Olası Sorun
Boyutlandırılmamış sayılar, daha küçük yazmaçlara atandığında beklenmedik davranışlara neden 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 yazmaçla eşler. Yalnızca alt 4 bit korunur (0000); bu, beklediğiniz şey olmayabilir.
Unsized Sayılar Ne Zaman Kullanılır
Unsized sayılar şunlar için kullanışlıdır:
- Testbench'lerde basit sayılar
- Döngü sayaçları
$displayifadeleri
Gerçek donanım atamaları için açık olmak ve uyarılardan kaçınmak amacıyla boyutlandırılmış sayılar kullanın.
Görev
Aşağıdaki kodda bazı sayılar boyutlandırılmamıştır. Uyarıları önlemek için bunları boyutlandırılmış sayılara (8 bit) dönüştürün.
Yapılacaklar:
adeğerini 1010 için 8 bitlik bir binary sayıya Change edinbdeğerini 255 için 8 bitlik bir decimal sayıya Change edincdeğerini FF için 8 bitlik bir hex sayıya Change edin
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
4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicKendi başına pratik yap: Online Verilog derleyicisi