2012-11-12 9 views
12

Jaka jest różnica między operatorem $size i $bits w verilog.? jeśli mam zmienne, [9:0]a, [6:0]b, [31:0]c.

c <= [($size(a)+$size(b)-1]-:$bits(b)]; 

Jaki będzie wynik "c" z powyższego wyrażenia?

Odpowiedz

9

$size zwraca liczbę elementów w wymiarze, co jest równoważne z $high - $low + 1. Jest on względny względem wymiaru, liczy się nie tylko bit. Jeśli typ to tablica upakowana 1D lub typ całkowy, jest równa $bits.

$bits funkcja systemowa zwraca liczbę bitów wymaganych do utrzymania wyrażenia jako strumienia bitów.

$bits ([expression|type_identifier]) 

Zwraca 0 po wywołaniu z typem o dynamicznym rozmiarze, który jest obecnie pusty. Błędem jest używanie funkcji systemowej $bits bezpośrednio z identyfikatorem typu o dynamicznym rozmiarze. Nie mam pojęcia o twoim pytaniu, c <= [($size(a)+$size(b)-1]-:$bits(b)];. Czy jest to prawidłowe wyrażenie w RHS? Czy mówisz o wyrażeniu zakresu macierzy, [n +: m] lub [n -: m]?

+0

'$ rozmiar (a)' = 10, '$ rozmiar (b) = 7',' $ bity (b) '= 7:' c <= x [17-1-: 7] 'To wszystko standardowe typy, więc '$ bits' i' $ size' będą takie same. – Morgan

+0

Masz rację. Ale po prostu nie zdaję sobie sprawy, że jest literówka lub prawdziwe intencje dla 'c <= [17 + 7-1] -: 7];' – jclin

+0

Ach tak, literówka 17 + 7-1. Zauważ też, że pytanie nie ma zmiennej, jest tylko zakresem, więc nie jest prawidłowym verilogiem. – Morgan

19

podaje liczbę bitów dla jednego wymiaru. $bits() podaje liczbę bitów do całkowitego reprezentowania zmiennej.

Na przykład:

reg [9:0] a; 
reg [9:0] b [5:0]; 

initial begin 
    $display("a Size ", $size(a)); 
    $display("a Bits ", $bits(a)); 
    $display("b Size ", $size(b)); 
    $display("b Bits ", $bits(b)) ; 
end 

Daje:

a Size   10 
a Bits   10 
b Size   6 // Depth of memory 
b Bits   60 // Width * Depth 

W twoim przypadku trzeba tylko 1 tablice jednowymiarowe, a nie wspomnienia lub elemencie tak $size() i $bits() byłoby to samo.