计算机组成原理课程设计要求编写一个5级流水MIPS的CPU,其他的都可以根据《自己动手写CPU》完成,只有乘法指令要求使用booth原理,去年的时候在网上找了很久没有找到,所以自己仿着div除法模块写了个。

文章目录

  • 一、booth模块分析与设计
  • 二、booth模块接口描述
  • 三、booth模块核心代码

以下是本篇文章正文内容

一、booth模块分析与设计

32位补码(Booth)乘法器设计原理:先将操作数都转化为绝对值,即对有符号运算且操作数最高位为1的操作数做取反加一的操作,这样在计算的时候就可以都按照无符号数来设计,booth乘法过程参照《计算机组成原理》(唐朔飞)教材中定点运算的补码一位乘来做的,设计了65位的p空间模拟计算过程中的中间变量,高32位根据0、1位的值加x或减x。最后求得最终结果时,要根据是否为有符号计算来转换结果。如果为有符号数且两个操作数符号位不同,则结果需要取反加一,求得真实值补码。
根据上述原理,可以将booth模块分成三个状态,即开始、运算、结束,考虑到如果操作数有0的时候可以一步判断出积为0,所以加上一个乘数为0的状态,共四个状态。在乘法计算过程中,流水线会暂停。
booth模块内部状态转换图、booth乘法运算过程流程图如图。

二、booth模块接口描述

实现booth乘法运算。接口描述如下表:

序号 接口名 宽度(bit) 输入/输出 作用
1 clk 1 输入 时钟信号
2 rst 1 输入 复位信号,高电平有效
3 signed_mul_i 32 输入 是否是有符号乘法
4 opdata1_i 32 输入 乘法的操作数1
5 opdata2_i 32 输入 乘法的操作数2
6 start_i 32 输入 是否开始乘法运算
7 ready_o 1 输出 是否已经完成乘法运算
8 result_o 64 输出 乘法运算的结果

三、booth模块核心代码

(没有找到Verilog的代码块…)

         `MulFree:beginif(start_i == `MulStart) beginif(opdata1_i == `ZeroWord||opdata2_i == `ZeroWord) beginstate <= `MulByZero;endelse beginstate <= `MulOn;cnt <= 6'b000000;p = {`ZeroWord,data2_mult[31:0],1'b0};endendelse beginready_o <= `MulResultNotReady;result_o <= {`ZeroWord,`ZeroWord};end              end`MulByZero: beginp = {`ZeroWord,`ZeroWord,1'b0};state <= `MulEnd;end`MulOn:beginif(cnt != 6'b100000) beginif(p[1:0] == 2'b01) beginp = {p[64:33] + data1_mult,p[32:0]};endelse if(p[1:0] == 2'b10) beginp = {p[64:33] + data1_minus,p[32:0]};endelse beginendp = {p[64],p[64:1]};cnt <= cnt + 1;endelse beginif(p[1:0] == 2'b01) beginp[64:33] = (p[64:33] + data1_mult);endelse if(p[1:0] == 2'b10) beginp[64:33] = (p[64:33] + data1_minus);endelse beginendstate <= `MulEnd;cnt <= 6'b000000;                endend`MulEnd:beginresult_o = p[64:1];if((opdata1_i[31] ^ opdata2_i[31] == 1'b1) && signed_mul_i == 1'b1 ) beginresult_o = ~result_o + 1;endready_o <= `MulResultReady;if(start_i == `MulStop) beginstate <= `MulFree;ready_o <= `MulResultNotReady;result_o <= {`ZeroWord,`ZeroWord};        

用Verilog编写booth算法相关推荐

  1. C语言布斯乘法算法,布斯Booth算法带符号位的乘法verilog语言实现booth算法

    Booth算法的推倒表示看不懂,举例说明:算法的计算过程. 求M*Q的值 M=5,Q=6 按二进制分解M和Q :M3M2M1M0×Q3Q2Q1Q0: 0110×0101 (有符号数用补码表示,最高位表 ...

  2. Verilog 编写规范

    在学习Python时,作者有一句话对我影响很大.作者希望我们在学习编写程序的时候注意一些业内约定的规范.在内行人眼中,你的编写格式,就已经暴露了你的程度.学习verilog也是一样的道理,一段好的ve ...

  3. 数据结构第5章例题 若矩阵Am×n中存在某个元素aij满足:aij是第i行中的最小值且是第j列中的最大值,则称该元素为矩阵A的一个鞍点。试编写一个算法,找出A中的所有鞍点。

    [例5.1] 若矩阵Am×n中存在某个元素aij满足:aij是第i行中的最小值且是第j列中的最大值,则称该元素为矩阵A的一个鞍点.试编写一个算法,找出A中的所有鞍点. 算法如下: void saddl ...

  4. booth算法实现乘法器

    booth算法充分的利用到了补码的重要性,使得我们在利用补码进行计算时减少了很多时序.下面的表格是我们假设2 作为乘数所进行的分析.接下来,我将用代码向大家阐述. 1.开始的时候在乘数2的'负一位'加 ...

  5. (107)FPGA面试题-Verilog编写200ns异步/同步低有效复位激励

    1.1 FPGA面试题-Verilog编写200ns异步/同步低有效复位激励 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试题-Verilog编写200ns ...

  6. (106)FPGA面试题-Verilog编写50MHz时钟激励

    1.1 FPGA面试题-Verilog编写50MHz时钟激励 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试题-Verilog编写50MHz时钟激励: 5) ...

  7. 数据结构例9.编写一个算法,将带头结点的单向链表 拆分成一个奇数链表和一个偶数链表,并分别输出

    /* 编写一个算法,将带头结点的单向链表 拆分成一个奇数链表和一个偶数链表,并分别输出 */ # include <iostream> # include <stdlib.h> ...

  8. 加减法、原码一位乘法、Booth算法、恢复余数法、加减交替法符号位及小结

    在学习计算机组成原理的计算方法时,或为步骤疑惑,或为题目难倒,本文主要介绍思路以及对常用类型小结 个人总结,仅供参考,能力有限,难免出错,欢迎大家讨论,书籍参考唐朔飞版<计算机组成原理> ...

  9. 一、verilog编写三分频电路

    1.目标:使用verilog编写三分频电路,要求占空比大小为50%. 2.方法:分别使用上升沿和下降沿计数cnt_p以及cnt_n,并且计数从0到N-1(N为分频的次数,此时为3):分别对clk_p以 ...

最新文章

  1. C++ 常见崩溃问题分析
  2. oracle模拟试题
  3. axureR9 显示与隐藏 - 踩坑篇
  4. mysql事务会不会上锁_MySQL事务以及加锁机制
  5. 微信公众平台体验(二)(单词翻译)
  6. apache ab测试与centos系统优化
  7. 大学c语言第三章作业,c语言程序设计一章部分和第三章习题答案.doc
  8. KBQA-Bert学习记录-构建BERT-CRF模型
  9. 数据仓库中的慢变化维度和快变化维度
  10. MMDetection CenterNet 源码解析
  11. 计算机的发明是现代科学的奇迹之一翻译,04统考阅读新题型50篇翻译.pdf
  12. OrCAD Capture原理图中批量修改网络名
  13. mongodb之快速入门
  14. 指纹支付 java lang6_支付宝;超6成人使用指纹、刷脸支付,网友;喜欢用密码!...
  15. idea怎样创建jsp文件
  16. 考研英语不熟悉的词义(List16-List20)
  17. 如何利用pyecharts绘制酷炫的桑基图?
  18. Spring Security OAuth2:整合jwt
  19. Python 通过URL打开图片
  20. 海报的5种处理方式,让你的照片更吸睛

热门文章

  1. 【Linux学习笔记】一、Linux 时间问题
  2. 如何删除 字符串中的 emoji 表情符号
  3. 纯Javascript的输入框掩码
  4. 信号完整性分析2——时域与频域
  5. 【sketchup 2021】草图大师中二维图像交互(jpeg等格式图像的导入、图像的输出、图像导入变得模糊处理方法)与三维图像交互(其他软件导出的三维导入到草图大师、草图大师导出为三维模型】
  6. pythonnet调用python tsne算法
  7. 神经网络的5个应用场景,神经网络算法应用领域
  8. ps基础学习:用形状工具制作交通标识
  9. 京东一面,面试官问我如何用 Nginx 禁止国外 IP 访问网站,我直接凉凉!
  10. 算法入门——小学生算数