Altifigence Academy

25 / 63 · Praktikum

Praktikum: pengujian menyeluruh MUX dan analisis keluaran berregister

Terapkan masukan sama ke jalur kombinasional dan register, lalu verifikasi melalui tabel kebenaran serta waktu sampling.

Rangkaian uji dan kondisi pengamatan

Saat sel=0, y menerima a; saat sel=1, y menerima b. sampled_y menyimpan y pada tepi naikTepi naik Saat clock berubah 0 ke 1, berbeda dari tingkat yang mencakup seluruh interval CLK=1. Selengkapnya. Walaupun masukan berubah, sampled_y bertahan hingga tepi naik berikutnya.

Sebelum memulai

Siapkan proyek Desktop Digital Design Studio dan izin eksekusi yang diperlukan. Simpan setiap contoh dalam folder tersendiri sebagai rtl/top.sv.

Mulai dengan a dan b berbeda. Periksa y=a saat sel=0 dan y=b saat sel=1, lalu bandingkan setiap baris berkas masukan.

Ubah jalur pilihan secara langsung

y = sel ? b : a

Sumber SystemVerilog

SystemVerilog
module top (
    input logic clk,
    input logic a,
    input logic b,
    input logic sel,
    output logic y,
    output logic sampled_y
);
    assign y = sel ? b : a;
    // Explicit observation register: y remains purely combinational.
    // The register makes this design eligible for logic-netlist-1 simulation.
    always_ff @(posedge clk) sampled_y <= y;
endmodule

Cara menjalankan

Di New analysis, pilih Two-state single-clock v1. Clock port adalah clk dan periodenya 1000ps. Gunakan pengaturan berikut untuk Preflight, lalu Run RTL simulation dan bandingkan hasilnya.

PengaturanNilai
Nilai awal register, mulai LSB[false]
Reset portKosong
Maximum cycles / time8 / 8000ps

Setiap kolom adalah satu entri berkas masukan berikut. Nilai y kombinasional yang diharapkan adalah 0,0,0,1,1,0,1,1. Gambar memprediksi fungsi menurut urutan masukan, bukan waktu pembaruan sampled_y.

Lihat delapan kombinasi JSON masukan
Lihat data gelombang
Data gelombang: setiap karakter mewakili satu interval; titik mempertahankan keadaan sebelumnya; p adalah satu siklus clock.
SinyalGelombangNilai bus
a0...1...
b0.1.0.1.
sel01010101
y harapan0..1.01.

Stimulus masukan

json
[
  {
    "inputs": {
      "a": [
        false
      ],
      "b": [
        false
      ],
      "sel": [
        false
      ]
    }
  },
  {
    "inputs": {
      "a": [
        false
      ],
      "b": [
        false
      ],
      "sel": [
        true
      ]
    }
  },
  {
    "inputs": {
      "a": [
        false
      ],
      "b": [
        true
      ],
      "sel": [
        false
      ]
    }
  },
  {
    "inputs": {
      "a": [
        false
      ],
      "b": [
        true
      ],
      "sel": [
        true
      ]
    }
  },
  {
    "inputs": {
      "a": [
        true
      ],
      "b": [
        false
      ],
      "sel": [
        false
      ]
    }
  },
  {
    "inputs": {
      "a": [
        true
      ],
      "b": [
        false
      ],
      "sel": [
        true
      ]
    }
  },
  {
    "inputs": {
      "a": [
        true
      ],
      "b": [
        true
      ],
      "sel": [
        false
      ]
    }
  },
  {
    "inputs": {
      "a": [
        true
      ],
      "b": [
        true
      ],
      "sel": [
        true
      ]
    }
  }
]

Membandingkan hasil

8 cycles · y=1 · sampled_y=1. Pada 3000ps, periksa y=1 dan sampled_y=0.

Praktikum memakai RTL 0/1 satu clock tanpa testbench #delay, initial, atau X/Z. Tanda selesai belajar adalah catatan pembelajaran, bukan hasil simulasi nyata.

Tuliskan hasil yang diharapkan dahulu

Sebelum menjalankan simulator, hitung yy untuk urutan masukan: 0,0,0,1,1,0,1,10,0,0,1,1,0,1,1. Ini mencakup delapan kombinasi dan menjadi bukti lebih kuat daripada satu nilai akhir yang benar.

Keluaran registerRegister Rangkaian penyimpan beberapa bit keadaan. Register sinkron mata kuliah ini menangkap masukan yang ditentukan pada tepi clock. Selengkapnya diperbarui pada tepi naik, bukan saat stimulus berubah. Catat terpisah y tepat sebelum tepi dan keluaran tersimpan tepat sesudahnya.

qk+1=sk‾ak+skbkq_{k+1}=\overline{s_k}a_k+s_kb_k

Masukan yang disampel pada tepi kk mendefinisikan keadaan qk+1q_{k+1} setelah tepi; sampled_y mewakili keadaan itu. Walaupun koordinat waktu sama, periksa urutan kejadian penerapan masukan dan pembaruan register.

Tiga pemeriksaan untuk membedakan cacat

  1. Seleksi terbalik: sebelum mengganti menjadi sel ? a : b, prediksi vektor pertama yang gagal. Vektor a=ba=b tidak mendeteksi kesalahan ini.
  2. Titik pengamatan: jelaskan mengapa membandingkan sampled_y, bukan y, langsung dengan jawaban kombinasional membuat rangkaian benar tampak gagal.
  3. Penahanan masukan: ubah hanya masukan yang tidak dipilih dan pastikan yy bertahan. Sebaliknya, yy harus mengikuti perubahan masukan terpilih.

Dalam setiap laporan kesalahan, catat masukan, waktu pengamatan, nilai harapan, dan nilai nyata. Catatan “gelombangnya aneh” tidak membedakan kesalahan seleksi dari latensi satu siklus.

Tugas pengembangan

Dengan data empat bit, ruang masukan kombinasional menjadi 24+4+1=5122^{4+4+1}=512 kasus. Pengujian menyeluruh masih mungkin; mulai dengan 0, maksimum, 0101, 1010, dan pola walking-one untuk cepat menemukan kesalahan posisi bit. Perbarui juga konfigurasi rangkaian dan berkas masukan sesuai lebar baru.

Coba sendiri

Setelah menangkap a=0,b=1,s=0a=0,b=1,s=0 pada tepi naik, ubah hanya ss menjadi 1 sebelum tepi berikutnya. Tentukan yy setelah tundaan logika serta sampled_y sebelum dan sesudah tepi naik berikutnya.

Baca penjelasan

Keluaran kombinasional y=1y=1. sampled_y tetap 0 hingga tepi naik berikutnya, lalu menyimpan 1. Diasumsikan masukan stabil selama waktu yang dibutuhkan sampling.

Lesson files

mux-top.sv ↓mux-inputs.json ↓

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