用Verilog编写booth算法
计算机组成原理课程设计要求编写一个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算法相关推荐
- C语言布斯乘法算法,布斯Booth算法带符号位的乘法verilog语言实现booth算法
Booth算法的推倒表示看不懂,举例说明:算法的计算过程. 求M*Q的值 M=5,Q=6 按二进制分解M和Q :M3M2M1M0×Q3Q2Q1Q0: 0110×0101 (有符号数用补码表示,最高位表 ...
- Verilog 编写规范
在学习Python时,作者有一句话对我影响很大.作者希望我们在学习编写程序的时候注意一些业内约定的规范.在内行人眼中,你的编写格式,就已经暴露了你的程度.学习verilog也是一样的道理,一段好的ve ...
- 数据结构第5章例题 若矩阵Am×n中存在某个元素aij满足:aij是第i行中的最小值且是第j列中的最大值,则称该元素为矩阵A的一个鞍点。试编写一个算法,找出A中的所有鞍点。
[例5.1] 若矩阵Am×n中存在某个元素aij满足:aij是第i行中的最小值且是第j列中的最大值,则称该元素为矩阵A的一个鞍点.试编写一个算法,找出A中的所有鞍点. 算法如下: void saddl ...
- booth算法实现乘法器
booth算法充分的利用到了补码的重要性,使得我们在利用补码进行计算时减少了很多时序.下面的表格是我们假设2 作为乘数所进行的分析.接下来,我将用代码向大家阐述. 1.开始的时候在乘数2的'负一位'加 ...
- (107)FPGA面试题-Verilog编写200ns异步/同步低有效复位激励
1.1 FPGA面试题-Verilog编写200ns异步/同步低有效复位激励 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试题-Verilog编写200ns ...
- (106)FPGA面试题-Verilog编写50MHz时钟激励
1.1 FPGA面试题-Verilog编写50MHz时钟激励 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试题-Verilog编写50MHz时钟激励: 5) ...
- 数据结构例9.编写一个算法,将带头结点的单向链表 拆分成一个奇数链表和一个偶数链表,并分别输出
/* 编写一个算法,将带头结点的单向链表 拆分成一个奇数链表和一个偶数链表,并分别输出 */ # include <iostream> # include <stdlib.h> ...
- 加减法、原码一位乘法、Booth算法、恢复余数法、加减交替法符号位及小结
在学习计算机组成原理的计算方法时,或为步骤疑惑,或为题目难倒,本文主要介绍思路以及对常用类型小结 个人总结,仅供参考,能力有限,难免出错,欢迎大家讨论,书籍参考唐朔飞版<计算机组成原理> ...
- 一、verilog编写三分频电路
1.目标:使用verilog编写三分频电路,要求占空比大小为50%. 2.方法:分别使用上升沿和下降沿计数cnt_p以及cnt_n,并且计数从0到N-1(N为分频的次数,此时为3):分别对clk_p以 ...
最新文章
- C++ 常见崩溃问题分析
- oracle模拟试题
- axureR9 显示与隐藏 - 踩坑篇
- mysql事务会不会上锁_MySQL事务以及加锁机制
- 微信公众平台体验(二)(单词翻译)
- apache ab测试与centos系统优化
- 大学c语言第三章作业,c语言程序设计一章部分和第三章习题答案.doc
- KBQA-Bert学习记录-构建BERT-CRF模型
- 数据仓库中的慢变化维度和快变化维度
- MMDetection CenterNet 源码解析
- 计算机的发明是现代科学的奇迹之一翻译,04统考阅读新题型50篇翻译.pdf
- OrCAD Capture原理图中批量修改网络名
- mongodb之快速入门
- 指纹支付 java lang6_支付宝;超6成人使用指纹、刷脸支付,网友;喜欢用密码!...
- idea怎样创建jsp文件
- 考研英语不熟悉的词义(List16-List20)
- 如何利用pyecharts绘制酷炫的桑基图?
- Spring Security OAuth2:整合jwt
- Python 通过URL打开图片
- 海报的5种处理方式,让你的照片更吸睛
热门文章
- 【Linux学习笔记】一、Linux 时间问题
- 如何删除 字符串中的 emoji 表情符号
- 纯Javascript的输入框掩码
- 信号完整性分析2——时域与频域
- 【sketchup 2021】草图大师中二维图像交互(jpeg等格式图像的导入、图像的输出、图像导入变得模糊处理方法)与三维图像交互(其他软件导出的三维导入到草图大师、草图大师导出为三维模型】
- pythonnet调用python tsne算法
- 神经网络的5个应用场景,神经网络算法应用领域
- ps基础学习:用形状工具制作交通标识
- 京东一面,面试官问我如何用 Nginx 禁止国外 IP 访问网站,我直接凉凉!
- 算法入门——小学生算数