Verilog
Elemen digital adalah entitas biner dan hanya dapat menampung salah satu dari dua nilai - 0 dan 1. Namun transisi dari 0 ke 1 dan 1 ke 0 memiliki penundaan transisi dan begitu juga setiap elemen gerbang untuk menyebarkan nilai dari input ke outputnya.
Misalnya, gerbang AND dua input harus mengalihkan output ke 1 jika kedua input menjadi 1 dan kembali ke 0 ketika salah satu inputnya menjadi 0. Penundaan gerbang dan pin ke pin ini dapat ditentukan di Verilog saat membuat instance logika primitif.
Waktu yang dibutuhkan keluaran gerbang untuk berubah dari beberapa nilai ke 1 disebut naik menunda. Waktu yang dibutuhkan keluaran sebuah gerbang untuk berubah dari suatu nilai ke 0 disebut jatuh menunda. Waktu yang dibutuhkan keluaran gerbang untuk berubah dari beberapa nilai ke impedansi tinggi disebut mematikan tunda.
Penundaan ini sebenarnya berlaku untuk sinyal apa pun karena semuanya dapat naik atau turun kapan saja di sirkuit nyata dan tidak terbatas hanya pada output gerbang. Ada tiga cara untuk mewakili penundaan gerbang dan dua format penundaan dapat diterapkan pada kebanyakan primitif yang outputnya tidak bertransisi ke impedansi tinggi. Seperti format tiga penundaan tidak dapat diterapkan ke gerbang AND karena output tidak akan pergi ke Z untuk kombinasi input apa pun.
// Single delay specified - used for all three types of transition delays
or #(<delay>) o1 (out, a, b);
// Two delays specified - used for Rise and Fall transitions
or #(<rise>, <fall>) o1 (out, a, b);
// Three delays specified - used for Rise, Fall and Turn-off transitions
or #(<rise>, <fall>, <turn_off>) o1 (out, a, b);
Jika hanya satu penundaan yang ditentukan, ketiga jenis penundaan akan menggunakan nilai yang diberikan yang sama. Jika ada dua penundaan yang ditentukan, yang pertama mewakili naik dan yang kedua mewakili jatuh menunda. Jika ada tiga penundaan yang ditentukan, itu mewakili naik , jatuh dan matikan penundaan masing-masing.
module des ( input a, b,
output out1, out2);
// AND gate has 2 time unit gate delay
and #(2) o1 (out1, a, b);
// BUFIF0 gate has 3 time unit gate delay
bufif0 #(3) b1 (out2, a, b);
endmodule
module tb;
reg a, b;
wire out1, out2;
des d0 (.out1(out1), .out2(out2), .a(a), .b(b));
initial begin
{a, b} <= 0;
$monitor ("T=%0t a=%0b b=%0b and=%0b bufif0=%0b", $time, a, b, out1, out2);
#10 a <= 1;
#10 b <= 1;
#10 a <= 0;
#10 b <= 0;
end
endmodule
Lihat bahwa output dari DAN gerbang berubah 2 unit waktu setelah salah satu inputnya berubah. Misalnya, b menjadi 1 sementara a sudah 1 pada T=20. Tetapi output menjadi 1 hanya pada T=22. Demikian pula, a kembali ke nol pada T=30 dan output mendapatkan nilai baru pada T=32.
Penundaan gerbang ditentukan sebagai 3 unit waktu untuk BUFIF0 dan karenanya ketika b berubah dari 0 ke 1 sementara a sudah pada 1, output membutuhkan 3 unit waktu untuk diperbarui ke Z dan akhirnya melakukannya pada T=23.
Log Simulasincsim> run T=0 a=0 b=0 and=x bufif0=x T=2 a=0 b=0 and=0 bufif0=x T=3 a=0 b=0 and=0 bufif0=0 T=10 a=1 b=0 and=0 bufif0=0 T=13 a=1 b=0 and=0 bufif0=1 T=20 a=1 b=1 and=0 bufif0=1 T=22 a=1 b=1 and=1 bufif0=1 T=23 a=1 b=1 and=1 bufif0=z T=30 a=0 b=1 and=1 bufif0=z T=32 a=0 b=1 and=0 bufif0=z T=40 a=0 b=0 and=0 bufif0=z T=43 a=0 b=0 and=0 bufif0=0 ncsim: *W,RNQUIE: Simulation is complete.
Mari kita terapkan testbench yang sama yang ditunjukkan di atas ke model Verilog berbeda yang ditunjukkan di bawah ini di mana naik dan jatuh penundaan disebutkan secara eksplisit.
module des ( input a, b,
output out1, out2);
and #(2, 3) o1 (out1, a, b);
bufif0 #(4, 5) b1 (out2, a, b);
endmodule
Log Simulasi ncsim> run T=0 a=0 b=0 and=x bufif0=x T=3 a=0 b=0 and=0 bufif0=x T=5 a=0 b=0 and=0 bufif0=0 T=10 a=1 b=0 and=0 bufif0=0 T=14 a=1 b=0 and=0 bufif0=1 T=20 a=1 b=1 and=0 bufif0=1 T=22 a=1 b=1 and=1 bufif0=1 T=24 a=1 b=1 and=1 bufif0=z T=30 a=0 b=1 and=1 bufif0=z T=33 a=0 b=1 and=0 bufif0=z T=40 a=0 b=0 and=0 bufif0=z T=45 a=0 b=0 and=0 bufif0=0 ncsim: *W,RNQUIE: Simulation is complete.
module des ( input a, b,
output out1, out2);
and #(2, 3) o1 (out1, a, b);
bufif0 #(5, 6, 7) b1 (out2, a, b);
endmodule
Log Simulasi ncsim> run T=0 a=0 b=0 and=x bufif0=x T=3 a=0 b=0 and=0 bufif0=x T=6 a=0 b=0 and=0 bufif0=0 T=10 a=1 b=0 and=0 bufif0=0 T=15 a=1 b=0 and=0 bufif0=1 T=20 a=1 b=1 and=0 bufif0=1 T=22 a=1 b=1 and=1 bufif0=1 T=27 a=1 b=1 and=1 bufif0=z T=30 a=0 b=1 and=1 bufif0=z T=33 a=0 b=1 and=0 bufif0=z T=40 a=0 b=0 and=0 bufif0=z T=46 a=0 b=0 and=0 bufif0=0 ncsim: *W,RNQUIE: Simulation is complete.
Penundaan tidak sama di bagian yang berbeda dari chip yang dibuat juga tidak sama untuk suhu yang berbeda dan variasi lainnya. Jadi Verilog juga memberikan tingkat kontrol ekstra untuk setiap jenis penundaan yang disebutkan di atas. Setiap gerbang digital dan sel transistor memiliki penundaan minimum, tipikal, dan maksimum yang ditentukan berdasarkan simpul proses dan biasanya disediakan oleh perpustakaan dari fabrikasi pengecoran.
Untuk setiap jenis penundaan - naik, turun, dan mati - tiga nilai min , ketik dan maks dapat ditentukan dan berdiri untuk penundaan minimum, tipikal dan maksimum.
module des ( input a, b,
output out1, out2);
and #(2:3:4, 3:4:5) o1 (out1, a, b);
bufif0 #(5:6:7, 6:7:8, 7:8:9) b1 (out2, a, b);
endmodule
Log Simulasi ncsim> run T=0 a=0 b=0 and=x bufif0=x T=4 a=0 b=0 and=0 bufif0=x T=7 a=0 b=0 and=0 bufif0=0 T=10 a=1 b=0 and=0 bufif0=0 T=16 a=1 b=0 and=0 bufif0=1 T=20 a=1 b=1 and=0 bufif0=1 T=23 a=1 b=1 and=1 bufif0=1 T=28 a=1 b=1 and=1 bufif0=z T=30 a=0 b=1 and=1 bufif0=z T=34 a=0 b=1 and=0 bufif0=z T=40 a=0 b=0 and=0 bufif0=z T=47 a=0 b=0 and=0 bufif0=0 ncsim: *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