31 / 37 · Konsep
Pipeline perkalian-penjumlahan dan penyelarasan data
Bagi operasi dengan register dan selaraskan data, valid, serta operand tambahan per transaksi.
Pelajaran dapat dibaca gratis. Daftar untuk menyimpan progres.
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.
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.
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
endmoduleAntarmuka 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.
| Tepi | Masukan diterima | Tahap 1 | Register keluaran |
|---|---|---|---|
| E0 | A | Produk dan c milik A | Invalid |
| E1 | B | Produk dan c milik B | Hasil A valid |
| E2 | Tidak ada | Invalid | Hasil B valid |
| E3 | Tidak ada | Invalid | Invalid |
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.
Lihat data gelombang
| Sinyal | Gelombang | Nilai bus |
|---|---|---|
| edge | 2345 | E0 → E1 → E2 → E3 |
| accepted | 234. | A → B → - |
| product1 sesudah | 234. | 6 → 20 → - |
| c1 sesudah | 234. | 10 → 100 → - |
| y sesudah | 2345 | - → 16 → 120 → - |
| out_valid sesudah | 01.0 |
Seberapa cepat setelah dibagi?
Ambil model asumsi: perkalian 3.2ns, penjumlahan 1.1ns, overhead register 0.2ns.
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.