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