14 / 24 · Konsep
Ready/valid dan keadaan tertunda
Tahap keluaran menahan A dengan out_ready=0 sementara masukan B valid. Apa yang harus dilakukan tahap dan penghasil pada tepi berikutnya?
Pelajaran dapat dibaca gratis. Daftar untuk menyimpan progres.
Maju hanya saat transfer
Penghasil mengaktifkan valid saat item saat ini tersedia. Penerima mengaktifkan ready saat dapat menerima item itu. Pada tepi naik ketika keduanya aktif, satu transfer terjadi. Majukan koordinat piksel, keadaan penyangga baris, dan masukan akumulasi terkait hanya pada saat itu. Maju berdasarkan valid saja menghilangkan data selama jeda penerima; maju berdasarkan ready saja menghitung masukan yang tidak ada.
Saat valid tinggi dan ready rendah, pertahankan data dan valid yang sama. Untuk terus menerima masukan ketika keluaran terblokir, sediakan penyimpanan dan turunkan kesiapan dari kapasitas yang tersisa. Contoh RTL adalah tahap satu item: menerima item baru saat kosong atau saat item sekarang dapat keluar.
Contoh urutan transfer
Untuk siklus nol hingga empat, valid=[0,1,1,1,1] dan ready=[0,1,0,1,1] memberi fire=[0,1,0,1,1]. Lima clock menerima tiga piksel. Item yang tertunda pada siklus dua tetap bertahan hingga siklus tiga. Penghitung baris selebar empat belum menyelesaikan baris pertamanya. Menghitung clock alih-alih transfer menggeser setiap koordinat jendela sesudahnya.
Jika tahap menahan A dengan out_valid tinggi dan out_ready rendah, in_ready rendah dan A tetap tersimpan. Ketika out_ready tinggi, tahap dapat mengirim A dan menerima B pada tepi yang sama. Tanpa masukan pengganti, tahap mengosongkan valid keluaran. Dokumentasikan apakah penggantian serentak diizinkan dan latensi yang tersirat.
Reset mengosongkan validitas serta data. Frame baru membutuhkan reset koordinat dan validitas jendela yang ditetapkan. Menerima masukan terakhir berbeda dari menerima keluaran terakhir; mengaktifkan done terlalu dini dapat memungkinkan frame baru menimpa pekerjaan yang belum selesai.
Kode ini merupakan tahap transfer, bukan mesin konvolusi lengkap. Jika alur kerja terpasang Anda mendukung pengeditan dan simulasi SystemVerilog, buat berkas secara manual lalu uji kestabilan saat jeda serta penggantian serentak. Tidak ada eksekusi simulator RTL yang diklaim di sini. Diagram menggambarkan fire; bukan jejak perangkat keras yang direkam.
module sample_stage (
input logic clk, reset,
input logic in_valid,
output logic in_ready,
input logic signed [7:0] in_data,
output logic out_valid,
input logic out_ready,
output logic signed [7:0] out_data
);
assign in_ready = !out_valid || out_ready;
always_ff @(posedge clk) begin
if (reset) begin
out_valid <= 1'b0;
out_data <= '0;
end else if (in_ready) begin
out_valid <= in_valid;
if (in_valid) out_data <= in_data;
end
end
endmoduleLihat data gelombang
| Sinyal | Gelombang | Nilai bus |
|---|---|---|
| clock | p.... | |
| valid | 01111 | |
| ready | 01011 | |
| fire | 01011 |
Coba sendiri
Tahap keluaran menahan A dengan out_ready=0 sementara masukan B valid. Apa yang harus dilakukan tahap dan penghasil pada tepi berikutnya?
Baca penjelasan
Tahap menggerakkan in_ready rendah dan mempertahankan A bersama out_valid. Penghasil mempertahankan B bersama in_valid. Item stabil kemudian dapat ditransfer tepat sekali.