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