Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Verilog

Opérateurs Verilog : Arithmétiques et de contrôle essentiels pour la synthèse

Des données non traitées sont inutiles ; il y a toujours calcul dans circuits numériques et systèmes informatiques. Examinons les opérateurs Verilog permettant aux outils de synthèse de réaliser éléments matériels appropriés.

Opérateurs arithmétiques Verilog

Si second opérande division/modulo = 0, résultat = X. Si opérande puissance est real, résultat real. Résultat = 1 si second opérande puissance = 0 (a0).

OpérateurDescription
a + ba plus b
a - ba moins b
a * ba multiplié par b
a / ba divisé par b
a % ba modulo b
a ** ba puissance b

Exemple :

module des; reg [7:0] data1, data2; initial begin
data1 = 45; data2 = 9;
$display ("Add + = %d", data1 + data2);
$display ("Sub - = %d", data1 - data2);
$display ("Mul * = %d", data1 * data2);
$display ("Div / = %d", data1 / data2);
$display ("Mod %% = %d", data1 % data2);
$display ("Pow ** = %d", data2 ** 2);
end endmodule

Simulation Log :

ncsim> run Add + = 54 Sub - = 36 Mul * = 149 Div / = 5 Mod % = 0 Pow ** = 81
ncsim: *W,RNQUIE: Simulation is complete.

Opérateurs relationnels Verilog

Expression avec opérateur relationnel = 1 si vraie, 0 si fausse. Si opérande X ou Z, résultat = X. Priorité inférieure aux arithmétiques, même priorité entre eux.

OpérateurDescription
a < ba inférieur à b
a > ba supérieur à b
a <= ba inférieur ou égal à b
a >= ba supérieur ou égal à b
module des; reg [7:0] data1, data2; initial begin
data1 = 45; data2 = 9;  $display ("data1 >= data2 : %0d", data1 >= data2);
data1 = 45; data2 = 45; $display ("data1 <= data2 : %0d", data1 <= data2);
data1 = 9;  data2 = 8;  $display ("data1 > data2  : %0d", data1 > data2);
data1 = 22; data2 = 22; $display ("data1 < data2  : %0d", data1 < data2);
end endmodule

Simulation Log :

ncsim> run Result for data1 >= data2 : 1 ... Result for data1 < data2 : 0
ncsim: *W,RNQUIE: Simulation is complete.

Opérateurs d'égalité Verilog

Même priorité entre eux, inférieure aux relationnels. Résultat 1 si vrai, 0 si faux. Si opérande de == ou != est X ou Z, résultat = X. Utilisez === (égalité de cas) ou !== (inégalité de cas) pour matcher X et Z, toujours valeur connue.

OpérateurDescription
a === ba égal à b, incluant x et z
a !== ba non égal à b, incluant x et z
a == ba égal à b, résultat peut être inconnu
a != ba non égal à b, résultat peut être inconnu
module des; reg [7:0] data1, data2; initial begin
data1 = 45; data2 = 9;  $display ("data1 === data2 : %0d", data1 === data2);
data1 = 'b101x; data2 = 'b1011; $display ("data1 === data2 : %0d", data1 === data2);
data1 = 'b101x; data2 = 'b101x; $display ("data1 === data2 : %0d", data1 === data2);
data1 = 'b101z; data2 = 'b1z00; $display ("data1 !== data2 : %0d", data1 !== data2);
data1 = 39; data2 = 39; $display ("data1 == data2 : %0d", data1 == data2);
data1 = 14; data2 = 14; $display ("data1 != data2 : %0d", data1 != data2);
end endmodule

Simulation Log :

ncsim> run Result for data1(45) === data2(9) : 0 ... Result for data1(14) != data2(14) : 0
ncsim: *W,RNQUIE: Simulation is complete.

Opérateurs logiques Verilog

Résultat && = 1 si les deux opérandes vrais/non-zéro. || = 1 si l'un vrai/non-zéro. Si opérande X, résultat = X. Négation ! convertit non-zéro/vrai en 0, zéro/faux en 1, X reste X.

OpérateurDescription
a && bvrai si a et b vrais
a || bvrai si a ou b vrais
!aConvertit non-zéro en zéro, et vice versa
module des; reg [7:0] data1, data2; initial begin
data1 = 45; data2 = 9;  $display ("data1 && data2 : %0d", data1 && data2);
data1 = 0;  data2 = 4;  $display ("data1 && data2 : %0d", data1 && data2);
data1 = 'dx; data2 = 3;  $display ("data1 && data2 : %0d", data1 && data2);
data1 = 'b101z; data2 = 5; $display ("data1 && data2 : %0d", data1 && data2);
data1 = 45; data2 = 9;  $display ("data1 || data2 : %0d", data1 || data2);
data1 = 0;  data2 = 4;  $display ("data1 || data2 : %0d", data1 || data2);
data1 = 'dx; data2 = 3;  $display ("data1 || data2 : %0d", data1 || data2);
data1 = 'b101z; data2 = 5; $display ("data1 || data2 : %0d", data1 || data2);
data1 = 4; $display ("!data1 : %0d", !data1);
data1 = 0; $display ("!data1 : %0d", !data1);
end endmodule

Simulation Log :

ncsim> run Result of data1(45) && data2(9) : 1 ... Result of !data1(0) : 1
ncsim: *W,RNQUIE: Simulation is complete.

Opérateurs bit à bit Verilog

Combine un bit d'un opérande avec bit correspondant de l'autre pour calculer un bit résultat.

&01xz
00000
101xx
x0xxx
z0xxx
|01xz
001xx
11111
xx1xx
zx1xx
module des; reg data1[4]; reg data2[4]; int i, j; initial begin
data1[0]=0; data2[0]=0; data1[1]=1; data2[1]=1; data1[2]='x; data2[2]='x; data1[3]='z; data2[3]='z;
for (i=0;i<4;i+=1) for (j=0;j<4;j+=1) $display ("data1(%0d) & data2(%0d) = %0d", data1[i], data2[j], data1[i] & data2[j]);
end endmodule

Simulation Log :

ncsim> run data1(0) & data2(0) = 0 ... data1(z) & data2(z) = x
ncsim: *W,RNQUIE: Simulation is complete.

Opérateurs de décalage Verilog

Deux types :

module des; reg [7:0] data; int i; initial begin
data = 8'h1; $display ("Original data = 'd%0d or 'b%0b", data, data);
for (i=0;i<8;i+=1) $display ("data << %0d = 'b%b", i, data << i);
data = 8'h80; $display ("Original data = 'd%0d or 'b%0b", data, data);
for (i=0;i<8;i+=1) $display ("data >> %0d = 'b%b", i, data >> i);
data = 8'h1; $display (" data >> 1 = 'b%b", data >> 1);
end endmodule

Simulation Log :

ncsim> run Original data = 'd1 or 'b00000001 data << 0 = 'b00000001 ... data >> 1 = 'b00000000
ncsim: *W,RNQUIE: Simulation is complete.

Verilog

  1. Opérateurs C# — Guide complet des opérateurs en C#
  2. Maîtriser Verilog : Tutoriel complet pour la conception de circuits numériques
  3. Maîtriser la concaténation Verilog : Guide pratique
  4. Comprendre les affectations Verilog : Types, Syntaxe et Bonnes Pratiques
  5. Verilog Blocking vs Non-Blocking : Différences Clés Expliquées
  6. Maîtriser les Fonctions Verilog pour une Conception RTL Efficace
  7. Comprendre les Tasks Verilog : Fonctions vs Tasks, Syntaxe et Utilisation
  8. Générateur d'Horloge Verilog : Guide de Conception et d'Implémentation
  9. Maîtriser les Fonctions Mathématiques Verilog pour une Conception Matérielle Efficace