Altifigence Academy

9 / 24 · Konsep

Simpan transaksi lengkap pada batas pipeline

Pisahkan aritmetika penjumlahan dan penskalaan sambil menjaga keselarasan valid, tag, dan lebar bit.

Batas register membawa makna serta bit

Pisahkan f(a,b)=3(a+b) menjadi dua tahap. Tahap pertama menyimpan jumlah sembilan bit dari dua operand delapan bit tak bertanda. Tahap kedua membentuk nilai berskala sebelas bit dan menyimpan delapan bit rendahnya. Hasil lebar maksimum adalah 1530. Penyempitan jumlah antara kebetulan mempertahankan nilai akhir modulo-256 untuk ekspresi bilangan bulat ini, tetapi menghilangkan informasi yang diperlukan untuk pelaporan overflow atau perbandingan berikutnya. Tetapkan lebar hasil antara secara eksplisit.

Setiap tahap menyimpan valid dan tag bersama data. Valid nol menandakan gelembung, yaitu slot tanpa transaksi. Bit data lama dapat tetap ada dalam tahap kosong, tetapi tidak boleh dihitung sebagai transaksi. Tag membutuhkan tundaan register yang sama dengan nilainya. Dua register data dengan hanya satu register tag mengaitkan identitas transaksi B dengan hasil transaksi A.

Inti ini mengasumsikan tidak ada penundaan dan port selalu siap. Perluas s1 dan tetapkan ukuran konstanta sebelum perkalian. Tahap kedua membaca s1 dan t1 lama; masukan baru tidak dapat melewati kedua register pada satu tepi.

SystemVerilog
logic [8:0] s1;
logic [7:0] s2, t1, t2;
logic v1, v2;
logic [10:0] scaled;
assign scaled = {2'b00, s1} * 11'd3;
always_ff @(posedge clk) begin
  if (rst) begin
    v1 <= 1'b0;
    v2 <= 1'b0;
  end else begin
    v1 <= in_valid;
    v2 <= v1;
    if (in_valid) begin
      s1 <= {1'b0, a} + {1'b0, b};
      t1 <= in_tag;
    end
    if (v1) begin
      s2 <= scaled[7:0];
      t2 <= t1;
    end
  end
end

Terima A=(1,2) pada tepi 0: sesudahnya s1=3. Terima B=(250,10) pada tepi 1: s1 menjadi 260 sementara s2 menyimpan hasil A, yaitu 9. A valid setelah tepi 1 dan dapat ditransfer pada tepi 2. B kemudian menghasilkan 780 modulo 256, yaitu 12.

Pindahkan juga gelembung melalui register valid. Mempertahankan v1 lama=1 saat tidak ada masukan dapat menggandakan transaksi. Reset mengosongkan status valid agar data usang tidak menjadi hasil baru. Pada setiap batas, daftarkan seluruh bidang pendamping: operasi, tag, pengecualian, alamat, atau penanda akhir paket. Periksa bahwa bidang-bidang ini tetap membentuk satu transaksi sepanjang pipeline.

Coba sendiri

A=(1,2,tag=10) dan B=(250,10,tag=11) diterima berturut-turut. Jika t2<=in_tag digunakan, tag mana yang menyertai hasil A? Berikan koneksi yang benar.

Baca penjelasan

Pada tepi 1, s2 menghitung transaksi A lama sementara in_tag saat ini bernilai 11, sehingga hasil 9 mendapat tag 11. Gunakan t2<=t1 untuk menangkap tag tahap pertama A yang lama, yaitu 10.

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