FPGA学习笔记 您所在的位置:网站首页 dsp乘法器可执行的乘法运算方法是 FPGA学习笔记

FPGA学习笔记

2024-07-17 20:26| 来源: 网络整理| 查看: 265

     没学FPGA的时候,以为计算乘法和加法一样简单,但是学习之后才发现,要设计一个好的乘法器并不简单。今天就先用一个简单的例子看看乘法是怎样实现的。

先看第一种最简单直接的实现方式

module mul( //两个8位 二进制乘法操作 out, a, b ); parameter size = 8; input [size: 1] a,b; output [2*size:1] out; reg [2*size:1] out; integer i; //方法一: always @(a or b) begin out = a * b; end endmodule

按照简单的方法,两个数直接相乘。

编译后占用资源情况

这种直接相乘的方法,没有占用逻辑资源,但是占用了一个M9K块。

仿真结果如下

第二种方法,通过移位和加法操作实现。

module mul( //两个8位 二进制乘法操作 out, a, b ); parameter size = 8; input [size: 1] a,b; output [2*size:1] out; reg [2*size:1] out; integer i; always @(a or b) begin out = 0; for(i=1;i 1; //右移一位 end end endmodule

编译后占用资源情况

和方法2一样,消耗了134个逻辑资源。

仿真结果如下

第三种方法和第二种方法本质其实是一样的,第二种方法在for循环中控制 b 的下标来对数据a进行移位操作。第三种方法没有控制下标,而是每次将b右移一位,然后判断最低位,在决定是否对a进行移位运算,而a每次只左移1位。不过从逻辑上来讲,第三种方法理解起来更容易一点。

下面逐步分析一下第三种方法的计算过程

假设a=2,b=3;

为了方便理解,将这两个乘数用二进制表示 a = 8'b0000_0010, b = 8'b0000_0011;

第一次计算:先判断b的最低位是否为1,此时b的最低位为1。 计算 out = 0 + 8'b0000_0010;

然后a左移一位,移动后a的值为 a = a = 8'b0000_0100; b右移一位,移动后b的值为 b =  b = 8'b0000_0001;

进行第二次计算: b的最低位此时为1,计算 out = 8'b0000_0010 + 8'b0000_0100;

然后a左移一位,移动后a的值为 a = a = 8'b0000_1000; b右移一位,移动后b的值为 b =  b = 8'b0000_0000;

然后继续进行计算,由于b的值全部为0,所以不再执行out的计算过程,只执行a的左移运算和b的右移运算,直到退出repeat循环。

退出循环后out的值为  out = 8'b0000_0010 + 8'b0000_0100; out = 8'b0000_0110; 计算的结果out = 6;

通过上面的三个例子可以看出,要设计一个好的乘法器,核心就是如何将乘法操作通过各种方法转换成加法和移位的操作,以提高计算速度和占用更小的资源。

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有