11 / 37 · Konsep
Enkoder dan prioritas: memilih satu dari beberapa permintaan
Bedakan asumsi masukan enkoder one-hot dari valid dan hasil seleksi enkoder prioritas.
Pelajaran dapat dibaca gratis. Daftar untuk menyimpan progres.
Arah kebalikan dekoder juga membutuhkan syarat
DekoderDekoder Rangkaian yang mengaktifkan jalur keluaran sesuai kode biner. Dengan enable, seluruh keluaran dapat menjadi 0 saat dinonaktifkan. Selengkapnya mengubah alamat menjadi seleksi one-hotOne-hot Representasi dengan tepat satu bit bernilai 1. Jika semua nol juga diizinkan, istilahnya one-hot-or-zero. Selengkapnya. Enkoder mengubah posisi masukan aktif menjadi alamat. Namun, enkoder one-hot biasa mengasumsikan hanya satu masukan aktif. Jika beberapa masukan 1 bersamaan, diperlukan ketentuan tambahan untuk menentukan posisi yang dilaporkan.
Untuk , tetapkan nomor lebih besar lebih diprioritaskan. Jika semua masukan 0, tetapkan valid=0 dan index=00. index=00 saja tidak membedakan ketiadaan permintaan dari permintaan r0.
| Masukan r3r2r1r0 | valid | index |
|---|---|---|
| 1--- | 1 | 11 |
| 01-- | 1 | 10 |
| 001- | 1 | 01 |
| 0001 | 1 | 00 |
| 0000 | 0 | 00 |
Tanda - berarti hasil sama untuk 0 maupun 1, bukan izin memasukkan X simulator. Pola-pola dari atas didefinisikan saling eksklusif.
1011 menghasilkan index=11. Untuk 0110, r2 didahulukan dari r1 sehingga index=10.
Lihat data gelombang
| Sinyal | Gelombang | Nilai bus |
|---|---|---|
| requests | 234523 | 0000 → 0001 → 0011 → 0110 → 1011 → 1000 |
| valid | 01.... | |
| index | 2.345. | 00 → 01 → 10 → 11 |
RTL harus memperlihatkan prioritas
always_comb begin
valid = |request;
index = 2'b00;
if (request[3]) index = 2'd3;
else if (request[2]) index = 2'd2;
else if (request[1]) index = 2'd1;
endJika hanya request[0] yang 1, index bawaan tetap 0 dan valid=1. Beri nilai bawaan pada semua jalur agar tidak timbul penyimpanan dalam logika kombinasional. Periksa 16 masukan: ketika valid=1, bit terpilih harus 1 dan semua bit dengan nomor lebih tinggi harus 0.
Seleksi dan keadilan adalah masalah berbeda
Jika r3 terus 1, r0 terus tidak dipilih. Rangkaian ini hanya menerapkan prioritas tetap. Penanganan adil membutuhkan arbitrase yang mengingat pilihan sebelumnya, sehingga menjadi rangkaian sekuensial.
Praktikum · Mengamati permintaan, alamat pilihan, dan grant
r3r2r1r0=1011; valid=1; index=11; grant=1000. Permintaan bernomor lebih tinggi diprioritaskan. Saat valid=0, index tidak menunjukkan permintaan yang dipilih.
Pada permintaan awal 1011, r3 terpilih. Matikan r3: r1 terpilih, index=01 dan grant=0010. Selama r1 tetap 1, mengaktifkan atau mematikan r0 tidak boleh mengubah hasil.
Bandingkan “Matikan semua” dengan hanya r0 aktif. Keduanya memberi index=00, tetapi valid dan grant berbeda. Rangkaian berikutnya yang hanya membaca index dapat memproses permintaan yang tidak ada.
grant dengan hanya permintaan terpilih bernilai 1 diperoleh dengan mendekode ulang index bersama valid.
Periksa tiga invarian: grant memiliki maksimal satu bit 1; bit grant yang 1 harus memiliki permintaan nyata; seluruh permintaan bernomor lebih tinggi harus 0. Praktikum tidak mengonsumsi permintaan atau mengingat pilihan sebelumnya. Permintaan rendah yang menunggu saat r3 terus aktif merupakan sifat prioritas tetap.
Coba sendiri
Tentukan index, valid, dan grant untuk 0101 serta 0001. Mengapa r0 tidak boleh diproses pada 0000 hanya karena index=00?
Baca penjelasan
0101 memberi index=10, valid=1, grant=0100. 0001 memberi index=00, valid=1, grant=0001. Pada 0000, index=00 hanya nilai bawaan: valid=0 dan grant=0000 menunjukkan tidak ada permintaan untuk diproses.