Verilog
Sebuah function
dimaksudkan untuk melakukan beberapa pemrosesan pada input dan mengembalikan nilai tunggal, sedangkan task
lebih umum dan dapat menghitung beberapa nilai hasil dan mengembalikannya menggunakan keluaran dan keluar ketik argumen. Tugas dapat berisi elemen simulasi yang memakan waktu seperti @ , berpose dan lain-lain.
Tugas tidak perlu memiliki serangkaian argumen dalam daftar port, dalam hal ini tugas dapat dibiarkan kosong.
// Style 1
task [name];
input [port_list];
inout [port_list];
output [port_list];
begin
[statements]
end
endtask
// Style 2
task [name] (input [port_list], inout [port_list], output [port_list]);
begin
[statements]
end
endtask
// Empty port list
task [name] ();
begin
[statements]
end
endtask
Jika tugas bersifat statis, maka semua variabel anggotanya akan dibagikan ke seluruh pemanggilan berbeda dari tugas yang sama yang telah diluncurkan untuk dijalankan secara bersamaan
task sum (input [7:0] a, b, output [7:0] c);
begin
c = a + b;
end
endtask
// or
task sum;
input [7:0] a, b;
output [7:0] c;
begin
c = a + b;
end
endtask
initial begin
reg [7:0] x, y , z;
sum (x, y, z);
end
Argumen yang mengaktifkan tugas (x, y, z) sesuai dengan argumen (a, b, c) yang ditentukan oleh tugas. Sejak a dan b adalah input, nilai x dan y akan ditempatkan di a dan b masing-masing. Karena c dideklarasikan sebagai output dan dihubungkan dengan z selama pemanggilan, jumlah akan secara otomatis diteruskan ke variabel z dari c .
Kata kunci automatic
akan membuat tugas masuk kembali, jika tidak maka akan statis secara default. Semua item di dalam otomatis tugas dialokasikan secara dinamis untuk setiap pemanggilan dan tidak dibagi antara pemanggilan tugas yang sama yang berjalan secara bersamaan. Perhatikan bahwa automatic
item tugas tidak dapat diakses dengan referensi hierarkis.
Sebagai ilustrasi, pertimbangkan statis tampilan tugas yang dipanggil dari initial
yang berbeda blok yang berjalan secara bersamaan. Dalam hal ini, variabel integer yang dideklarasikan dalam tugas dibagi di antara semua pemanggilan tugas dan karenanya nilai yang ditampilkan harus bertambah untuk setiap pemanggilan.
module tb;
initial display();
initial display();
initial display();
initial display();
// This is a static task
task display();
integer i = 0;
i = i + 1;
$display("i=%0d", i);
endtask
endmodule
Log Simulasi xcelium> run i=1 i=2 i=3 i=4 xmsim: *W,RNQUIE: Simulation is complete.
Jika tugas dibuat otomatis, setiap pemanggilan tugas dialokasikan ruang yang berbeda dalam memori simulasi dan berperilaku berbeda.
module tb;
initial display();
initial display();
initial display();
initial display();
// Note that the task is now automatic
task automatic display();
integer i = 0;
i = i + 1;
$display("i=%0d", i);
endtask
endmodule
Log Simulasi xcelium> run i=1 i=1 i=1 i=1 xmsim: *W,RNQUIE: Simulation is complete.
Tugas yang dideklarasikan di luar semua modul disebut global tugas karena memiliki cakupan global dan dapat dipanggil dalam modul apa pun.
// This task is outside all modules
task display();
$display("Hello World !");
endtask
module des;
initial begin
display();
end
endmodule
Log Simulasi xcelium> run Hello World ! xmsim: *W,RNQUIE: Simulation is complete.
Jika tugas dideklarasikan dalam modul des, tugas itu harus dipanggil dengan mengacu pada nama instance modul.
module tb;
des u0();
initial begin
u0.display(); // Task is not visible in the module 'tb'
end
endmodule
module des;
initial begin
display(); // Task definition is local to the module
end
task display();
$display("Hello World");
endtask
endmodule
Log Simulasi xcelium> run Hello World Hello World xmsim: *W,RNQUIE: Simulation is complete.
function
dan task
Meskipun fungsi dan tugas Verilog memiliki tujuan yang sama, ada beberapa perbedaan mencolok di antara keduanya.
Saat suatu fungsi mencoba memanggil task
atau berisi pernyataan yang memakan waktu, kompilator melaporkan kesalahan.
module tb;
reg signal;
initial wait_for_1(signal);
function wait_for_1(reg signal);
#10;
endfunction
endmodule
Log Simulasi #10; | xmvlog: *E,BADFCN (testbench.sv,7|4): illegal time/event control statement within a function or final block or analog initial block [10.3.4(IEEE)].
Tugas dapat dinonaktifkan menggunakan disable
kata kunci.
module tb;
initial display();
initial begin
// After 50 time units, disable a particular named
// block T_DISPLAY inside the task called 'display'
#50 disable display.T_DISPLAY;
end
task display();
begin : T_DISPLAY
$display("[%0t] T_Task started", $time);
#100;
$display("[%0t] T_Task ended", $time);
end
begin : S_DISPLAY
#10;
$display("[%0t] S_Task started", $time);
#20;
$display("[%0t] S_Task ended", $time);
end
endtask
endmodule
Saat tampilkan tugas diluncurkan oleh initial
pertama blok, T_DISPLAY dimulai dan dinonaktifkan ketika waktu mencapai 50 unit. Segera blok berikutnya S_DISPLAY dimulai dan berlari hingga selesai sebanyak 80 unit.
xcelium> run [0] T_Task started [60] S_Task started [80] S_Task ended xmsim: *W,RNQUIE: Simulation is complete.
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