2012-11-12 5 views
12

Was ist der Unterschied zwischen $size und $bits Operator in Verilog.? wenn ich Variablen habe, [9:0]a, [6:0]b, [31:0]c.

Was wird die Ausgabe bei 'c' von dem obigen Ausdruck sein?

Antwort

9

$size soll die Anzahl der Elemente in der Dimension zurückgeben, was $high - $low + 1 entspricht. Es ist relativ zu der Dimension, nicht nur Bits zählt. Wenn der Typ ein 1D-gepacktes Array oder ein integraler Typ ist, entspricht er $bits.

$bits Die Systemfunktion gibt die Anzahl der Bits zurück, die erforderlich sind, um einen Ausdruck als Bitstrom zu speichern.

$bits ([expression|type_identifier]) 

Es gibt 0 zurück, wenn sie mit einer dynamischen angepassten Art aufgerufen, die derzeit leer. Es ist ein Fehler, die Systemfunktion $bits direkt mit einer dynamisch großen Typkennung zu verwenden.

Ich habe keine Ahnung über Ihre Frage, c <= [($size(a)+$size(b)-1]-:$bits(b)];. Ist es ein gültiger Ausdruck in RHS? Sprechen Sie über den Ausdruck array range, [n +: m] oder [n -: m]?

+0

'$ size (a)' = 10, '$ Größe (b) = 7',' $ Bits (b) '= 7:' c <= x [17-1-: 7] 'Diese sind alle Standardtypen, also "$ bits" und "$ size" wären gleich. – Morgan

+0

Sie haben Recht. Aber mir ist nur nicht bewusst, dass es sich um einen Tippfehler oder eine echte Absicht für 'c <= [17 + 7-1] -: 7] handelt;' – jclin

+0

Ach ja, Tippfehler 17 + 7-1. Beachten Sie auch, die Frage hat keine Variable, es ist nur ein Bereich, so dass es nicht gültig ist Verilog. – Morgan

19

$size() gibt die Anzahl der Bits für eine einzelne Dimension an. $bits() gibt die Anzahl der Bits an, die die Variable vollständig repräsentieren.

Zum Beispiel:

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 

Gibt:

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

In Ihrem Fall müssen Sie nur noch 1 dimensionalen Arrays, nicht Erinnerungen oder structs so $size() und $bits() würde dasselbe sein.