明德扬至简设计法设计的4位流水线乘法器,比串行乘法器速度快很多。
本案例节选明德扬fpga培训班中的练习,代码简洁,欢迎比较学习。潘老师基于至简设计法的案例,绝不是世面上乱七八糟的代码,我们的代码简 单清晰,一步一步设计,是让你学习FPGA的最佳选择。
一、功能描述
流水线功能好比一个加工厂在创业之初,只有一间小车间及孤军奋战的老板,那么,当他接到一张订单之后,他必然忙于完成第1张订单,而没有能力去接第2张订单。这样接订单→完成订单→接订单→……是一个串行的过程。后来,老板发现接受订单不费太多时间,而且他还有了一个帮工,他们可以相互独立地工作,这样,老板就在完成上张订单产品的同时,接受下一张订单的订货。而多级流水线的形式,将相邻的两个部分乘积结果再加到最终的输出乘积上,即排列成一个二叉树形式的结构,这样对于N位乘法器需要log2(N)级来实现。本案例用Verilog HDL语言实现了4位流水线乘法器的功能。
二、平台效果图
仿真效果图
三、实现过程
输入输出信号列表如下:
信号名 |
I/O |
位宽 |
说明 |
clk |
I |
1 |
系统工作时钟50M |
rst_n |
I |
1 |
系统复位信号,低电平有效 |
vld_in |
I |
1 |
输入有效指示信号 |
x |
I |
4 |
数据a |
y |
I |
4 |
数据b |
p |
O |
8 |
乘积结果 |
vld_out |
O |
1 |
输出有效指示信号 |
从仿真结果可以看出,上述流水线乘法器比串行乘法器的速度快很多,在非高速的信号处理中有着广泛的应用。
判断x的4位从低到高是否为1,然后对应移位y并并置上对应的0,让其成为一个移位后的8位数据,比如x[2]为1,y为1100,则将y变为00110000,然后将对应的四个数据放入寄存器a0,b0,a1,b1,然后计算tmp0<=a0+b0,tmp1<=a1+b1,然后再p <= {2'b0,tmp0} + tmp1;即可得到最终乘积p。
以此实现了一个4位流水线乘法器。
代码资料下载:http://pan.baidu.com/s/1gePRKZp