Altifigence Academy

31 / 37 · Konsep

Pipeline perkalian-penjumlahan dan penyelarasan data

Bagi operasi dengan register dan selaraskan data, valid, serta operand tambahan per transaksi.

Dari persamaan ke dua tahap

Prasyarat: aritmetika signed, penugasan nonblockingNonblocking Penugasan <= pada RTL sekuensial: sisi kanan dievaluasi lalu pembaruan dijadwalkan, sehingga register pada tepi sama menghitung dari keadaan lama. Selengkapnya, setupSetup Waktu minimum data harus stabil sebelum tepi tangkap. Jika dilanggar, hasil tersimpan tidak dijamin. Selengkapnya, dan valid.

Setiap transaksi memuat a,b signed delapan bit dan c signed 16 bit, dengan hasil berikut. Ini multiply-add independen per transaksi, bukan akumulator.

y=a×b+cy=a\times b+c

Produk tepat delapan bit memerlukan 16 bit. Menambahkan c dalam 16 bit lalu memperluas tidak memulihkan bit tinggi yang hilang: perluas tanda kedua operand ke 17 bit sebelum menjumlahkan.

Tahap pertama menyimpan produk bersama c; tahap kedua menjumlahkan nilai transaksi sama. Tanpa menunda c, produk transaksi lama tercampur c sekarang.

SystemVerilog
module multiply_add_pipeline (
    input  logic               clk, rst, in_valid,
    input  logic signed [7:0]  a, b,
    input  logic signed [15:0] c,
    output logic               out_valid,
    output logic signed [16:0] y
);
    logic v1;
    logic signed [15:0] p1, c1;
    logic signed [16:0] p_ext, c_ext;
    assign p_ext = {p1[15], p1};
    assign c_ext = {c1[15], c1};

    always_ff @(posedge clk) begin
        if (rst) begin
            v1        <= 1'b0;
            out_valid <= 1'b0;
        end else begin
            v1        <= in_valid;
            out_valid <= v1;
            if (in_valid) begin
                p1 <= a * b;
                c1 <= c;
            end
            if (v1) y <= p_ext + c_ext;
        end
    end
endmodule

Antarmuka menerima satu masukan per tepi dan mengasumsikan penerima selalu siap. Jangan bandingkan y jika out_valid=0. ResetReset Kontrol yang mengembalikan keadaan ke nilai awal tertentu. Sifat sinkron/asinkron dan prioritas terhadap kontrol lain harus ditetapkan. Selengkapnya valid membedakan data tidak terpakai meskipun registerRegister Rangkaian penyimpan beberapa bit keadaan. Register sinkron mata kuliah ini menangkap masukan yang ditentukan pada tepi clock. Selengkapnya data tidak di-reset.

Bedakan dua tahap dan waktu pengamatan

Tabel mencatat keadaan tepat setelah setiap tepi; A dan B transaksi berbeda.

TepiMasukan diterimaTahap 1Register keluaran
E0AProduk dan c milik AInvalid
E1BProduk dan c milik BHasil A valid
E2Tidak adaInvalidHasil B valid
E3Tidak adaInvalidInvalid

A siap setelah E1; rangkaian berikutnya dengan clock sama menangkap pada E2. Jadi penerimaan E0 hingga konsumsi E2 berjarak dua periode. Jangan mencampur perubahan register keluaran dengan penerimaan hilir.

Setiap kolom mengamati tepi naikTepi naik Saat clock berubah 0 ke 1, berbeda dari tingkat yang mencakup seluruh interval CLK=1. Selengkapnya, masukan sebelum dan keadaan after sesudah; ini bukan tundaan fisikTundaan propagasi Waktu sejak masukan berubah hingga keluaran stabil pada nilai benar. Kesetaraan logika berbeda dari karakteristik waktu. Selengkapnya. A=(2,3,10),B=(4,5,100). Produk dan c disimpan bersama, lalu nilai lama dijumlahkan pada tepi berikutnya. Tanda hubung menandai slot invalid.

Hasil kali dan c harus berasal dari transaksi yang sama
Lihat data gelombang
Data gelombang: setiap karakter mewakili satu interval; titik mempertahankan keadaan sebelumnya; p adalah satu siklus clock.
SinyalGelombangNilai bus
edge2345E0 → E1 → E2 → E3
accepted234.A → B → -
product1 sesudah234.6 → 20 → -
c1 sesudah234.10 → 100 → -
y sesudah2345- → 16 → 120 → -
out_valid sesudah01.0

Seberapa cepat setelah dibagi?

Ambil model asumsi: perkalian 3.2ns, penjumlahan 1.1ns, overhead register 0.2ns.

Tone≥3.2+1.1+0.2=4.5 nsT_{\mathrm{one}}\ge3.2+1.1+0.2=4.5\ \mathrm{ns}
Tpipe≥max⁡(3.2,1.1)+0.2=3.4 nsT_{\mathrm{pipe}}\ge\max(3.2,1.1)+0.2=3.4\ \mathrm{ns}

Batas frekuensi teoritis berubah dari sekitar 222MHz ke 294MHz. Dua tahap tidak otomatis menggandakan throughput: tahap terlambat dan biaya register menentukan periode. Hasil nyata bergantung sintesis, penempatan, serta kendala.

Verifikasi per transaksi

Saat masukan diterima, masukkan acuan bilangan bulat a×b+c ke queue. Saat keluaran valid diterima, ambil harapan depan dan bandingkan. Sisipkan in_valid=0 untuk memeriksa bubble berjalan bersama data. Mengubah c secara tajam antartransaksi efektif mengungkap penundaan yang hilang.

Bacaan lanjutan: MIT OpenCourseWare — Performance Measures

Coba sendiri

Terapkan A=(3,−4,10) lalu B=(2,5,100). Tentukan urutan hasil benar dan kesalahan A jika c tidak ditunda.

Baca penjelasan

Hasil benar A: −12+10=−2, lalu B: 10+100=110. Jika produk A berada di tahap kedua dan c sekarang milik B=100, A keliru menghasilkan 88. valid yang ditunda benar tidak memperbaiki operand tidak selaras.

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