web-dev-qa-db-fra.com

$ taille, $ bits, verilog

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?

15
Suhas

$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]?

12
jclin

$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.

25
Morgan