赞
踩
目录
实现并行乘法器的方法又很多种,但是归结起来基本上分为两类,一类是靠组合逻辑电路实现,另一类流水线实现。流水线结构的并行乘法器的最大点就是速度快,尤其是在连续输入的乘法器中,可以达到近乎单周期的运算速度,但是实现起来比组合逻辑电路要稍微复杂一些。下面就组合逻辑电路实现无符号数乘法的方法作详细介绍。假如有被乘数A 和乘数B,首先用A 与B 的最低位相乘得到S1,然后再把A 左移1 位与B 的第2 位相乘得到S2,再将A 左移3 位与B 的第三位相乘得到S3,依此类推,直到把B 的所有位都乘完为止,然后再把乘得的结果S1、S2、S3……相加即得到相乘的结果。需要注意的是,具体实现乘法器并不是真正的去乘,而是利用简单的判断去实现,举个简单的例子。假如A 左移n 位后与B 的第n 位相乘,如果B 的这位为‘1’,那么相乘的中间结果就是A 左移n 位后的结果,否则如果B 的这位为‘0’,那么就直接让相乘的中间结果为0 即可。B 的所有位相乘结束后,把所有的中间结果相加即得到A 与B 相乘的结果。
在本实验中需要掌握的基本语法知识:
1、参数定义关键词parameter的使用;
2、for语句的用法;
3、移位操作符及其用法。
(参考文献:Verilog HDL语言基础知识-CSDN博客)
本实验的任务是实现一个简单的四位并行乘法器,被乘数A 用拨挡开关模块的 SW1~SW4 来表示,乘数B 四个独立按键来表示,相乘的结果用LED 模块的D1~D8 来表示,LED 亮表示对应的位为‘1’。拨动开关输入一个四位的被乘数和一个四位的乘数,经过设计电路相乘后得到的数据在LED 灯上显示出来。
A | 212,213,34,35 |
B | 153,95 ,154,31 |
LED[7:0],LED_CS | 167,165,166,162,164,159,161,156,174 |
当设计文件加载到目标器件后,拨动相应的拨码开关,输入一个四位的乘数和被乘数,则在LED灯上显示这两个数值相乘的结果的二进制数。
乘法器是处理器设计过程中经常要面对的运算部件。一般情况下,乘法可以直接交由综合工具处理或者调用EDA厂商现成的IP,这种方式的好处是快捷和可靠,但也有它的不足之处,比如影响同一设计在不同工具平台之间的可移植性、时序面积可采取的优化手段有限、个性化设计需求无法满足等。所以,熟悉和掌握乘法器的底层实现原理还是有必要的,技多不压身,总有用得上的时候,同时也是一名IC设计工程师扎实基本功的体现。
不采用任何优化算法的乘法过程,可以用我们小学就学过的列竖式乘法来说明。从乘数的低位开始,每次取一位与被乘数相乘,其乘积作为部分积暂存,乘数的全部有效位都乘完后,再将所有部分积根据对应乘数数位的权值错位累加,得到最后的乘积。如下图,左边为十进制乘法过程,基数为10,右图为二进制乘法过程,基数为2。PP0~PP3分别表示每次相乘后的部分积。可见,二进制乘法与十制乘法本质上是没有差别的
根据乘法器的原理,如果乘数和被乘数的位数分别是m和n,那么乘出来的结果数位数就是m+n-1位。
这里我们会获取到两个输入的数据,分别是乘数和被乘数,我们可以对乘数每一位去进行遍历,如果乘数当前遍历到的位数为1的话,那么结果数就加上被乘数左移一位;如果遍历到0的话,那就不执行任何操作,直接进行下一次循环遍历。
创建Verilog文件
然后就进行编程,代码如下:
- module test_04(
- A,B,R
- );
- input [3:0] A,B;
- parameter s=4;
- output [7:0] R;
- integer i;
- reg [7:0] R;
- always@(A or B)
- begin
- R=0;
- for(i=0;i<s;i=i+1)
- begin
- if(B[i]==1)//如果乘数当前位是1的话,就对结果进行相加左移操作
- R=R+(A<<i);
- end
- end
- endmodule

然后就是设置为顶层文件编译运行,如果结果无误后的话,我们可以去进行仿真实验。
创建仿真文件,如图所示:
然后双击此处空白区域(鼠标左键)
然后点击此处设置参数
然后,先点击List,列出参数变量,然后再点击下面箭头指向的位置,把这些参数右移到当前波形仿真文件中,最后点击OK就行了。
然后就是去进行参数的设置,点击上面箭头指向的位置,设置自动增加型的参数,下面箭头指向的是周期,可自定义。
最后就去编译运行,进行生成仿真波形,结果如下:
仿真测试无误后,我们就可以去进行电路的连接。
鼠标右键点击Verilog文件,然后点击生成子模块文件。
没有问题后,就创建block文件,如图所示:
打开元器件,点开project文件,我们就可以看到我们Verilog语言写的元器件,然后直接拿出来用就行了。
最后就是去连接电路图即可,连接电路图时因为输入和输出是有多个宽度的量,那就要用总线去连接,之后就要把输入输出的名字进行修改,后面要加上变量的宽度!!!
然后就是去绑定引脚 ,结果如下所示:
最后就是整体去编译运行了,没有错误后,我们就可以去进行烧录操作了。
点击此处。
这里我们就可以看到有一个芯片,也就是我们生成的sof文件,只需要把这个文件烧录到你的开发板就行了。(注意:上面如果显示No Hardware的话,要点开旁边的接口设置,设置为USB接口就行了,连接了开发板就会自动显示出来)。
以上就是本期的全部内容了,我们下一次见!
分享一张壁纸:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。