Altifigence Academy

11 / 63 · Konsep

Dekoder, seleksi one-hot, dan masukan valid

Ubah alamat biner menjadi jalur seleksi individual dan rancang enable, rentang valid, serta invarian seleksi.

Mengubah alamat menjadi jalur seleksi

DekoderDekoder Rangkaian yang mengaktifkan jalur keluaran sesuai kode biner. Dengan enable, seluruh keluaran dapat menjadi 0 saat dinonaktifkan. NN bit mengubah alamat masukan menjadi pilihan satu dari maksimal 2N2^N keluaran. Keluaran did_i dengan enable ee dapat didefinisikan sebagai:

di=e∧(a=i)d_i=e\land(a=i)

Pada dekoder 2-ke-4, d0=ea‾1a‾0d_0=e\overline a_1\overline a_0, d1=ea‾1a0d_1=e\overline a_1a_0, d2=ea1a‾0d_2=ea_1\overline a_0, dan d3=ea1a0d_3=ea_1a_0. Jika enable=0, semua keluaran 0; jika enable=1, tepat satu keluaran 1.

Ubah alamat a1a0 saat enable=1 dan pastikan hanya satu d0–d3 menyala. Ubah enable menjadi 0 dan periksa bahwa seluruh jalur seleksi mati.

Dari alamat ke sinyal seleksi one-hot

d[i] = enable AND (2 × a1 + a0 = i)

Nilai awal bawaan melengkapi fungsi

SystemVerilog
module decoder2 (
  input logic en,
  input logic [1:0] addr,
  output logic [3:0] select
);
  always_comb begin
    select = 4'b0000;
    if (en) begin
      case (addr)
        2'd0: select = 4'b0001;
        2'd1: select = 4'b0010;
        2'd2: select = 4'b0100;
        2'd3: select = 4'b1000;
        default: select = 4'b0000;
      endcase
    end
  end
endmodule

Penugasan bawaan di awal mencakup semua jalur eksekusi agar keluaran lama tidak diingat. Penggunaan always_comb tidak otomatis membuat rangkaian benar jika masih ada cabang yang belum didefinisikan.

Jika jumlah keluaran bukan pangkat dua

Sepuluh perangkat membutuhkan alamat empat bit, tetapi kode 10–15 tidak valid. Tetapkan kebijakan, misalnya seluruh keluaran 0 dan flag kesalahan 1. Kode tidak terpakai tidak otomatis mengizinkan keluaran sembarang.

Selain pemetaan masukan-keluaran, periksa tidak ada beberapa seleksi aktif bersamaan dan disable mematikan semuanya. InvarianInvarian Kondisi yang harus selalu benar pada setiap eksekusi yang diizinkan. Misalnya, okupansi FIFO kedalaman 4 selalu berada antara 0 dan 4. Selengkapnya ini penting untuk write enable memori dan seleksi bus. Dekoder yang membesar juga meningkatkan fan-out alamat dan beban pengawatan, sehingga dekode hierarkis perlu dipertimbangkan.

Coba sendiri

Rancang dekoder alamat dengan sepuluh keluaran. Tentukan lebar alamat, jumlah masukan tidak valid, dan syarat wajib ketika en=0.

Baca penjelasan

Alamat memerlukan ⌈log⁡210⌉=4\lceil\log_2 10\rceil=4 bit, dengan enam kode tidak valid. Jika en=0, seluruh seleksi harus 0 untuk semua alamat. Alamat tidak valid juga dapat ditetapkan menghasilkan semua 0 dengan penanda kesalahan terpisah.

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