Quelle est la différence entre $size
et $bits
opérateur dans verilog.? si j'ai des variables, [9:0]a
, [6:0]b
, [31:0]c
.
c <= [($size(a)+$size(b)-1]-:$bits(b)];
Quelle sera la sortie en "c" de l'expression ci-dessus?
$size
Renverra le nombre d'éléments dans la dimension, ce qui équivaut à $high - $low + 1
. Elle est relative à la dimension, pas seulement au nombre de bits. Si le type est un tableau 1D ou un type intégral, il est égal à $bits
.
La fonction système $bits
Renvoie le nombre de bits requis pour contenir une expression sous forme de flux binaire.
$bits ( [expression|type_identifier] )
Il renvoie 0 lorsqu'il est appelé avec un type de taille dynamique qui est actuellement vide. C'est une erreur d'utiliser la fonction système $bits
Directement avec un identificateur de type de taille dynamique.
Je n'ai aucune idée de votre question, c <= [($size(a)+$size(b)-1]-:$bits(b)];
. Est-ce une expression valide en RHS? Parlez-vous de l'expression de plage de tableau, [n +: m]
Ou [n -: m]
?
$size()
donne le nombre de bits pour une seule dimension. $bits()
donne le nombre de bits pour représenter complètement la variable.
Par exemple:
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
Donne:
a Size 10
a Bits 10
b Size 6 // Depth of memory
b Bits 60 // Width * Depth
Dans votre cas, vous n'avez que des tableaux unidimensionnels, pas des mémoires ou des structures, donc $size()
et $bits()
serait la même chose.