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