Altifigence Academy

11 / 37 · Konsep

Enkoder dan prioritas: memilih satu dari beberapa permintaan

Bedakan asumsi masukan enkoder one-hot dari valid dan hasil seleksi enkoder prioritas.

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 r3r2r1r0r_3r_2r_1r_0, 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 r3r2r1r0validindex
1---111
01--110
001-101
0001100
0000000

Tanda - berarti hasil sama untuk 0 maupun 1, bukan izin memasukkan X simulator. Pola-pola dari atas didefinisikan saling eksklusif.

valid=r3+r2+r1+r0,index1=r3+r2,index0=r3+r2‾r1valid=r_3+r_2+r_1+r_0,\quad index_1=r_3+r_2,\quad index_0=r_3+\overline{r_2}r_1

1011 menghasilkan index=11. Untuk 0110, r2 didahulukan dari r1 sehingga index=10.

Tiap kolom adalah kombinasi permintaan independen
Lihat data gelombang
Data gelombang: setiap karakter mewakili satu interval; titik mempertahankan keadaan sebelumnya; p adalah satu siklus clock.
SinyalGelombangNilai bus
requests2345230000 → 0001 → 0011 → 0110 → 1011 → 1000
valid01....
index2.345.00 → 01 → 10 → 11

RTL harus memperlihatkan prioritas

SystemVerilog
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;
end

Jika 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

Pilih satu permintaan dari beberapa yang datang bersamaan

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.

granti=valid∧(index=i)grant_i=valid\land(index=i)

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.

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