web-dev-qa-db-fra.com

'<<' opérateur à Verilog

j'ai un code Verilog dans lequel il y a une ligne comme suit:

parameter ADDR_WIDTH = 8 ;
parameter RAM_DEPTH = 1 << ADDR_WIDTH;

ici ce qui sera stocké dans RAM_DEPTH et qu'est-ce que le << opérateur faire ici.

5
biren.K

<< est un changement binaire, changeant 1 à gauche 8 places.

4'b0001 << 1 => 4'b0010

>> est un changement de droite binaire ajoutant des 0 à la MSB.
[.____] >>> est un décalage signé qui maintient la valeur du MSB si l'entrée gauche est signée.

4'sb1011 >>  1 => 0101
4'sb1011 >>> 1 => 1101

Trois façons d'indiquer l'opérande gauche sont signés:

module shift;
  logic        [3:0] test1 = 4'b1000;
  logic signed [3:0] test2 = 4'b1000;

  initial begin
    $display("%b", $signed(test1) >>> 1 ); //Explicitly set as signed
    $display("%b", test2          >>> 1 ); //Declared as signed type
    $display("%b", 4'sb1000       >>> 1 ); //Signed constant
    $finish;
  end
endmodule
18
Morgan

1 << ADDR_WIDTH Les moyens 1 seront déplacés de 8 bits vers la gauche et seront attribués comme la valeur de RAM_DEPTH.

En outre, 1 << ADDR_WIDTH signifie également 2 ^ addr_width.

Étant donné ADDR_WIDTH = 8, alors 2^8 = 256 Et ce sera la valeur pour RAM_DEPTH

6
e19293001

<< est l'opérateur de gauche, comme dans de nombreuses autres langues.

Ici RAM_DEPTH sera 1 restement décalé par 8 bits, ce qui équivaut à 2^8, ou 256.

3
dwikle