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

verilog实现乘法器 verilog实现乘法器以下介绍两种实现乘法器的方法:串行乘法器和流水线乘法器。 1)串行乘法器 两个N位二进制数x、y的乘积用简单的方法计算就是利用移位操作来实现。其框图如下: 其状态图如下: 其实现的代码如下: modulemulti_CX(clk, x, y, result); 02 03 in... 阅读详情

乘法器的verilog HDL设计汇总

1、移位相加乘法器的设计:

 其大致原理如下:

从被乘数的最低位开始判断,若为1,则乘数左移i(i=0,1...(WIDTH-1))位后,与上一次和相加;若为0,则乘数左移i位后,以0相加。直至被乘数的最高位。

 

优点:占用的资源较少,在低速信号处理中有广泛的应用 。

缺点:串行乘法器的速度比较慢,一个结果输出需要花费多个时钟周期,在高位宽乘法运算中尤为明显。 

Verilog HDL代码如下:

 1. //移位相加乘法器的verilog HDL代码  

2. module multi_Mov_Add(a,b,outcome);  

3.     parameter size = 8;  

4.     input [size - 1 : 0] a, b; //a,b为乘法器的两个输入  

5.     output [2*size - 1 : 0] outcome;  

6.     reg [2*size - 1 : 0] outcome;  

7.     integer i;  

8.    

9.     always @ (a or b)  

10.     begin  

11.         outcome = 4'b0;  

12.         for(i = 0; i < size; i = i + 1) //用于移位  

13.         begin  

14.             if(b[i] == 1) //如果被乘数为1,则移位相加  

15.             begin  

16.                 outcome = outcome + (a<<i);  

17.             end  

18.         end  

19.     end  

20. endmodule  

2、串行乘法器设计:

其状态图如下:

               

  

设计verilog HDL 代码如下:

 

1. module multi_CX(clk, x, y, result);    

2.         

3.     input clk;  //时钟信号   

4.     input [7:0] x, y;  //x为乘数,y为被乘数  

5.     output [15:0] result;  //运算结果  

6.     

7.     reg [15:0] result;    

8.     

9.     parameter s0 = 0, s1 = 1, s2 = 2;  //状态  

10.     reg [2:0] count = 0;    

11.     reg [1:0] state = 0;  //状态变量赋初值  

12.     reg [15:0] P, T;  //P为运算结果的中间变量,T为乘数的中间变量  

13.     reg [7:0] y_reg;  //y_reg为被乘数的中间变量  

14.     

15.     always @(posedge clk) begin  //时钟上升沿到达时,运行下面的语句  

16.         case (state)  //状态S0为初始状态,从初始状态开始  

17.             s0: begin    

18.                 count <= 0;  //计算变量初值  

19.                 P <= 0;  //结果变量清零  

20.                 y_reg <= y;  //被乘数赋初值  

21.                 T <= { {8{1'b0}}, x};  //乘数赋初值  

22.                 state <= s1;  //进入下一个状态  

23.             end    

24.             s1: begin   //S1状态  

25.                 if(count == 3'b111) //计数为3'b111,即7时,进入结束状态   

26.                     state <= s2;    

27.                 else begin  //未进入结束状态  

28.                     if(y_reg[0] == 1'b1)  //被乘数末尾位为1时  

29.                         P <= P + T;   //中间结果加一次乘数  

30.                     else  //否则中间结果不变  

31.                         P <= P;    

32.                     y_reg <= y_reg >> 1;  //被乘数右移一位,倒数第二位移到末尾  

33.                     T <= T << 1;  //乘加一次后,被乘数左移一位,这里从运算过程中可以看出  

34.                     count <= count + 1;  //count是为了统计运行一次乘法需要多少个时钟周期  

35.                     state <= s1;    

36.                 end    

37.             end    

38.             s2: begin    

39.                 result <= P;  //结束状态时,中间结果赋值给最终结果  

40.                 state <= s0;  //为下一次运算准备  

41.             end    

42.             default: ;    

43.         endcase    

44.     end    

45.     

46. endmodule    

 

缺点:计算一次乘法需要8个周期,因此可以看出串行乘法器速度比较慢,时延大。

优点:该乘法器所占用的资源是所有类型乘法器中最少的,在低速的信号处理中有广泛的使用。

 

3、流水线乘法器

 乘法器采用多级流水线的形式,将相邻的两个部分乘积结果再加到最终的输出乘积上,即排成一个二叉树形式的结构。(死磕下面的代码)

其verilog HDL设计如下:

1. module multi_4bits_pipelining(mul_a, mul_b, clk, rst_n, mul_out);  

2.      

3.     input [3:0] mul_a, mul_b; //乘数与被乘数  

4.     input clk; //时钟信号  

5.     input rst_n; //复位信号  

6.     output [7:0] mul_out; //结果变量  

7.     reg [7:0] mul_out;  

8.     reg [7:0] stored0; //stored0,...stored3用来存逐位相乘的中间结果  

9.     reg [7:0] stored1;  

10.     reg [7:0] stored2;  

11.     reg [7:0] stored3;  

12.     reg [7:0] add01; //中间结果变量  

13.     reg [7:0] add23;  

14.     always @(posedge clk or negedge rst_n) begin  

15.         if(!rst_n) begin //复位信号有效  

16.             mul_out <= 0;  

17.             stored0 <= 0;  

18.             stored1 <= 0;  

19.             stored2 <= 0;  

20.             stored3 <= 0;  

21.             add01 <= 0;  

22.             add23 <= 0;  

23.         end  

24.         else begin  

25.             stored0 <= mul_b[0] ? {4'b0, mul_a} : 8'b0; //如果被乘数倒数第一位不为零,则与乘数相乘结果为{4'b0,mul_a}  

26.             stored1 <= mul_b[1] ? {3'b0, mul_a, 1'b0} : 8'b0; //如果被乘数倒数第二位不为零,则与乘数相乘结果为{3'b0,mul_a,1'b0}  

27.             stored2 <= mul_b[2] ? {2'b0, mul_a, 2'b0} : 8'b0; //同上  

Verilog 乘法器 无 阅读详情

相关推荐

基于Booth算法的64位浮点乘法器的实现

基于Booth算法,实现64位浮点数乘法器

高阶近似的博客 4301

Wallace树专题研究

Wallace树乘法器专题研究 绪论:在乘法器的设计中采用树形乘法器,可以减少关键路径和所需的加法器单元数目,Wallace树乘法器就是其中的一种。下面以一个4*4位乘法器为例介绍Wallace树乘法器及其Verilog HDL实现。 原理:Wallace树乘法器的运算原理如下: 从数据最密集的地方开始,不断的反复使用全加器、半加器来覆盖“树”。全加器是一个3输入2输出的器件,因此全加器又称...

Reborn Lee 1万+

科罗拉多大学FPGA设计课程:从零到硬件实现的完整学习路径

硬件描述语言(HDL)是数字电路设计的核心,它通过代码描述硬件结构,实现从逻辑门到复杂系统的映射。其工作原理在于将高级语言(如Verilog/VHDL)综合为具体的电路网表,再通过布局布线生成可在FPGA上运行的比特流。这项技术的价值在于提供了硬件可重构性和并行处理能力,显著提升特定计算任务的效率,广泛应用于通信、图像处理、嵌入式系统等领域。本文以科罗拉多大学《嵌入式系统FPGA设计导论》课程资源为依托,系统梳理了从环境搭建、工具链使用到仿真验证、硬件实现的完整流程,并融入VSCode集成与图像处理等热点实

weixin_30675247的博客 423

数字鉴相器DSP实现:FPGA+DSP双架构工程落地指南

数字鉴相器(DPD)是锁相环(PLL)系统中实现相位误差实时提取的核心模块,其本质是将两路周期信号的时间偏移映射为线性相位差输出。原理上依赖过零检测、正交乘法或四象限反正切等离散化方法,在定点DSP平台需应对Q15格式溢出、截断误差与环路增益重标定等关键挑战。技术价值在于支撑微秒级响应、抗噪鲁棒性及资源受限下的确定性部署,广泛应用于电机驱动、电力同步和通信载波恢复等场景。本文聚焦数字鉴相器设计与DSP实现,结合FPGA+DSP双架构优势,详解三种主流结构选型、定点化实战要点及高频翻车点排查,助力算法从MAT

weixin_29172963的博客 170

verilog 乘法器代码

fpga verilog 16位有符号数乘法器,

音视频从入门到精通——指数哥伦布码原理

在计算机中,一般数字的编码都为二进制,但是由于以相等长度来记录不同数字,因此会出现很多的。

mirana的专栏 1374

STM32HAL库学习笔记九——LCD显示

本文不会对驱动编写做特别详细的描述,以记录CubeMX的部署流程为主。

weixin_44762233的博客 6911

不到200块!手把手教你用ZYNQ7010和AD9363攒一台自己的开源SDR硬件(附BOM清单)

本文详细介绍了如何用不到200元的预算,基于ZYNQ7010 FPGA和AD9363射频芯片打造一台功能完备的开源SDR硬件平台。从核心组件选型、PCB设计到焊接调试,提供全流程实战指南,特别适合预算有限的硬件爱好者和创客群体探索无线通信世界。

weixin_26854829的博客 472

2021秋-北邮计算机导论期末考试(BUPT)

2021秋-北邮计算机导论期末考试(BUPT) 难度较低适合新手练习

weixin_73985779的博客 1487

杰理AC696N系列芯片,烧录的时候烧录器连接上芯片之后电脑显示无法识别该设备,该怎么解决?

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1687

Python:爬取数据出现response.status_code为403解决方法

目录前言1. 原理2. 代码 前言 出现403的返回结果 主要是有些服务器为了防止访问量过大,承受服务器的压力,或者是拒绝你的访问。服务器接收到这个信息,理应返回了这个403的信息 在前一块的代码中解决了 Python:爬取数据出现response.status_code为418解决方法 如果还出现了403的访问错误 可以通过如下解决 1. 原理 服务器拒绝访问,可以通过给服务器登录,获取当前的cookie来得到网址的信任。得以爬取该网址的信息 在head头中加入cookie的信息 具体怎么查找该cooki

码农研究僧的博客 1万+

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

上一篇: 向量乘法器设计
下一篇: FPGA的内部构造
李锐博恩
李锐博恩 领域专家: 嵌入式与硬件开发技术领域 领域专家: 嵌入式与硬件开发技术领域
博客等级 码龄9年 4万+粉丝 956原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李锐博恩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值