Verilog
Menempatkan nilai ke jaring dan variabel disebut penugasan. Ada tiga bentuk dasar:
Tugas memiliki dua bagian - sisi kanan (RHS) dan sisi kiri (LHS) dengan simbol sama dengan (=) atau simbol kurang dari sama (<=) di antaranya.
Jenis tugas | Sisi kiri |
---|---|
Prosedur |
|
Berkelanjutan |
|
Prosedural Berkelanjutan |
|
RHS dapat berisi ekspresi apa pun yang mengevaluasi ke nilai akhir sementara LHS menunjukkan net atau variabel yang nilai dalam RHS ditetapkan.
module tb;
reg clk;
wire a, b, c, d, e, f;
reg z, y;
// clk is on the LHS and the not of clk forms RHS
always #10 clk = ~clk;
// y is the LHS and the constant 1 is RHS
assign y = 1;
// f is the LHS, and the expression of a,b,d,e forms the RHS
assign f = (a | b) ^ (d & e);
always @ (posedge clk) begin
// z is the LHS, and the expression of a,b,c,d forms the RHS
z <= a + b + c + d;
end
initial begin
// Variable names on the left form LHS while 0 is RHS
a <= 0; b <= 0; c <= 0; d <= 0; e <= 0;
clk <= 0;
end
endmodule
Penugasan prosedural terjadi dalam prosedur seperti selalu, inisial, tugas dan fungsi dan digunakan untuk menempatkan nilai ke variabel. Variabel akan menyimpan nilai hingga penugasan berikutnya ke variabel yang sama.
Nilai akan ditempatkan ke variabel ketika simulasi mengeksekusi pernyataan ini di beberapa titik selama waktu simulasi. Ini dapat dikontrol dan dimodifikasi sesuai keinginan kita dengan menggunakan pernyataan aliran kontrol seperti if-else-if, pernyataan kasus, 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++;
Nilai awal dapat ditempatkan ke variabel pada saat deklarasi seperti yang ditunjukkan berikutnya. Penugasan tidak memiliki durasi dan menyimpan nilai hingga penugasan berikutnya ke variabel yang sama terjadi. Perhatikan bahwa penetapan deklarasi variabel ke array tidak diperbolehkan.
module my_block;
reg [31:0] data = 32'hdead_cafe;
initial begin
#20 data = 32'h1234_5678; // data will have dead_cafe from time 0 to time 20
// At time 20, data will get 12345678
end
endmodule
reg [3:0] a = 4'b4;
// is equivalent to
reg [3:0] a;
initial a = 4'b4;
Jika variabel diinisialisasi selama deklarasi dan pada waktu 0 di blok awal seperti yang ditunjukkan di bawah ini, urutan evaluasi tidak dijamin, dan karenanya 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; // illegal
integer i = 0, j; // declares two integers i,j and i is assigned 0
real r2 = 4.5, r3 = 8; // declares two real numbers r2,r3 and are assigned 4.5, 8 resp.
time startTime = 40; // declares time variable with initial value 40
Blok prosedural dan tugas akan dibahas lebih detail di bagian selanjutnya.
Klik di sini untuk contoh simulasi langkah demi langkah !
Ini digunakan untuk menetapkan nilai ke skalar dan jaring vektor dan terjadi setiap kali ada perubahan dalam RHS. Ini menyediakan cara untuk memodelkan logika kombinasional tanpa menentukan interkoneksi gerbang dan membuatnya lebih mudah untuk mengarahkan jaring dengan ekspresi logis.
// Example model of an AND gate
wire a, b, c;
assign a = b & c;
Setiap kali b atau c mengubah nilainya, maka seluruh ekspresi dalam RHS akan dievaluasi dan a akan diperbarui dengan nilai baru.
Hal ini memungkinkan kita untuk menempatkan penugasan berkelanjutan pada pernyataan yang sama yang mendeklarasikan net. Perhatikan bahwa karena net hanya dapat dideklarasikan satu kali, hanya satu penetapan deklarasi yang mungkin untuk net.
wire penable = 1;
Ini adalah pernyataan prosedural yang memungkinkan ekspresi untuk terus-menerus ditugaskan ke jaring atau variabel dan terdiri dari dua jenis.
assign
... deassign
force
... release
Ini akan menimpa semua tugas prosedural ke variabel dan dinonaktifkan dengan menggunakan sinyal yang sama dengan deassign
. Nilai variabel akan tetap sama sampai variabel tersebut mendapat nilai baru melalui penugasan yang prosedural atau prosedural terus menerus. LHS dari assign
pernyataan tidak dapat berupa bit-select, part-select atau referensi array tetapi dapat berupa variabel atau gabungan variabel.
reg q;
initial begin
assign q = 0;
#10 deassign q;
end
Ini mirip dengan assign - deassign
pernyataan tetapi juga dapat diterapkan pada jaring dan variabel. LHS dapat berupa bit-select dari net, part-select dari net, variabel atau net tetapi tidak dapat menjadi referensi ke array dan bit/part select dari suatu variabel. force
statment akan menimpa semua tugas lain yang dibuat ke variabel hingga dirilis menggunakan release
kata kunci.
reg o, a, b;
initial begin
force o = a & b;
...
release o;
end
Verilog
case pernyataan memeriksa apakah ekspresi yang diberikan cocok dengan salah satu ekspresi lain dalam daftar dan bercabang sesuai. Biasanya digunakan untuk mengimplementasikan multiplexer. Konstruksi if-else mungkin tidak cocok jika ada banyak kondisi yang harus diperiksa dan akan disintesis menjadi
Parameter adalah konstruksi Verilog yang memungkinkan modul untuk digunakan kembali dengan spesifikasi yang berbeda. Misalnya, penambah 4-bit dapat diparameterisasi untuk menerima nilai jumlah bit dan nilai parameter baru dapat diteruskan selama pembuatan modul. Jadi, penambah N-bit bisa menjadi pen
Verilog adalah bahasa deskripsi perangkat keras dan tidak ada persyaratan bagi desainer untuk mensimulasikan desain RTL mereka agar dapat mengubahnya menjadi gerbang logika. Jadi apa yang perlu disimulasikan? Simulasi adalah teknik menerapkan stimulus input yang berbeda ke desain pada waktu yang
Desain module pr_en ( input [7:0] a, input [7:0] b, input [7:0] c, input [7:0] d, input [1:0] sel, output reg [7:0] out); always @ (a or b or c or d or sel) begin if (sel == 2b00) out <= a; else