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

Memahami Penugasan Verilog: Jenis, Sintaks, dan Praktik Terbaik

Menempatkan nilai pada jaringan (net) dan variabel disebut penugasan. Terdapat tiga bentuk dasar:

Nilai LHS yang Valid

Sebuah penugasan terdiri dari dua bagian: sisi kanan (RHS) dan sisi kiri (LHS), yang dipisahkan oleh simbol sama dengan (=) atau simbol kurang dari-sama dengan (<=).

Jenis penugasanSisi kiri
Prosedural
  • Variabel (vektor/skalar)
  • Bit-select atau part-select dari vektor reg, integer, atau variabel waktu
  • Kata memori
  • Konkatenasi dari salah satu di atas
Berkelanjutan
  • Jaringan (vektor/skalar)
  • Bit-select atau part-select dari jaringan vektor
  • Konkatenasi bit-select dan part-select
Prosedural Berkelanjutan
  • Jaringan atau variabel (vektor/skalar)
  • Bit-select atau part-select dari jaringan vektor

RHS dapat berisi ekspresi apa pun yang mengevaluasi ke nilai akhir, sedangkan LHS menunjukkan jaringan atau variabel yang nilai RHS ditugaskan padanya.

module tb;
  reg clk;
  wire a, b, c, d, e, f;
  reg z, y;
  // clk berada di LHS dan not clk membentuk RHS
  always #10 clk = ~clk;
  // y adalah LHS dan konstanta 1 adalah RHS
  assign y = 1;
  // f adalah LHS, dan ekspresi a,b,d,e membentuk RHS
  assign f = (a | b) ^ (d & e);
  always @ (posedge clk) begin
    // z adalah LHS, dan ekspresi a,b,c,d membentuk RHS
    z <= a + b + c + d;
  end
  initial begin
    // Nama variabel di kiri membentuk LHS sementara 0 adalah RHS
    a <= 0; b <= 0; c <= 0; d <= 0; e <= 0; clk <= 0;
  end
endmodule

Penugasan Prosedural

Penugasan prosedural terjadi dalam prosedur seperti always, initial, task, dan fungsi, dan digunakan untuk menempatkan nilai pada variabel. Variabel akan memegang nilai tersebut hingga penugasan berikutnya pada variabel yang sama.

Nilai akan ditempatkan pada variabel saat simulasi mengeksekusi pernyataan ini pada titik tertentu selama waktu simulasi. Ini dapat dikontrol dan dimodifikasi sesuai keinginan dengan menggunakan pernyataan aliran kontrol seperti if-else-if, pernyataan case, dan mekanisme perulangan.

reg [7:0] data;
integer count;
real period;
initial begin
  data = 8'h3e;
  period = 4.23;
  count = 0;
end
always @ (posedge clk) count++;

Penugasan Deklarasi Variabel

Nilai awal dapat ditempatkan pada variabel pada saat deklarasinya seperti yang ditunjukkan berikutnya. Penugasan ini tidak memiliki durasi dan memegang nilai hingga penugasan berikutnya pada variabel yang sama terjadi. Perhatikan bahwa penugasan deklarasi variabel pada array tidak diperbolehkan.

module my_block;
  reg [31:0] data = 32'hdead_cafe;
  initial begin
    #20 data = 32'h1234_5678;
    // data akan memiliki dead_cafe dari waktu 0 hingga waktu 20
    // Pada waktu 20, data akan mendapatkan 12345678
  end
endmodule
reg [3:0] a = 4'b4;
// ekuivalen dengan
reg [3:0] a;
initial a = 4'b4;

Jika variabel diinisialisasi selama deklarasi dan pada waktu 0 dalam blok initial seperti yang ditunjukkan di bawah ini, urutan evaluasi tidak dijamin, dan oleh karena itu dapat memiliki 8'h05 atau 8'hee.

module my_block;
  reg [7:0] addr = 8'h05;
  initial addr = 8'hee;
endmodule
reg [3:0] array [3:0] = 0; // ilegal
integer i = 0, j; // mendeklarasikan dua integer i,j dan i ditugaskan 0
real r2 = 4.5, r3 = 8; // mendeklarasikan dua bilangan real r2,r3 dan ditugaskan 4.5, 8 masing-masing
time startTime = 40; // mendeklarasikan variabel waktu dengan nilai awal 40

Blok dan penugasan prosedural akan dibahas lebih detail di bagian selanjutnya.

Penugasan Berkelanjutan

Klik di sini untuk contoh simulasi langkah demi langkah !

Ini digunakan untuk menugaskan nilai pada jaringan skalar dan vektor dan terjadi setiap kali ada perubahan pada RHS. Ini menyediakan cara untuk memodelkan logika kombinatorial tanpa menentukan konektivitas gerbang dan memudahkan untuk mendorong jaringan dengan ekspresi logis.

// Contoh model gerbang AND
wire a, b, c;
assign a = b & c;

Setiap kali b atau c mengubah nilainya, maka seluruh ekspresi di RHS akan dievaluasi dan a akan diperbarui dengan nilai baru.

Penugasan Deklarasi Jaringan

Ini memungkinkan kita untuk menempatkan penugasan berkelanjutan pada pernyataan yang sama yang mendeklarasikan jaringan. Perhatikan bahwa karena jaringan hanya dapat dideklarasikan sekali, hanya satu penugasan deklarasi yang mungkin untuk sebuah jaringan.

wire penable = 1;

Penugasan Prosedural Berkelanjutan

Ini adalah pernyataan prosedural yang memungkinkan ekspresi untuk ditugaskan secara berkelanjutan pada jaringan atau variabel dan ada dua jenis:

assign deassign

Ini akan menggantikan semua penugasan prosedural pada variabel dan dinonaktifkan dengan menggunakan sinyal yang sama dengan deassign. Nilai variabel akan tetap sama hingga variabel mendapatkan nilai baru melalui penugasan prosedural atau prosedural berkelanjutan. LHS dari pernyataan assign tidak dapat menjadi bit-select, part-select, atau referensi array, tetapi dapat menjadi variabel atau konkatenasi variabel.

reg q;
initial begin
  assign q = 0;
  #10 deassign q;
end

force release

Ini mirip dengan pernyataan assign - deassign tetapi juga dapat diterapkan pada jaringan dan variabel. LHS dapat menjadi bit-select dari jaringan, part-select dari jaringan, variabel atau jaringan, tetapi tidak dapat menjadi referensi ke array dan bit/part select dari variabel. Pernyataan force akan menggantikan semua penugasan lainnya yang dibuat pada variabel hingga dilepaskan menggunakan kata kunci release.

reg o, a, b;
initial begin
  force o = a & b;
  ...
  release o;
end

Verilog

  1. Menguasai Verilog: Tutorial Lengkap untuk Desain Sirkuit Digital
  2. Menguasai Konkatenasi Verilog: Panduan Praktis
  3. Menguasai Fungsi Verilog untuk Desain RTL yang Efisien
  4. Memahami Tugas Verilog: Fungsi vs Tugas, Sintaks, dan Penggunaan
  5. Generator Jam Verilog: Panduan Desain dan Implementasi
  6. Menguasai Fungsi Matematika Verilog untuk Desain Perangkat Keras yang Efisien
  7. Menguasai $timeformat Verilog: Kontrol Presisi dan Tampilan
  8. Memahami dan Mencetak Timescale Verilog pada Setiap Cakupan
  9. Menguasai File I/O dalam Verilog: Buka, Baca, Tulis, dan Tutup
  10. Panduan Pemula Verilog: Contoh Hello World