10 / 63 · Praktikum
Latihan desain: dari spesifikasi ke rangkaian mayoritas tiga masukan
Ubah spesifikasi bahasa alami menjadi tabel lengkap, lalu hubungkan minimisasi, implementasi, dan pemeriksaan menyeluruh.
Pelajaran dapat dibaca gratis. Daftar untuk menyimpan progres.
Tetapkan kondisi sebelum implementasi
Buat rangkaian dengan y=1 jika sedikitnya dua masukan a,b,c bernilai 1. Masukan dianggap 0/1 stabil, berbobot sama, dan rangkaian tidak menyimpan masukan sebelumnya. “Tepat dua” berbeda dari “sedikitnya dua” pada 111.
| abc | 000 | 001 | 010 | 011 | 100 | 101 | 110 | 111 |
|---|---|---|---|---|---|---|---|---|
| y | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 1 |
Setiap suku berarti dua masukan bernilai 1 bersamaan. Fungsi sama dapat difaktorkan menjadi . Bentuk tercepat bergantung pada sel dan waktu kedatangan masukan.
Mayoritas sama dengan carry full adder
Baca cin sebagai masukan ketiga c. cout sama dengan y, sedangkan sum adalah paritas ganjilParitas Menunjukkan apakah jumlah bit 1 ganjil atau genap. Pemeriksaan paritas mendeteksi jumlah kesalahan bit ganjil, tetapi dapat melewatkan jumlah genap. Selengkapnya. Perbandingan 001 dan 111 mengungkap kesalahan memakai paritas sebagai mayoritas.
a + b + cin = sum + 2 × cout
Buat acuan terpisah dari spesifikasi
Menyalin (a & b) | (a & c) | (b & c) ke model referensi dapat menyalin kesalahan yang sama. Gunakan acuan bilangan bulat yang menghitung “sedikitnya dua bit bernilai 1”.
module voter3(input logic a, b, c, output logic y);
assign y = (a & b) | (a & c) | (b & c);
endmodule
module tb;
timeunit 1ns;
timeprecision 1ps;
logic a, b, c, y;
int ones;
voter3 dut(.*);
initial begin
for (int v = 0; v < 8; v++) begin
{a, b, c} = v[2:0];
#1;
ones = int'(a) + int'(b) + int'(c);
assert (y === (ones >= 2))
else $fatal(1, "voter mismatch at %03b", {a,b,c});
end
$finish;
end
endmoduleSetiap bit diperluas menjadi int untuk menghindari kebingungan lebar aritmetika satu bit. #1 memberi waktu bagi pembaruan logika kombinasional pada pengujian ini; itu bukan bukti bahwa chip nyata beroperasi dalam 1 ns.
Ubah spesifikasi dan cari contoh penyangkal
Tambahan izin e menghasilkan . Kini ada empat masukan, sehingga pemeriksaan menyeluruh membutuhkan 16 kombinasi. Periksa juga invarianInvarian Kondisi yang harus selalu benar pada setiap eksekusi yang diizinkan. Misalnya, okupansi FIFO kedalaman 4 selalu berada antara 0 dan 4. Selengkapnya bahwa saat e=0, seluruh a,b,c harus diabaikan.
Coba sendiri
Tuliskan semua masukan yang mendeteksi implementasi salah y=(a XOR b XOR c). Baris mana yang berbeda jika fungsi diubah menjadi “tepat dua masukan bernilai 1”?
Baca penjelasan
XOR berbeda pada 001, 010, 100, 011, 101, dan 110: tiga pertama keliru menghasilkan 1, tiga terakhir keliru menghasilkan 0. Fungsi “tepat dua” hanya mengubah baris 111 mayoritas menjadi 0.