9 / 24 · Konsep
Simpan transaksi lengkap pada batas pipeline
Pisahkan aritmetika penjumlahan dan penskalaan sambil menjaga keselarasan valid, tag, dan lebar bit.
Pelajaran dapat dibaca gratis. Daftar untuk menyimpan progres.
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.
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
endTerima 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.