Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> Verilog

Verilog-operators

Gegevens die niet kunnen worden verwerkt, zijn vrij nutteloos, er zal altijd een vorm van berekening nodig zijn in digitale circuits en computersystemen. Laten we eens kijken naar enkele van de operators in Verilog waarmee synthesetools geschikte hardware-elementen kunnen realiseren.

Verilog rekenkundige operatoren

Als de tweede operand van een deling- of modulus-operator nul is, dan is het resultaat X. Als een van de operanden van de power-operator reëel is, dan zal het resultaat ook reëel zijn. Het resultaat is 1 als de tweede operand van een energieoperator 0 is (a 0 ).

Operator Beschrijving
a + b a plus b
a - b a min b
a * b a vermenigvuldigd met b
a / b a gedeeld door b
a % b a modulo b
a ** b a tot de macht van b

Hieronder vindt u een voorbeeld van hoe rekenkundige operatoren worden gebruikt.

  
  
module des;
  reg [7:0]  data1;
  reg [7:0]  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

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

Verilog relationele operators

Een uitdrukking met de relationele operator resulteert in een 1 als de uitdrukking als waar wordt beoordeeld, en 0 als deze onwaar is. Als een van de operanden X of Z is, is het resultaat X. Relationele operatoren hebben een lagere prioriteit dan rekenkundige operatoren en alle relationele operatoren hebben dezelfde prioriteit.

Operator Beschrijving
a a minder dan b
a> b a groter dan b
a <=b a kleiner dan of gelijk aan b
a>=b a groter dan of gelijk aan b
  
  
module des;
  reg [7:0]  data1;
  reg [7:0]  data2;
  
  initial begin
    data1 = 45;
    data2 = 9;
    $display ("Result for data1 >= data2 : %0d", data1 >= data2);
    
    data1 = 45;
    data2 = 45;
    $display ("Result for data1 <= data2 : %0d", data1 <= data2); data1 = 9; data2 = 8; $display ("Result for data1 > data2 : %0d", data1 > data2);
    
    data1 = 22;
    data2 = 22;
    $display ("Result for data1 < data2 : %0d", data1 < data2);
    
  end
endmodule

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

Verilog Equality Operators

Gelijkheidsoperatoren hebben dezelfde prioriteit en hebben een lagere prioriteit dan relationele exploitanten. Het resultaat is 1 indien waar, en 0 indien onwaar. Als een van de operanden van logische gelijkheid (==) of logische ongelijkheid (!=) X of Z is, dan is het resultaat X. U kunt de operator voor hoofdlettergelijkheid (===) of de operator voor hoofdletterongelijkheid gebruiken (!==) om overeen te komen, inclusief X en Z en zal altijd een bekende waarde hebben.

Operator Beschrijving
a ===b a gelijk aan b, inclusief x en z
a !==b a niet gelijk aan b, inclusief x en z
a ==b a gelijk aan b, resultaat kan onbekend zijn
a !=b a niet gelijk aan b, resultaat kan onbekend zijn
  
  
module des;
  reg [7:0]  data1;
  reg [7:0]  data2;
  
  initial begin
    data1 = 45;     data2 = 9;      $display ("Result for data1(%0d) === data2(%0d) : %0d", data1, data2, data1 === data2);
    data1 = 'b101x; data2 = 'b1011; $display ("Result for data1(%0b) === data2(%0b) : %0d", data1, data2, data1 === data2);
    data1 = 'b101x; data2 = 'b101x; $display ("Result for data1(%0b) === data2(%0b) : %0d", data1, data2, data1 === data2);
    data1 = 'b101z; data2 = 'b1z00; $display ("Result for data1(%0b) !== data2(%0b) : %0d", data1, data2, data1 !== data2);
    data1 = 39;     data2 = 39;     $display ("Result for data1(%0d) == data2(%0d) : %0d", data1, data2, data1 == data2);
    data1 = 14;     data2 = 14;     $display ("Result for data1(%0d) != data2(%0d) : %0d", data1, data2, data1 != data2);  
  end
endmodule

  
Simulatielogboek
ncsim> run
Result for data1(45) === data2(9) : 0
Result for data1(101x) === data2(1011) : 0
Result for data1(101x) === data2(101x) : 1
Result for data1(101z) !== data2(1z00) : 1
Result for data1(39) == data2(39) : 1
Result for data1(14) != data2(14) : 0
ncsim: *W,RNQUIE: Simulation is complete.

Verilog logische operators

Het resultaat van een logische en (&&) is 1 of waar als beide operanden waar of niet-nul zijn. Het resultaat van een logische of (||) is 1 of waar als een van de operanden waar of niet-nul is. Als een van de operanden X is, is het resultaat ook X. De logische ontkenning (!) operator zal een niet-nul of een echte operand omzetten in 0 en een nul of een valse operand in 1, terwijl een X een X blijft.

Operator Beschrijving
een &&b evalueert naar waar als een en b zijn waar
een || b evalueert naar waar als een of b zijn waar
!a Converteert een waarde die niet nul is naar nul en vice versa
  
  
module des;
  reg [7:0]  data1;
  reg [7:0]  data2;
  
  initial begin
    data1 = 45;     data2 = 9; $display ("Result of data1(%0d) && data2(%0d) : %0d", data1, data2, data1 && data2);
    data1 = 0;      data2 = 4; $display ("Result of data1(%0d) && data2(%0d) : %0d", data1, data2, data1 && data2);
    data1 = 'dx;    data2 = 3; $display ("Result of data1(%0d) && data2(%0d) : %0d", data1, data2, data1 && data2);
    data1 = 'b101z; data2 = 5; $display ("Result of data1(%0d) && data2(%0d) : %0d", data1, data2, data1 && data2);
    data1 = 45;     data2 = 9; $display ("Result of data1(%0d) || data2(%0d) : %0d", data1, data2, data1 || data2);
    data1 = 0;      data2 = 4; $display ("Result of data1(%0d) || data2(%0d) : %0d", data1, data2, data1 || data2);
    data1 = 'dx;    data2 = 3; $display ("Result of data1(%0d) || data2(%0d) : %0d", data1, data2, data1 || data2);
    data1 = 'b101z; data2 = 5; $display ("Result of data1(%0d) || data2(%0d) : %0d", data1, data2, data1 || data2);
    data1 = 4;                 $display ("Result of !data1(%0d) : %0d", data1, !data1);
    data1 = 0;                 $display ("Result of !data1(%0d) : %0d", data1, !data1);    
  end
endmodule

  
Simulatielogboek
ncsim> run
Result of data1(45) && data2(9) : 1
Result of data1(0) && data2(4) : 0
Result of data1(x) && data2(3) : x
Result of data1(Z) && data2(5) : 1
Result of data1(45) || data2(9) : 1
Result of data1(0) || data2(4) : 1
Result of data1(x) || data2(3) : 1
Result of data1(Z) || data2(5) : 1
Result of !data1(4) : 0
Result of !data1(0) : 1
ncsim: *W,RNQUIE: Simulation is complete.

Verilog Bitwise Operators

Deze operator combineert een bit in de ene operand met de bijbehorende bit in de andere operand om een ​​enkel bitresultaat te berekenen.

& 0 1 x z
0 0 0 0 0
1 0 1 x x
x 0 x x x
z 0 x x x
| 0 1 x z
0 0 1 x x
1 1 1 1 1
x x 1 x x
z x 1 x x
  
  
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) begin
      for (j = 0; j < 4; j += 1) begin
        $display ("data1(%0d) & data2(%0d) = %0d", data1[i], data2[j], data1[i] & data2[j]);
      end
    end
  end
endmodule

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

Verilog Shift Operators

Er zijn twee soorten ploegendienstoperators:

  • Logische ploegoperators     :<< and>>
  • Rekenkundige ploegendiensten:<<>>

  
  
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 ) begin
      $display ("data << %0d = 'b%b", i, data << i);
    end
    
    data = 8'h80;
    $display ("Original data = 'd%0d or 'b%0b", data, data);
    for (i = 0; i < 8; i +=1 ) begin $display ("data >> %0d = 'b%b", i, data >> i);
    end
    
    data = 8'h1;
    $display ("
data >> 1 = 'b%b", data >> 1);
  end
endmodule

  
Simulatielogboek
ncsim> run
Original data = 'd1 or 'b00000001
data << 0 = 'b00000001
data << 1 = 'b00000010
data << 2 = 'b00000100
data << 3 = 'b00001000
data << 4 = 'b00010000
data << 5 = 'b00100000
data << 6 = 'b01000000
data << 7 = 'b10000000
Original data = 'd128 or 'b10000000
data >> 0 = 'b10000000
data >> 1 = 'b01000000
data >> 2 = 'b00100000
data >> 3 = 'b00010000
data >> 4 = 'b00001000
data >> 5 = 'b00000100
data >> 6 = 'b00000010
data >> 7 = 'b00000001

data >> 1 = 'b00000000
ncsim: *W,RNQUIE: Simulation is complete.


Verilog

  1. C#-operators
  2. Verilog-zelfstudie
  3. Verilog-aaneenschakeling
  4. Verilog-opdrachten
  5. Verilog blokkeren en niet-blokkeren
  6. Verilog-functies
  7. Verilog-taak
  8. Verilog-klokgenerator
  9. Verilog wiskundige functies
  10. Verilog Tijdnotatie
  11. Verilog Tijdschaalbereik