Altifigence Academy

52 / 63 · Konsep

Barrel shifter dan tahap MUX

Implementasikan geser variabel melalui tahap MUX 1,2,4,8, berbagi arah, serta tangani tanda dan jumlah geser berlebih.

Prasyarat: MUXMultiplekser Rangkaian kombinasional yang menghubungkan satu dari beberapa masukan ke keluaran menurut seleksi. Hubungan bit seleksi dan nomor masukan harus ditetapkan. Selengkapnya, geser logis/aritmetika, dan tundaan kombinasionalTundaan propagasi Waktu sejak masukan berubah hingga keluaran stabil pada nilai benar. Kesetaraan logika berbeda dari karakteristik waktu. Selengkapnya.

Mengubah geser variabel menjadi pilihan pengawatan tetap

RegisterRegister Rangkaian penyimpan beberapa bit keadaan. Register sinkron mata kuliah ini menangkap masukan yang ditentukan pada tepi clock. Selengkapnya yang bergeser satu bit memakai clock sebanyak jumlah perpindahan. Barrel shifter menerima jumlah geser dan menghasilkan hasil melalui satu jalur kombinasional. Bit tidak bergerak berulang sepanjang waktu; jalur sambungan dipilih untuk menghubungkan tiap keluaran ke bit masukan yang diperlukan.

Untuk 16 bit dan geser 0–15, s=s0+2s1+4s2+8s3s=s_0+2s_1+4s_2+8s_3. Susun empat tahap seri dengan geser 1,2,4,8. Setiap MUX memilih antara lewat langsung dan geser tetap.

X0=X,Xk+1={shift⁡(Xk,2k),sk=1Xk,sk=0X_0=X,\qquad X_{k+1}= \begin{cases} \operatorname{shift}(X_k,2^k),&s_k=1\\ X_k,&s_k=0 \end{cases}

11=1011 memilih tahap 1,2,8 dan melewati tahap 4. Untuk X=0xD2A5X=0xD2A5 digeser logis ke kanan, nilai berturut-turut 0x6952,0x1A54,0x1A54,0x001A. Ini empat tahap kombinasional, bukan empat clock.

Empat kelompok berisi 16 MUX memberikan 64 pilihan 2:1 satu bit sebelum optimisasi pengawatan dan konstanta. Secara umum, untuk W=2KW=2^K, struktur seleksi sebanding Wlog⁡2WW\log_2W dan kedalaman log⁡2W\log_2W. MUX W:1 terpisah pun dapat disintesis menjadi pohon; jumlah baris RTL tidak menentukan luas atau frekuensi.

Gambar memerinci empat tahap yang dikendalikan 1011 untuk menggeser 0xD2A5 ke kanan sebelas posisi. Ini bukan eksekusi empat siklus.

Uraikan pergeseran 11 posisi menjadi 1+2+8
  1. Tahap 1 bit · s0=1: D2A5 → 6952
  2. Tahap 2 bit · s1=1: 6952 → 1A54
  3. Tahap 4 bit · s2=0: 1A54 diteruskan tanpa perubahan
  4. Tahap 8 bit · s3=1: 1A54 → 001A

Memakai geser kanan untuk geser kiri

Balik urutan bit, geser logis kanan s posisi, lalu balik lagi: hasilnya geser kiri. Empat tahap dapat dipakai bersama, tetapi MUX arah pada masukan dan keluaran menambah biaya di atas 64. Pembalikan urutan bit tetap hanyalah pengawatan.

Geser kanan aritmetika mengisi posisi tinggi dengan bit tanda masukan asli. Geser kiri tetap mengisi nol walaupun mode aritmetika aktif. Dalam komplemen duaKomplemen dua Representasi bilangan bulat bertanda dengan pola bit berlebar tetap. Rentang n bit adalah −2^(n−1) hingga 2^(n−1)−1. Selengkapnya, geser kiri aritmetika dan logis memindahkan bit sama serta tidak otomatis memeriksa overflow signed.

Rentang jumlah geser adalah bagian kontrak. shamt lima bit menerima 0–31. Untuk ≥16, hasil logis dan geser kiri nol; geser kanan aritmetika menghasilkan 16 salinan tanda. Memakai hanya empat bit rendah menganggap geser 16 sebagai geser 0.

SystemVerilog
module barrel16 (
  input  wire [15:0] x,
  input  wire [4:0] shamt,
  input  wire left,
  input  wire arithmetic,
  output wire [15:0] y
);
  wire fill;
  wire [15:0] stage [0:4];
  assign fill = (!left) && arithmetic && x[15];

  for (genvar i = 0; i < 16; i++) begin : direction
    assign stage[0][i] = left ? x[15-i] : x[i];
    assign y[i] = shamt[4] ? fill :
                  (left ? stage[4][15-i] : stage[4][i]);
  end

  for (genvar k = 0; k < 4; k++) begin : shift_stage
    localparam int D = 1 << k;
    assign stage[k+1] = shamt[k]
      ? {{D{fill}}, stage[k][15:D]}
      : stage[k];
  end
endmodule

k pada generate adalah konstanta elaborasi, bukan loop yang dijalankan empat kali saat runtime. Panjang part-select dan pengulangan tetap, membentuk empat pengawatan tetap serta MUX. fill sama di setiap tahap sehingga tanda tetap konsisten saat beberapa tahap dipilih.

RTL menuliskan pengisian tanda secara eksplisit sehingga aritmetika bekerja pada vektor unsignedUnsigned Interpretasi pola bit sebagai bilangan bulat nonnegatif. Rentang n bit adalah 0 hingga 2^n−1 dan dapat berbeda dari interpretasi signed pola yang sama. Selengkapnya juga. Jika memakai operator, diperlukan >>> dan operand signed. Simbol saja atau deklarasi signed variabel sebelum part-select tidak cukup: konkatenasi dan slice dapat kehilangan interpretasi signed. Konversikan dahulu ke nilai signed dengan lebar yang diinginkan. Dukungan operator dijelaskan dalam dokumentasi ekspresi Verilog AMD.

Pisahkan tundaan dan kehilangan informasi

Empat tahap ditambah seleksi arah/rentang serta tundaan kabel. Jika timing memerlukan register perantara, tundakan juga jumlah geser tersisa dan arah selama jumlah siklus sama. LatensiLatensi Waktu atau jumlah siklus antara penerimaan masukan dan keluaran terkait. Berbeda dari throughput, jumlah yang diproses per satuan waktu. Selengkapnya serta antarmuka lalu berbeda dari modul kombinasional murni.

Pergeseran tidak memulihkan bit terbuang. Pada geser kiri unsigned, bit tinggi terbuang bernilai 1 menunjukkan overflow; signed memerlukan pemeriksaan tanda awal dan bit terbuang. Modul ini tidak menghasilkan flag tersebut. Geser kanan aritmetika membulatkan x/2sx/2^s ke bawah: −3 digeser satu bit menjadi −2, berbeda dari −1 pada pembagian bulat menuju nol.

Coba sendiri

Untuk x=0x8123 16 bit, hitung (1) kanan logis 3, (2) kanan aritmetika 3, (3) kiri logis 16, (4) kanan aritmetika 20. Sebutkan tahap kasus 2 dan kesalahan kasus 3 jika shamt[4] diabaikan.

Baca penjelasan

(1) 0x1024, (2) 0xF024, (3) 0x0000, (4) 0xFFFF. Karena 3=1+2, tahap 1 dan 2 dipilih. Pada aritmetika, 0xC091→0xF024 dengan pengisian tanda awal 1. Untuk 16, shamt=10000: mengabaikan bit tinggi melewati semua tahap dan menghasilkan 0x8123 tanpa perubahan. Jadi ≥16 harus dideteksi. Pada geser kiri, bit rendah baru tetap 0 meskipun mode aritmetika aktif.

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