Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> Verilog

Operator Verilog

Data yang tidak dapat diproses sangat tidak berguna, akan selalu ada beberapa bentuk perhitungan yang diperlukan dalam rangkaian digital dan sistem komputer. Mari kita lihat beberapa operator di Verilog yang memungkinkan alat sintesis mewujudkan elemen perangkat keras yang sesuai.

Operator Aritmatika Verilog

Jika operan kedua dari operator divisi atau modulus adalah nol, maka hasilnya adalah X. Jika salah satu operan dari operator daya itu nyata, maka hasilnya juga akan nyata. Hasilnya adalah 1 jika operan kedua dari operator daya adalah 0 (a 0 ).

Operator Deskripsi a + b tambahan b a - b kurang b a * b a dikalikan dengan b a / b a dibagi b a % b sebuah modulo b a ** b a pangkat b

Contoh bagaimana operator aritmatika digunakan diberikan di bawah ini.

  
  
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

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

Operator Relasional Verilog

Ekspresi dengan operator relasional akan menghasilkan 1 jika ekspresi dievaluasi benar, dan 0 jika salah. Jika salah satu operan adalah X atau Z, maka hasilnya adalah X. Operator relasional memiliki prioritas lebih rendah daripada operator aritmatika dan semua operator relasional memiliki prioritas yang sama.

Operator Deskripsi a kurang dari b a> b a lebih besar dari b a <=b a kurang dari atau sama dengan b a>=b a lebih besar dari atau sama dengan 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

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

Operator Kesetaraan Verilog

Operator kesetaraan memiliki prioritas yang sama di antara mereka dan memiliki prioritas lebih rendah daripada relasional operator. Hasilnya adalah 1 jika benar, dan 0 jika salah. Jika salah satu dari operan persamaan logika (==) atau ketidaksamaan logika (!=) adalah X atau Z, maka hasilnya adalah X. Anda dapat menggunakan operator persamaan kasus (===) atau operator ketidaksetaraan kasus (!==) untuk mencocokkan termasuk X dan Z dan akan selalu memiliki nilai yang diketahui.

Operator Deskripsi a ===b a sama dengan b, termasuk x dan z a !==b a tidak sama dengan b, termasuk x dan z a ==b a sama dengan b, hasilnya bisa tidak diketahui a !=b a tidak sama dengan b, hasilnya bisa tidak diketahui
  
  
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

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

Operator Logika Verilog

Hasil dari logika dan (&&) adalah 1 atau true jika kedua operandnya benar atau bukan nol. Hasil dari logika or (||) adalah 1 atau true jika salah satu operandnya benar atau bukan nol. Jika salah satu operan adalah X, maka hasilnya juga X. Operator logika negasi (!) akan mengubah operan bukan nol atau benar menjadi 0 dan operan nol atau salah menjadi 1, sedangkan X akan tetap sebagai X.

Operator Deskripsi a &&b bernilai true jika dan b benar a || b bernilai true jika atau b benar !a Mengonversi nilai bukan nol menjadi nol, dan sebaliknya
  
  
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

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

Operator Bitwise Verilog

Operator ini akan menggabungkan bit dalam satu operan dengan bit yang sesuai di operan lain untuk menghitung hasil bit tunggal.

& 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

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

Operator Shift Verilog

Ada dua jenis operator shift:

  • Operator pergeseran logika     :<< and>>
  • Operator shift aritmatika :<<>>

  
  
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

  
Log Simulasi
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# Operator
  2. Tutorial Verilog
  3. Rangkaian Verilog
  4. Tugas Verilog
  5. Pemblokiran &Non-Pemblokiran Verilog
  6. Fungsi Verilog
  7. Tugas Verilog
  8. Generator Jam Verilog
  9. Fungsi Matematika Verilog
  10. Format Waktu Verilog