17 / 37 · Praktikum
Praktikum: verifikasi reset, perputaran, dan invarian pencacah
Bandingkan tiap tepi dengan acuan dan pisahkan pengaruh inisialisasi, reset, serta lebar bit.
Pelajaran dapat dibaca gratis. Daftar untuk menyimpan progres.
Rangkaian uji dan pengamatan
Keadaan awal 3; resetReset Kontrol yang mengembalikan keadaan ke nilai awal tertentu. Sifat sinkron/asinkron dan prioritas terhadap kontrol lain harus ditetapkan. Selengkapnya diterapkan pada tepi naikTepi naik Saat clock berubah 0 ke 1, berbeda dari tingkat yang mencakup seluruh interval CLK=1. Selengkapnya pertama. Sesudahnya nilai bergerak 0,1,2,3,0. Walaupun reset aktif, nilai tetap sebelum tepi.
Sebelum memulai
Siapkan proyek Desktop Digital Design Studio dan izin eksekusinya. Simpan setiap contoh dalam folder tersendiri sebagai rtl/top.sv.
Sumber SystemVerilog
module top (
input logic clk,
input logic rst,
output logic [1:0] count
);
// Active-high synchronous reset: sampled only at the rising clock edge.
always_ff @(posedge clk)
if (rst) count <= 2'b00;
else count <= count + 2'b01;
endmoduleCara menjalankan
Di New analysis, pilih Two-state single-clock v1, Clock port=clk, periode 1000ps. Jalankan Preflight lalu Run RTL simulation dengan:
| Pengaturan | Nilai |
|---|---|
| Nilai awal register, mulai LSB | [true,true] |
| Reset port | rst · Active high · 1 cycle |
| Maximum cycles / time | 5 / 5000ps |
Stimulus
[
{
"inputs": {}
},
{
"inputs": {}
},
{
"inputs": {}
},
{
"inputs": {}
},
{
"inputs": {}
}
]Setiap kolom mewakili tepi naik: masukan tepat sebelum, keadaan after tepat sesudah. Penjajaran menunjukkan sampel, bukan propagasiTundaan propagasi Waktu sejak masukan berubah hingga keluaran stabil pada nilai benar. Kesetaraan logika berbeda dari karakteristik waktu. Selengkapnya fisik. E0–E4 adalah 500,1500,2500,3500,4500ps. Bandingkan seluruh count perantara, bukan hanya akhir.
Lihat data gelombang
| Sinyal | Gelombang | Nilai bus |
|---|---|---|
| edge | 23452 | E0 → E1 → E2 → E3 → E4 |
| reset | 10... | |
| count sebelum | 23452 | 11 → 00 → 01 → 10 → 11 |
| count sesudah | 23452 | 00 → 01 → 10 → 11 → 00 |
Hasil yang dibandingkan
5 cycles · count=00. Periksa 00→01→10→11→00 pada 500,1500,2500,3500,4500ps.
Praktikum memakai RTL 0/1 satu clock tanpa testbench #delay, initial, atau X/Z. Tanda selesai belajar adalah catatan pembelajaran, bukan hasil simulasi.
Hitung keadaan harapan tiap tepi
RegisterRegister Rangkaian penyimpan beberapa bit keadaan. Register sinkron mata kuliah ini menangkap masukan yang ditentukan pada tepi clock. Selengkapnya dimulai pada 3, tetapi reset diprioritaskan pada tepi pertama. Inisialisasi berbeda dari reset.
| Tepi naik | rst | count sebelum | count sesudah |
|---|---|---|---|
| 500ps | 1 | 11 | 00 |
| 1500ps | 0 | 00 | 01 |
| 2500ps | 0 | 01 | 10 |
| 3500ps | 0 | 10 | 11 |
| 4500ps | 0 | 11 | 00 |
Tanpa reset, hubungan berikut harus berlaku pada setiap tepi:
Memeriksa hanya 00 akhir dapat meloloskan keadaan perantara yang salah. Periksa seluruh urutan dan prioritas reset secara terpisah.
Ubah satu parameter pada satu waktu
- Dengan nilai awal 00, urutan setelah reset pertama harus sama: periksa reset tidak bergantung pada nilai awal.
- Dengan Reset cycles=2, count harus 00 pada dua tepi pertama; kenaikan mulai satu tepi lebih lambat.
- Pada tiga bit, perputaran membutuhkan delapan kenaikan. Tinjau deklarasi, lebar konstanta, array nilai awal, dan durasi eksekusi.
Generalisasi ke modulo-10
Empat bit merepresentasikan 0–15: kenaikan biasa tidak otomatis menghasilkan 0 setelah 9. Definisikan secara eksplisit:
Aturan ini mengembalikan 10–15 ke 0 saat enable aktif. Kebijakan lain mungkin, tetapi spesifikasi dan model verifikasi harus memakai kebijakan sama.
Coba sendiri
Setelah reset tepi pertama, pencacah dua bit asli melakukan sebelas kenaikan tanpa kontrol enable. Hitung count tanpa mengurutkan keadaan perantara.
Baca penjelasan
Setelah reset, keadaan 0; , yaitu 11. “Total sebelas tepi” berbeda dari “sebelas kenaikan setelah reset”: jika tepi pertama reset, hanya ada sepuluh kenaikan.