Altifigence Academy

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?

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.

SystemVerilog
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
endmodule
Transfer yang diterima selama jeda
Lihat data gelombang
Data gelombang: setiap karakter mewakili satu interval; titik mempertahankan keadaan sebelumnya; p adalah satu siklus clock.
SinyalGelombangNilai bus
clockp....
valid01111
ready01011
fire01011

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.

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