变量x与固定系数h二补数乘积算法及其Verilog实现(signed 2’scomplement)

一、二补数乘法算法

  • 我们设计有符号乘法器时会遇到一个问题,负数二进制数不能直接移位相乘再相加,这样做的结果是错误的,官方的做法是先把负数转换成二补数,接着再按一定规则进行计算,本质还是移位相加,但多了一些细节要注意。
1.1 算法概述
  • 第一步:将是负数的被乘数和乘数按取反再加一原则转换成二补数,如下-3与-2 -> 101与110
  • 第二步:按乘法规则等式计算,注意这一步要将输出位宽扩展至被乘数或者乘数其中最高位宽的2倍,按乘法规则每一位移位相乘计算过程中补充位按原最高位补齐但是超过2倍位宽的要截断。
  • 第三步:乘数y最高位乘以x时,前面符号是负号。
  • 第四步:将移位数据相加求和(包括一行减数据),输出的依然是二补数,既是乘法器输出。
1.2 二补数乘法算法具体流程-辅助理解

二、二补数乘法算法Verilog实现并验证

2.1 Verilog设计

** 上节算法的Verilog实现代码如下所示:**

`timescale 1ns/1ps
module Mult_2scomplement
#(  parameter N_bit_x = 11,               //xin widthparameter hin = 10'b01_1111_1111)     //hin 2'scomplenemt
(input [N_bit_x-1:0]            xin,   output reg [2*N_bit_x-1:0]     Mult_2scomplement_out
);reg [2*N_bit_x-1:0] x;reg [2*N_bit_x-1:0] h0,h1,h2,h3,h4,h5,h6,h7,h8,h9;reg [2*N_bit_x-1:0] out0,out1,out2,out3,out4,out5,out6,out7,out8,out9;//stretch twofold width xin to x always@(*) beginx <= {{{N_bit_x}{xin[N_bit_x-1]}},xin};end//shifteralways@(*)  begin h0  <= {{2*N_bit_x}{hin[0]}}&x;h1  <= {{2*N_bit_x}{hin[1]}}&x;h2  <= {{2*N_bit_x}{hin[2]}}&x;h3  <= {{2*N_bit_x}{hin[3]}}&x;h4  <= {{2*N_bit_x}{hin[4]}}&x;h5  <= {{2*N_bit_x}{hin[5]}}&x;h6  <= {{2*N_bit_x}{hin[6]}}&x;h7  <= {{2*N_bit_x}{hin[7]}}&x;h8  <= {{2*N_bit_x}{hin[8]}}&x;h9  <= {{2*N_bit_x}{hin[9]}}&x;out0  <= {h0[2*N_bit_x-1:0]};out1  <= {h1[2*N_bit_x-2:0],1'b0};out2  <= {h2[2*N_bit_x-3:0],2'b0};out3  <= {h3[2*N_bit_x-4:0],3'b0};out4  <= {h4[2*N_bit_x-5:0],4'b0};out5  <= {h5[2*N_bit_x-6:0],5'b0};out6  <= {h6[2*N_bit_x-7:0],6'b0};out7  <= {h7[2*N_bit_x-8:0],7'b0};out8  <= {h8[2*N_bit_x-9:0],8'b0};out9  <= {h9[2*N_bit_x-10:0],9'b0};//shifter sum(out0-8) and sub(out9)Mult_2scomplement_out <= (((out0 + out1 + out2) + (out3 + out4 + out5) + (out6 + out7+ out8)) - out9);   end
endmodule
2.2 门级仿真验证

1) xin乘hin(+1)通过:

2)xin乘hin(+255)通过

3)xin乘hin(+511)通过

4)xin乘hin(-1)通过

5)xin乘hin(-255)通过

6)xin乘hin(-511)通过

总结:此二补数(2’scomplement)乘法器满足功能需求,验证通过,需要的同学可自取

二补数(2’scomplement)乘法算法及其Verilog实现 - 固定系数h相关推荐

  1. [转]常用数字处理算法的Verilog实现

      2.6.3 常用数字处理算法的Verilog实现 1.加法器的Verilog实现 串行加法器 组合逻辑的加法器可以利用真值表,通过与门和非门简单地实现.假设 和 表示两个加数, 表示和, 表示来自 ...

  2. 乘法最快的算法计算机,人类史上最快乘法算法诞生

    人类用四千年碰到乘法运算天花板:史上最快乘法算法诞生 中科院物理所 2019-04-16 12:21:55 图片:MENGXIN LI/QUANTA MAGAZINE 四千年前,古巴比伦人最先发明了乘 ...

  3. 用verilog实现检测1的个数_[转]常用数字处理算法的Verilog实现

    2.6.3 常用数字处理算法的Verilog实现 1.加法器的Verilog实现 串行加法器 组合逻辑的加法器可以利用真值表,通过与门和非门简单地实现.假设 和 表示两个加数, 表示和, 表示来自低位 ...

  4. DeepMind再登Nature封面!推出AlphaTensor:强化学习发现矩阵乘法算法

    点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 转载自:机器之心 DeepMind 的 Alpha 系列 AI 智能体家族又多了一个成员--AlphaTen ...

  5. 二维码里德所罗门算法

    这是一个相当古老的项目了. 前序 之前一直想写一个有关二维码生成器的教程,由于各种各样的原因,当然主要原因是懒,一直没有下手.最近感觉还是要做点什么,不然有种要烂尾的冲动. 我之所以要写这个教程,主要 ...

  6. c 语言乘法代码,C++实现大数乘法算法代码

    C++实现大数乘法算法代码 //大数乘法算法 #include #include #include using namespace std; int main() { string num1,num2 ...

  7. 数字图像处理领域的二十四个典型算法及vc实现、第一章

    数字图像处理领域的二十四个典型算法及vc实现.第一章 作者:July   二零一一年二月二十六日. 参考:百度百科.维基百科.vc数字图像处理. --------------------------- ...

  8. ML之LoR:利用LoR二分类之非线性决策算法案例应用之划分正负样本

    ML之LoR:利用LoR二分类之非线性决策算法案例应用之划分正负样本 目录 输出结果 实现代码 输出结果 1.对数据集进行特征映射 2.正则化 → 正则化 → 过度正则化 实现代码 import nu ...

  9. ML之LoR:LoR之二分类之线性决策算法实现根据两课成绩分数~预测期末通过率(合格还是不合格)

    ML之LoR:LoR之二分类之线性决策算法实现根据两课成绩分数~预测期末通过率(合格还是不合格) 目录 输出结果 代码设计 输出结果 LoR之二分类算法实现预测期末考试成绩合格还是不合格 LoR回归函 ...

最新文章

  1. 自动禁止ssh的root登陆
  2. 地图处理(dfs算法)
  3. js如何获取html图片,JS/JQuery获取网页或文章或某DIV所有图片
  4. 资深Android开发带你入门Framework,再不刷题就晚了!
  5. leetCode题解之Reshape the Matrix
  6. BNU10791:DOTA选人
  7. 为什么开发人员要使用Linux
  8. python安装api_Python API文档
  9. Spring Cloud连载(2)搭建开发环境
  10. java 日志框架 详解_springboot日志详解
  11. 站在巨人的肩膀上谈-计算机视觉走向未来
  12. 宜搭自建费控应用如何与金蝶云星空对接打通
  13. IE11的F12功能无法正常使用
  14. 学习SQLServer: 设置QUOTED_IDENTIFIER
  15. Python中的立方根
  16. Pycharm中的红色小闪电含义
  17. 为什么大型高难度工程的首选支模架是盘扣架?
  18. 计算机网络网速,科普 | 宽带的分类及网速计算
  19. 递归查询,父类获取对应子类集合
  20. 树莓派Pico直流电机接口技术及PWM电机调速控制MicroPython编程

热门文章

  1. 空间变形网络——STN
  2. QT 软键盘实现
  3. 【评测】SF9/SF21昆虫细胞培养基
  4. 09组团队项目-Beta冲刺-1/5
  5. Simple Calculator 1.0(有声计算器)
  6. 结合NAACL2022对计算语言学趋势的思考与分析
  7. 必学PHP类库/常用PHP类库大全
  8. Android Studio 使用友盟进行多渠道打包
  9. cnpm 新版本替换,及randomUUID is not a function问题解决
  10. 经典共识PoW的原理及实现