1.传统的乘法器

两个数相乘,无论是同号相乘还是异号相乘,其实最后结果的数值与符号无关,只取两个数的绝对值相乘,最后结果的符号为被乘数与乘数的符号异或即可。

然后乘法可以看成累加操作累加次数为乘数的数值大小累加值为被乘数。每累加一次,乘数减一,直到乘数减到0,则相乘结束。

该乘法器的大致操作如下:
(一)在初始化之际,取乘数和被乘数的正负关系,然后取被乘数和乘数的正值。
(二)每一次累加操作,递减一次乘数。直到乘数的值为零,表示操作结束。
(三)输出结果根据正负关系取得。

实现代码如下:

module multiplier_module(input CLK,input RSTn,input Start_Sig,input [7:0]Multiplicand,input [7:0]Multiplier,output Done_Sig,output [15:0]Product
);/*************************/reg [1:0]i;
reg [7:0]Mcand;
reg [7:0]Mer;
reg [15:0]Temp;
reg isNeg;
reg isDone;always @ ( posedge CLK or negedge RSTn )
if( !RSTn )
begini <= 2'd0;Mcand <= 8'd0; // Register for MultiplicandMer <= 8'd0; // Register ofr MultipierTemp <= 8'd0; // Sum of pratocal productisNeg <= 1'b0;isDone <= 1'b0;
end
else if( Start_Sig )case( i )0:beginisNeg <= Multiplicand[7] ^ Multiplier[7];Mcand <= Multiplicand[7] ? ( ~Multiplicand + 1'b1 ) : Multiplicand;Mer <= Multiplier[7] ? ( ~Multiplier + 1'b1 ) : Multiplier;Temp <= 16'd0;i <= i + 1'b1;end1: // Multiplingif( Mer == 0 ) i <= i + 1'b1;else begin Temp <= Temp + Mcand; Mer <= Mer - 1'b1; end2:begin isDone <= 1'b1; i <= i + 1'b1; end3:begin isDone <= 1'b0; i <= 2'd0; endendcase/*************************/assign Done_Sig = isDone;
assign Product = isNeg ? ( ~Temp + 1'b1 ) : Temp;/*************************/
endmodule

但是这种方法的缺点也是显而易见的,当乘数很大时(绝对值很大时),需要累加的次数也随之增大

booth乘法器

这篇文章写的挺好的booth乘法器
但这篇并没有说到booth算法的原理

下面这篇文章说到了
booth算法原理

当相乘乘数中有连续个1时,可以减少部分积的数量

基于查找表的乘法器

就是提前吧结果存在存储器中,乘法的结果以查表的方式取得。是典型的用空间换时间的方法。

乘法器verilog相关推荐

  1. Wallace树形乘法器(Verilog),自动生成器(C/C++版)

    学过<数字逻辑>课程的同学,对于Wallace树形乘法器应该不陌生(手拙,灵魂画师--建议读者参考网上的图片). 总的来说,就是一个无符号数乘法器.特点是速度快,使用逻辑电路完成乘法,但是 ...

  2. 8位移位相加乘法器-Verilog

    Verilog 前言 一.移位相加乘法器如何实现? 二.使用步骤 前言 用verilog编写8位乘法器,采用移位相加的办法,最后输出16位结果 写的时候去掉了注释,现在自己也看不懂了,哈哈哈 一.移位 ...

  3. 横向进位阵列乘法器与 流水线横向进位阵列乘法器 Verilog

    文章目录 横向进位阵列乘法器 流水线横向进位阵列乘法器 TB 总结 本文的知识来源于华中科技大学,谭志虎教授的计算机硬件系统设计,向他致敬 https://www.icourse163.org/cou ...

  4. 乘法器专题研究(内含所有类型乘法器)

    乘法器的verilog HDL设计汇总 1.移位相加乘法器的设计: 其大致原理如下: 从被乘数的最低位开始判断,若为1,则乘数左移i(i=0,1...(WIDTH-1))位后,与上一次和相加:若为0, ...

  5. 乘法器的实现(阵列、Booth、Wallace)

    文章目录 1 乘法器 2 部分积的产生 2.1 波兹(Booth)编码 2.2 改进的波兹编码 3 部分积的累加 3.1 阵列乘法器 3.2 进位保留乘法器 3.3 Wallace 树形乘法器 4 V ...

  6. fpga中例化乘法器_FPGA:乘法器(一)

    乘法器(一) 乘法运算在数字信号处理中也是比较常用,如常系数FIR中需要输入数据与FIR系数进行乘法运算.在FPGA实现乘法时可选择采用逻辑实现,也可使用硬资源,如Xilinx FPGA中的DSP48 ...

  7. 基于dsp乘法器设计c语言,DSP in FPGA : 乘法器(一)

    专题三:乘法器(一) 乘法运算在数字信号处理中也是比较常用,如常系数FIR中需要输入数据与FIR系数进行乘法运算.在FPGA实现乘法时可选择采用逻辑实现,也可使用硬资源,如Xilinx FPGA中的D ...

  8. FPGA学习之路—应用程序—原码二位乘法器及Verilog代码分析

    FPGA学习之路--原码二位乘法器及Verilog代码分析 原理 原码乘法可以分为原码一位乘和原码二位乘,两者在实现规则上大同小异.原码一位乘每次判断乘数的最低位,对被乘数和部分积进行相应操作.而原码 ...

  9. Verilog编程之乘法器的实现

    知识储备 首先来回顾一下乘法是如何在计算机中实现的. 假设现在有两个32位带符号定点整数x和y,我们现在要让x和y相乘,然后把乘积存放在z中,大家知道,两个32位数相乘,结果不会超过64位,因此z的长 ...

最新文章

  1. 别人以为搞AI的高大上,我却觉得自己是个骗子
  2. 用python画出简单笑脸画法_【Python】怎么用matplotlib画出漂亮的分析图表
  3. boost::multiprecision模块hash相关的测试程序
  4. 使用SAP云平台 + JNDI访问Internet Service
  5. hdu 1251 统计难题(求前缀出现了多少次)
  6. jquery ajax json转换出错Invalid JSON
  7. [转]关于Linux下时间片分配给进程还是线程的问题
  8. docker下gitlab安装配置使用
  9. 批处理(bat)choice命令详解
  10. kuwo.php源码,酷我音乐官方flash播放器调用代码
  11. 飞信linux下载文件,在Linux上安装飞信
  12. iOS3DTouch功能实现
  13. 移植u-boot到S3C2440之从内存启动
  14. 计算机系统安全启动,安装Win11提示该电脑必须支持安全启动的解决方法
  15. 【课程表小程序源码】增加今日课表功能|开源代码
  16. 同态基本定理及其应用
  17. requests.exceptions.ChunkedEncodingError: (‘Connection broken: IncompleteRead(0 bytes read)‘, Incomp
  18. flash与ram的经典理解
  19. 佳木斯计算机编程学校,佳木斯公立数控培训,靠谱电气编程培训价格
  20. echarts初步使用

热门文章

  1. 【适合小白】搭建区块链网络
  2. 2020.10.31文献2、3阅读:何川老师2篇文章《隧道穿越断层破碎带+地震》
  3. linux桌面版拨号连接,linux中的pppoe拨号上网
  4. Xcode插件: 编码效率神器 FlyCoding
  5. 在OneDrive奄奄一息之机迎来了45G容量的InfiniCLOUD
  6. REXROTH力士乐减压阀DRE6X-10/175MG24-8NZ4M
  7. 51单片机-6-矩阵键盘
  8. 第85场双周赛+307场周赛
  9. 电磁场的概念及常见电磁场产生设备
  10. Teamcenter字符集编码与数据库安装不同,修改步骤