Verilog
Sebagian besar bahasa pemrograman memiliki fitur karakteristik yang disebut lingkup yang mendefinisikan visibilitas bagian kode tertentu ke variabel dan metode. Lingkup mendefinisikan namespace untuk menghindari tabrakan antara nama objek yang berbeda dalam namespace yang sama.
Verilog mendefinisikan ruang lingkup baru untuk modul, fungsi, tugas, blok bernama dan menghasilkan blok.
module tb;
reg signal;
// Another variable cannot be declared with
// an already existing name in the same scope
reg signal;
// However, the name 'signal' can be reused inside
// a task because it belongs to a different scope.
task display();
reg signal = 1;
$display("signal = %0b", signal);
endtask
endmodule
Pengidentifikasi, seperti nama sinyal, dapat digunakan untuk mendeklarasikan hanya satu jenis item dalam lingkup tertentu. Ini berarti bahwa dua variabel dengan tipe data yang berbeda atau sama tidak dapat memiliki nama yang sama, atau tugas dan variabel dengan nama yang sama, atau bahkan instance net dan gate dengan nama yang sama dalam lingkup yang sama.
Setiap pengenal di Verilog memiliki nama jalur hierarkis yang unik, di mana setiap contoh modul, tugas, fungsi atau bernama begin end
atau fork join
blok mendefinisikan level atau cakupan baru.
module tb;
// Create two instances of different modules
A uA();
B uB();
// Create a named block that declares a signal and
// prints the value at 10ns from simulation start
initial begin : TB_INITIAL
reg signal;
#10 $display("signal=%0d", signal);
end
// We'll try to access other scopes using hierarchical
// references from this initial block
initial begin
TB_INITIAL.signal = 0;
uA.display();
uB.B_INITIAL.B_INITIAL_BLOCK1.b_signal_1 = 1;
uB.B_INITIAL.B_INITIAL_BLOCK2.b_signal_2 = 0;
end
endmodule
module A;
task display();
$display("Hello, this is A");
endtask
endmodule
module B;
initial begin : B_INITIAL
#50;
begin : B_INITIAL_BLOCK1
reg b_signal_1;
#10 $display("signal_1=%0d", b_signal_1);
end
#50;
begin : B_INITIAL_BLOCK2
reg b_signal_2;
#10 $display("signal_2=%0d", b_signal_2);
end
end
endmodule
Log Simulasi xcelium> run Hello, this is A TB signal=0 signal_1=1 signal_2=0 xmsim: *W,RNQUIE: Simulation is complete.
Modul tingkat yang lebih rendah dapat mereferensikan item dalam modul di atasnya dalam hierarki. Misalnya, sinyal di blok TB_INITIAL akan terlihat dari tugas tampilan di A.
module A;
task display();
$display("Hello, this is A");
// Upward referencing, TB_INITIAL is visible in this module
#5 TB_INITIAL.signal = 1;
endtask
endmodule
Perhatikan bahwa sinyal TB sekarang menjadi 1, bukan 0, karena perubahan referensi ke atas yang dilakukan pada sinyal oleh modul A.
Log Simulasixcelium> run Hello, this is A TB signal=1 signal_1=1 signal_2=0 xmsim: *W,RNQUIE: Simulation is complete.
Berikut adalah contoh lain dengan beberapa modul bersarang dan simpul daun dapat langsung mengakses anggota dari simpul di atas melalui referensi hierarki ke atas.
module tb;
A a();
function display();
$display("Hello, this is TB");
endfunction
endmodule
module A;
B b();
function display();
$display("Hello, this is A");
endfunction
endmodule
module B;
C c();
function display();
$display("Hello, this is B");
endfunction
endmodule
module C;
D d();
function display();
$display("Hello, this is C");
endfunction
endmodule
module D;
initial begin
a.display(); // or A.display()
b.display(); // or B.display()
c.display(); // or C.display()
a.b.c.display();
end
endmodule
Log Simulasi xcelium> run Hello, this is A Hello, this is B Hello, this is C Hello, this is C xmsim: *W,RNQUIE: Simulation is complete.
Ketika compiler menemukan b.display(),
Verilog
Sebuah for loop adalah loop yang paling banyak digunakan dalam perangkat lunak, tetapi terutama digunakan untuk mereplikasi logika perangkat keras di Verilog. Ide di balik for loop adalah untuk mengulangi satu set pernyataan yang diberikan dalam loop selama kondisi yang diberikan benar. Ini sangat m
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