14 / 24 · Konsep
Rancang register elastis satu slot
Terima masukan ke slot kosong atau gantikan item yang diterima keluar secara bersamaan.
Pelajaran dapat dibaca gratis. Daftar untuk menyimpan progres.
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.
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 lama | out-ready | in-valid | Tindakan |
|---|---|---|---|
| 0 | 0 | 1 | Simpan masukan |
| 1 | 0 | 1 | Tolak masukan dan tahan keluaran |
| 1 | 1 | 1 | Kirim item lama dan simpan pengganti |
| 1 | 1 | 0 | Kirim 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.