首页 > 其他分享 >计算机体系结构-Booth乘法

计算机体系结构-Booth乘法

时间:2024-05-17 13:54:37浏览次数:22  
标签:product 2X WIDTH Booth 体系结构 DATA 2i 乘法

原理解释

电路实现

以Radix-4 Booth编码为例,Booth乘法的核心是部分积的生成,需要生成\(N/2\)个部分积,每个部分积与\([X]_补\)有关,存在\(-X,-2X,+X,+2X,0\) 这五种可能,其中减去\(X_{补}\)的操作可以认为是按位取反的\(X_{补}\)在末尾+1。为了硬件实现方便,可以将末位1操作提取出来,假设\(X_{补}\)的二进制格式为\(x_6x_5x_4x_3x_2x_1x_0\),假设部分积\(P=p_7p_6p_5p_4p_3p_2p_1p_0+c\),那么有:
image
当部分积微2X时,可以认为X输入左移一位,此时\(p_i=x_{i-1}\)相等。如果部分积的选择为\(-X/-2X\),则此处对\(x_i\)或\(x_{i-1}\)取反,并设置最后的末位进位\(c=1\)。
由此可以得到每一位\(p_i\)的逻辑表达式为:
image
Booth结果选择逻辑如下所示:
image

部分积生成过程中需要利用\(y_{i-1},y_i\)和\(y_{i+1}\)这三个信号来生成需要用到的\(S_{-X},S_{-2X},S_{X},S_{2x}\)的选择信号,通过卡诺图化简可以得到:
image
选择信号生成部分的逻辑图如下所示:
image
通过组合上述两个部分,可以形成每个Booth部分积的逻辑图,调用该逻辑通过移位加法策略可以实现两位Booth补码乘的结构。
乘法操作开始时,乘数右侧需要补1位的0,结果需要预置为全0.在每个时钟周期的计算结束后,乘数算术右移两位,被乘数左移两位,直到乘数全为0,乘法结束。
对于N位补码乘法,操作可以在N/2个时钟周期完成。被乘数、结果、加法器和Booth核心的宽度都为2N位。

image
image

代码实现


/*
* 基4的booth编码的单周期有符号乘法器
*/

module booth_multiplier_base4 #(
    parameter DATA_WIDTH = 8       // 数据位宽应该为2的指数
)

(  
    input [DATA_WIDTH-1 : 0] a,  
    input [DATA_WIDTH-1 : 0] b,  
    output reg [2*DATA_WIDTH-1 : 0] product,
    input clk
);  
  
    integer i;  
    reg [2:0] booth_bits [DATA_WIDTH/2-1:0];  
    reg [DATA_WIDTH:0] b_extended;
    reg [2*DATA_WIDTH:0] partial_product [DATA_WIDTH/2-1:0];  
    reg [2*DATA_WIDTH-1:0] a_pos, a_neg, a_extend; 
  
    always @(posedge clk) begin  
        b_extended = {b, 1'b0}; // 这里我补了个0,防止索引超出界限
        a_extend = {{DATA_WIDTH{a[DATA_WIDTH-1]}}, a};    // 符号位扩展 ,之前忘记扩展找了好久
        a_pos = a_extend;
        a_neg = ~a_extend + 1'b1;  // 补码运算
        product = 0;

        for (i = 0; i < DATA_WIDTH/2; i = i + 1) begin  
            booth_bits[i] = {b_extended[2*i+2], b_extended[2*i+1], b_extended[2*i]};  

            case (booth_bits[i])
            /*
            $\sum_{i=0}^{\frac{n}{2}-1} (-2 \cdot b_{2i+2} + b_{2i+1} + b_{2i})$  // LaTex
            { b(2i+2), b(2i+1), b(2i) } :=
                000:    0;
                001:    1;
                010:    1;
                011:    2;
                100:    -2;
                101:    -1;
                110:    -1;
                111:    0;
            */  
                3'b000, 3'b111: partial_product[i] = 9'd0;  
                3'b001, 3'b010: partial_product[i] = a_pos;
                3'b011:         partial_product[i] = a_pos << 1;
                3'b100:         partial_product[i] = a_neg << 1;
                3'b101, 3'b110: partial_product[i] = a_neg; 
            endcase  
        end

        for (i = 0; i < (DATA_WIDTH/2-1); i = i + 1) begin
            product = product + (partial_product[i] << (2*i)); // Shift and accumulate
        end
            
          

    end  
  
endmodule

标签:product,2X,WIDTH,Booth,体系结构,DATA,2i,乘法
From: https://www.cnblogs.com/XL2COWARD/p/18197659

相关文章

  • 《Linux内核完全注释》学习笔记:2.1 Linux内核模式和体系结构
    2.1Linux内核模式和体系结构操作系统主要由4部分组成:硬件、操作系统内核、操作系统服务用户应用程序图2-1操作系统组成部分用户应用程序:指那些字处理程序、互联网浏览器程序或用户自行编制的各种应用程序;操作系统服务程序:指向用户提供的服务,被看作是操作系统部分功能......
  • 「高精度乘法+高精度加法」P10425 [蓝桥杯 2024 省 B] R 格式 题解
    解题思路题意分析:将浮点数乘以\(2^n\);四舍五入到最接近的整数。根据题意将\(d\times2^n\)分解为\(d\times2\times2\times2\times2……\),因为\(d\)长度小于等于\(1024\),所以可以使用高精度乘法的算法来实现一个小数乘以一个大于\(0\)的整数时,小数点位数本身不会......
  • P3811 【模板】模意义下的乘法逆元
    题目:P3811【模板】模意义下的乘法逆元【模板】模意义下的乘法逆元题目背景这是一道模板题题目描述给定$n,p$求$1\simn$中所有整数在模$p$意义下的乘法逆元。这里$a$模$p$的乘法逆元定义为$ax\equiv1\pmodp$的解。输入格式一行两个正整数$n,p$。输出格式......
  • 学习笔记:矩阵乘法
    矩阵乘法引入如果\(C=AB\),则\(c_{ij}=\sum\limits_{k=1}^{n}a_{ik}\cdotb_{kj}\),即\(A\)的第\(i\)行与\(B\)的第\(j\)列的点积。假设有\(n\)个地点,\(i\)到\(j\)做飞机有\(a_{ij}\)种选择,坐火车有\(b_{ij}\)种选择。求从\(i\)先做飞机再坐火车到......
  • 计算机网络体系结构
    一、计算机网络概念1、计算机网络定义将分散的、具有独立功能的计算机系统,通过通信设备与线路连接起来,由功能完善的软件实现资源共享的系统。与多终端系统的区别:传统多终端系统是由中央处理器、多个联机终端及一个多用户操作系统组成。终端本身不具备独立的数据处理能力计算......
  • [国家集训队] 矩阵乘法 题解
    发现实际上就是二维静态区间最大值,可以用整体二分维护。时间复杂度\(O((q+n^2)\log\max(a_{i,j})\logn^2)\)。#include<bits/stdc++.h>#definelllonglongusingnamespacestd;constintW=310005;constintQ=6e4+5;intn,q,w,ans[Q];intc[505][505],m;voidadd(i......
  • for循环打印九九乘法表
    1、九九乘法表例;1*1=1  2*1=2  2*2=4  3*1=3  3*2=6  3*3=9  4*1=4  4*2=8  4*3=12  4*4=16  5*1=5  5*2=10  5*3=15  5*4=20  5*5=25  6*1=6  6*2=12  6*3=18  6*4=24  6*5=30  6*6=36  7......
  • 躲过了ysyx没躲过学校计算机体系结构课程设计risc-v处理器
    至少学校里的简化版可能不会让我觉得太难,呜呜呜一个用于记录的log-2024/03/23DigitalLabPro2023Vivado的使用-DigitalLabPro2023(ustc.edu.cn)快说谢谢中科大-2024/04/21DigitalLab2023simulationhttps://hitsz-cslab.gitee.io/cpu/江苏大学的,非常好的实验......
  • 多项式乘法(FFT)学习笔记
    Reference:@自为风月马前卒亦@attack的博客这里为了帮助我自己理解,先手推(抄)一遍这位dalao给出的快速傅里叶逆变换的证明。\((y_0,y_1,\dots,y_{n-1})\)为多项式\((a_0,a_1,\dots,a_{n-1})\)在\(x\)取\((\omega^0_n,\omega^1_n,\dots,\omega^{n-1}_n)\)时......
  • [题解]P5431 【模板】模意义下的乘法逆元 2
    可恶,卡常好难受。P5431【模板】模意义下的乘法逆元2将分数通分,第\(i\)个分数是\(\frac{k^i*fac\diva[i]}{fac}\),\(fac\)表示所有元素的积。我们可以用\(lr,rl\)记录\(a\)的前缀后缀积,第\(i\)个分数就是\(\frac{k^i*lr[i-1]*rl[i+1]}{lr[n]}\)。这样分母都是\(lr[n]\),分子就......