>> Tecnologia elettronica >  >> Audio personale >> Registratori vocali digitali

Implementing a Modified Booth Encoder in Verilog

Implementazione Verilog dell'algoritmo di Modified Booth

L'algoritmo Modified Booth (Radix-4 di Booth) riduce il numero di prodotti parziali della metà rispetto alla moltiplicazione semplice, esaminando coppie di bit del moltiplicatore (con sovrapposizione) per determinare se aggiungere, sottrarre o spostare il moltiplicando. Di seguito un modulo Verilog pulito e sintetizzabile per un moltiplicatore 4x4, facilmente parametrizzabile per operandi più ampi.

Modulo Verilog completo

module booth_multiplier_4x4 ( input logic [3:0] multiplicand, input logic [3:0] multiplier, output logic [7:0] product ); // Prodotti parziali (Radix-4 genera N/2 = 2 prodotti parziali per moltiplicatore 4-bit) logic signed [7:0] pp [0:1]; logic [2:0] booth_sel [0:1]; // {multiplier[2i+1], multiplier[2i], multiplier[2i-1]} // Codifica Booth (combinazionale) always_comb begin // Gruppo 0: bit multiplier[1:0] + implicito 0 (multiplier[-1]=0) booth_sel[0] = {multiplier[1], multiplier[0], 1'b0}; // Gruppo 1: bit multiplier[3:2] + multiplier[1] booth_sel[1] = {multiplier[3], multiplier[2], multiplier[1]}; for (int i = 0; i < 2; i++) begin unique case (booth_sel[i]) 3'b000, 3'b111: pp[i] = 8'sd0; // 0 * M 3'b001, 3'b010: pp[i] = {{4{multiplicand[3]}}, multiplicand}; // +1 * M 3'b011: pp[i] = {{3{multiplicand[3]}}, multiplicand, 1'b0}; // +2 * M (shift left 1) 3'b100: pp[i] = -({{3{multiplicand[3]}}, multiplicand, 1'b0}); // -2 * M 3'b101, 3'b110: pp[i] = -({{4{multiplicand[3]}}, multiplicand}); // -1 * M default: pp[i] = 8'sd0; endcase // Sposta il prodotto parziale secondo la posizione del gruppo (2 bit per gruppo) pp[i] = pp[i] << (2*i); end end // Sommatore finale (combinazionale) assign product = pp[0] + pp[1]; endmodule 

Punti chiave del design

  1. Aritmetica con segno: La dichiarazione `logic signed` e l'estensione del segno (`{{4{multiplicand[3]}}, ...}`) gestiscono correttamente la moltiplicazione in complemento a due per operandi positivi e negativi.
  2. Codifica Radix-4: I gruppi `booth_sel` si sovrappongono di un bit (il LSB del gruppo precedente). L'implicito `multiplier[-1] = 0` gestisce il primo gruppo.
  3. Decodifica azione: L'istruzione case implementa la tabella della verità standard Radix-4 di Booth: 0, ±1×M, ±2×M. L'operazione ±2×M è un semplice shift a sinistra di 1.
  4. Spostamento prodotti parziali: Ogni prodotto parziale viene shiftato a sinistra di `2*i` bit per allinearsi al suo peso.
  5. Parametrizzazione: Per un moltiplicatore N-bit (N pari), genera `N/2` prodotti parziali usando un ciclo `generate`.

Snippet di testbench

module tb; logic [3:0] a, b; logic [7:0] p; booth_multiplier_4x4 uut (.multiplicand(a), .multiplier(b), .product(p)); initial begin a = 4'd5; b = 4'd3; #10; // 15 a = -4'sd5; b = 4'd3; #10; // -15 (complemento a due) a = -4'sd6; b = -4'sd7; #10; // 42 $finish; end endmodule 

Scalata a larghezze maggiori

Per RTL di produzione, avvolgi la codifica e la generazione di prodotti parziali in un ciclo `generate` parametrizzato da `WIDTH`. Usa un albero di sommatore carry-save (CSA) (Wallace o Dadda) seguito da un sommatore finale veloce (CLA/Kogge-Stone) per moltiplicatori wide ad alte prestazioni, piuttosto che un semplice somma a riporto come mostrato qui per chiarezza.

  1. Come Risolvere i Problemi del Registratore Vocale Digitale RCA VR5220
  2. Come si producono i vinili: dal nastro master al solco
  3. Si Può Copiare e Incollare nella Vita Reale? Non Digitalmente—Ma Ecco l'Equivalente
  4. Dove Trovare Registrazioni di "Three Rifle Salute" e "Taps"
  5. Segnali di Presenza di Microspie Registratrici Nascoste
  6. Come Creare una Forma d'Onda dall'Audio: Python, Librerie e Metodi di Visualizzazione