Altifigence Academy

14 / 24 · Konsep

Rancang register elastis satu slot

Terima masukan ke slot kosong atau gantikan item yang diterima keluar secara bersamaan.

Turunkan ready dari penyimpanan yang tersedia

Penyangga satu slot berisi bit full dan register muatan. Saat kosong, penyangga dapat menerima masukan meskipun penerima tertunda. Saat penuh, penyangga dapat menerima pengganti jika penerima mengambil keluaran yang ada pada tepi tersebut. Jadi input-ready adalah !full OR output-ready, dan output-valid adalah full. Penyangga berregister ini tidak melewatkan data secara kombinasional langsung ke keluaran.

Jika input-ready tinggi, full berikutnya sama dengan input-valid. Tangkap muatan ketika ada masukan; jika tidak, kosongkan slot. Jika input-ready rendah, pertahankan full dan muatan. Mengosongkan full hanya karena keluaran ditransfer akan menghilangkan pengganti yang datang bersamaan. Menangkap berdasarkan input-valid saja akan menimpa slot penuh yang tertunda.

SystemVerilog
module elastic_byte (
  input logic clk, rst,
  input logic in_valid,
  output logic in_ready,
  input logic [7:0] in_data, in_tag,
  output logic out_valid,
  input logic out_ready,
  output logic [7:0] out_data, out_tag
);
  logic full;
  assign in_ready = !full || out_ready;
  assign out_valid = full;
  always_ff @(posedge clk) begin
    if (rst) full <= 1'b0;
    else if (in_ready) begin
      full <= in_valid;
      if (in_valid) begin
        out_data <= in_data;
        out_tag <= in_tag;
      end
    end
  end
endmodule
full lamaout-readyin-validTindakan
001Simpan masukan
101Tolak masukan dan tahan keluaran
111Kirim item lama dan simpan pengganti
110Kirim item lama dan kosongkan slot

Simpan tag0,y9 pada tepi 0. Tunda pada tepi 1. Pada tepi 2, terima tag0 keluar dan simpan tag1,y12; slot tetap penuh. Pada tepi 3, terima tag1 keluar dan kosongkan slot jika tidak ada masukan. Penggantian memungkinkan satu transaksi per siklus.

Menghubungkan banyak tahap menciptakan jalur ready kombinasional ke belakang. Mendaftarkan ready ke register memerlukan penyimpanan tambahan untuk kedatangan sebelum pemberitahuan penundaan berlaku. Periksa secara terpisah batasan jalur kombinasional khusus bus. Berapa pun lebar muatan, simpan data dan setiap bidang pendamping dengan kondisi yang sama, lalu verifikasi keempat kasus pembaruan.

Coba sendiri

Pada tepi dengan full=1, out-ready=1, dan in-valid=1, terima tag7 keluar dan tawarkan tag8. Berapa full berikutnya dan out-tag? Apa kesalahan yang terjadi jika full selalu dikosongkan saat item diterima keluar?

Baca penjelasan

Input-ready tinggi, jadi simpan tag8 dan pertahankan full=1. Out-tag menjadi 8. Selalu mengosongkan full menghilangkan tag8 setelah menerimanya.

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