2012-11-12 7 views
12

Qual è la differenza tra $size e $bits operatore in verilog.? se ho variabili, [9:0]a, [6:0]b, [31:0]c.

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

Quale sarà l'uscita su "c" dall'espressione precedente?

risposta

9

$size restituisce il numero di elementi nella dimensione, che equivale a $high - $low + 1. È relativo alla dimensione, non solo ai bit counts. Se il tipo è array 1D o tipo integrale, è uguale a $bits.

$bits la funzione di sistema restituisce il numero di bit necessari per contenere un'espressione come un flusso di bit.

$bits ([expression|type_identifier]) 

Restituisce 0 quando viene chiamato con un tipo di dimensioni dinamiche che è attualmente vuoto. È un errore utilizzare direttamente la funzione di sistema $bits con un identificatore di tipo di dimensioni dinamiche.

Non ho idea della tua domanda, c <= [($size(a)+$size(b)-1]-:$bits(b)];. È un'espressione valida in RHS? Stai parlando dell'espressione della gamma di array, [n +: m] o [n -: m]?

+0

'$ dimensione (a)' = 10, '$ dimensione (b) = 7',' $ bit (b) '= 7:' c <= x [17-1-: 7] 'Questi sono tutti tipi standard quindi '$ bit' e' $ size' sarebbero gli stessi. – Morgan

+0

Hai ragione. Ma non mi rendo conto che sia un errore di battitura o un vero intento per 'c <= [17 + 7-1] -: 7];' – jclin

+0

Ah sì, digitare 17 + 7-1. Nota anche che la domanda non ha variabili è solo un intervallo quindi non è valido verilog. – Morgan

19

$size() indica il numero di bit per una singola dimensione. $bits() indica il numero di bit per rappresentare completamente la variabile.

Ad esempio:

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 

Dà:

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

Nel tuo caso è sufficiente avere 1 matrici tridimensionali, non ricordi o struct così $size() e $bits() sarebbe la stessa cosa.

Problemi correlati