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

Operator Verilog: Aritmatika & Kontrol Esensial untuk Sintesis

Data yang tidak dapat diproses cukup berguna, pasti akan ada bentuk perhitungan yang diperlukan dalam sirkuit digital dan sistem komputer. Mari kita lihat beberapa operator dalam Verilog yang akan memungkinkan alat sintesis merealisasikan elemen hardware yang sesuai.

Operator Aritmatika Verilog

Jika operand kedua dari operator pembagian atau modulus adalah nol, maka hasilnya akan X. Jika salah satu operand operator perpangkatan adalah real, maka hasilnya juga akan real. Hasilnya akan 1 jika operand kedua operator perpangkatan adalah 0 (a0).

Operator Deskripsi
a + b a ditambah b
a - b a dikurangi b
a * b a dikalikan b
a / b a dibagi b
a % b a modulo b
a ** b a dipangkatkan b

Contoh penggunaan operator aritmatika 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  
Simulation Log
 ncsim> run Add + = 54 Sub - = 36 Mul * = 149 Div / = 5 Mod % = 0 Pow ** = 81 ncsim: *W,RNQUIE: Simulasi selesai. 

Operator Relasional Verilog

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

Operator Deskripsi
a < b 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  
Simulation Log
 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: Simulasi selesai. 

Operator Kesetaraan Verilog

Operator kesetaraan memiliki prioritas yang sama di antara mereka dan lebih rendah dalam prioritas daripada operator relasional. Hasilnya adalah 1 jika benar, dan 0 jika salah. Jika salah satu operand dari logical-equality (==) atau logical-inequality (!=) adalah X atau Z, maka hasilnya akan X. Anda dapat menggunakan case-equality operator (===) atau case-inequality operator (!==) 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, hasil bisa tidak diketahui
a != b a tidak sama dengan b, hasil 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  
Simulation Log
 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: Simulasi selesai. 

Operator Logis Verilog

Hasil dari logical and (&&) adalah 1 atau benar ketika kedua operandnya benar atau non-nol. Hasil dari logical or (||) adalah 1 atau benar ketika salah satu operandnya benar atau non-nol. Jika salah satu operand adalah X, maka hasilnya juga akan X. Operator logical negation (!) akan mengubah operand non-nol atau benar menjadi 0 dan operand nol atau salah menjadi 1, sementara X akan tetap sebagai X.

Operator Deskripsi
a && b dievaluasi sebagai benar jika a dan b benar
a || b dievaluasi sebagai benar jika a atau b benar
!a Mengubah nilai non-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  
Simulation Log
 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: Simulasi selesai. 

Operator Bitwise Verilog

Operator ini akan menggabungkan bit dalam satu operand dengan bit yang sesuai dalam operand lainnya untuk menghasilkan satu 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  
Simulation Log
 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: Simulasi selesai. 

Operator Shift Verilog

Ada dua macam operator shift:

  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  
Simulation Log
 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: Simulasi selesai. 

Verilog

  1. Operator C# – Panduan Lengkap tentang Operator dalam C#
  2. Menguasai Verilog: Tutorial Lengkap untuk Desain Sirkuit Digital
  3. Menguasai Konkatenasi Verilog: Panduan Praktis
  4. Memahami Penugasan Verilog: Jenis, Sintaks, dan Praktik Terbaik
  5. Perbedaan Kunci Penugasan Blokir dan Non-Blokir Verilog
  6. Menguasai Fungsi Verilog untuk Desain RTL yang Efisien
  7. Memahami Tugas Verilog: Fungsi vs Tugas, Sintaks, dan Penggunaan
  8. Generator Jam Verilog: Panduan Desain dan Implementasi
  9. Menguasai Fungsi Matematika Verilog untuk Desain Perangkat Keras yang Efisien
  10. Menguasai $timeformat Verilog: Kontrol Presisi dan Tampilan