乘法器verilog
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相关推荐
- Wallace树形乘法器(Verilog),自动生成器(C/C++版)
学过<数字逻辑>课程的同学,对于Wallace树形乘法器应该不陌生(手拙,灵魂画师--建议读者参考网上的图片). 总的来说,就是一个无符号数乘法器.特点是速度快,使用逻辑电路完成乘法,但是 ...
- 8位移位相加乘法器-Verilog
Verilog 前言 一.移位相加乘法器如何实现? 二.使用步骤 前言 用verilog编写8位乘法器,采用移位相加的办法,最后输出16位结果 写的时候去掉了注释,现在自己也看不懂了,哈哈哈 一.移位 ...
- 横向进位阵列乘法器与 流水线横向进位阵列乘法器 Verilog
文章目录 横向进位阵列乘法器 流水线横向进位阵列乘法器 TB 总结 本文的知识来源于华中科技大学,谭志虎教授的计算机硬件系统设计,向他致敬 https://www.icourse163.org/cou ...
- 乘法器专题研究(内含所有类型乘法器)
乘法器的verilog HDL设计汇总 1.移位相加乘法器的设计: 其大致原理如下: 从被乘数的最低位开始判断,若为1,则乘数左移i(i=0,1...(WIDTH-1))位后,与上一次和相加:若为0, ...
- 乘法器的实现(阵列、Booth、Wallace)
文章目录 1 乘法器 2 部分积的产生 2.1 波兹(Booth)编码 2.2 改进的波兹编码 3 部分积的累加 3.1 阵列乘法器 3.2 进位保留乘法器 3.3 Wallace 树形乘法器 4 V ...
- fpga中例化乘法器_FPGA:乘法器(一)
乘法器(一) 乘法运算在数字信号处理中也是比较常用,如常系数FIR中需要输入数据与FIR系数进行乘法运算.在FPGA实现乘法时可选择采用逻辑实现,也可使用硬资源,如Xilinx FPGA中的DSP48 ...
- 基于dsp乘法器设计c语言,DSP in FPGA : 乘法器(一)
专题三:乘法器(一) 乘法运算在数字信号处理中也是比较常用,如常系数FIR中需要输入数据与FIR系数进行乘法运算.在FPGA实现乘法时可选择采用逻辑实现,也可使用硬资源,如Xilinx FPGA中的D ...
- FPGA学习之路—应用程序—原码二位乘法器及Verilog代码分析
FPGA学习之路--原码二位乘法器及Verilog代码分析 原理 原码乘法可以分为原码一位乘和原码二位乘,两者在实现规则上大同小异.原码一位乘每次判断乘数的最低位,对被乘数和部分积进行相应操作.而原码 ...
- Verilog编程之乘法器的实现
知识储备 首先来回顾一下乘法是如何在计算机中实现的. 假设现在有两个32位带符号定点整数x和y,我们现在要让x和y相乘,然后把乘积存放在z中,大家知道,两个32位数相乘,结果不会超过64位,因此z的长 ...
最新文章
- 2019学习Python的10个原因
- 苹果新功能惹众怒,4000 多家组织和个人签署公开信,敦促苹果放弃“儿童安全”功能...
- word python 域 操作_python实现在windows下操作word的方法
- ue4 截图_UE4中创建赛博朋克中国城市
- 聊聊JVM(一)相对全面的GC总结
- 第一季7:海思制作的rootfs包含哪些内容?
- 听着三只松鼠上市的钟声,罗永浩流下了悔恨的泪水
- 最不适合做数据分析的6种性格,看看你占了几个?
- 深度学习2.0-3.tensorflow的基础操作之索引与切片
- bzoj1088: [SCOI2005]扫雷Mine
- 使用Duilib做的程序封装成DLL的显示加载与卸载问题
- 北斗卫星广播星历计算卫星位置
- matlab 矩阵左右乘除
- gitbook踩坑指南-无法转pdf、epub等;pdf调字体大小
- 使用OneDNS完美实现Chorme自动同步书签和插件
- 切披萨n块需要几刀原理c语言,LeetCode 1444. 切披萨的方案数(DP)
- 【Windows Server 2019】DNS服务器的配置与管理——DNS正向解析
- 互动直播之WebRTC服务器Kurento实战
- 如何培养对编程开发的兴趣
- label标签中for的使用