Altifigence Academy

17 / 37 · Praktikum

Praktikum: verifikasi reset, perputaran, dan invarian pencacah

Bandingkan tiap tepi dengan acuan dan pisahkan pengaruh inisialisasi, reset, serta lebar bit.

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

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;
endmodule

Cara menjalankan

Di New analysis, pilih Two-state single-clock v1, Clock port=clk, periode 1000ps. Jalankan Preflight lalu Run RTL simulation dengan:

PengaturanNilai
Nilai awal register, mulai LSB[true,true]
Reset portrst · Active high · 1 cycle
Maximum cycles / time5 / 5000ps

Stimulus

json
[
  {
    "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.

Lima tepi naik praktikum
Lihat data gelombang
Data gelombang: setiap karakter mewakili satu interval; titik mempertahankan keadaan sebelumnya; p adalah satu siklus clock.
SinyalGelombangNilai bus
edge23452E0 → E1 → E2 → E3 → E4
reset10...
count sebelum2345211 → 00 → 01 → 10 → 11
count sesudah2345200 → 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 naikrstcount sebelumcount sesudah
500ps11100
1500ps00001
2500ps00110
3500ps01011
4500ps01100

Tanpa reset, hubungan berikut harus berlaku pada setiap tepi:

ck+1=(ck+1) mod 4c_{k+1}=(c_k+1)\bmod 4

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:

ck+1={0rk=10rk=0 ∧ ek=1 ∧ ck≥9ck+1rk=0 ∧ ek=1 ∧ ck<9ckrk=0 ∧ ek=0c_{k+1}=\begin{cases}0 & r_k=1\\0 & r_k=0\ \land\ e_k=1\ \land\ c_k\ge 9\\c_k+1 & r_k=0\ \land\ e_k=1\ \land\ c_k<9\\c_k & r_k=0\ \land\ e_k=0\end{cases}

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; 11 mod 4=311\bmod4=3, yaitu 11. “Total sebelas tepi” berbeda dari “sebelas kenaikan setelah reset”: jika tepi pertama reset, hanya ada sepuluh kenaikan.

Lesson files

counter-top.sv ↓counter-inputs.json ↓

Pilihan berlaku di peramban ini. Ubah kapan saja di bagian bawah halaman.