原创 [博客大赛]小程序大道理---乘法器

2014-4-3 10:00 1789 12 14 分类: FPGA/CPLD 文集: FPGA

 乘法器

一个最基本的运算,在写C程序时,一条语句就行了,然而我们写硬件程序,面对的是最底层,是和“ 0和1 ”打交道,必须搞清楚乘法器的实现方式。当然,直接写一条语句也不是不可以,但是在某些情况下,并不是最明智的方式!

注: 以下例子都是 无符号型的8位乘法运算 。

在Quartus环境下,可以通过设置“综合选项”来选择乘法器的实现方式,也可以在程序中使用一些预编译指令,指示综合器乘法器的实现方式。LEs 或者 硬件嵌入式乘法器,当然,各有特点,留着硬件专用乘法器不用,也是一种资源浪费,但是速率受限;用LEs设计的优质的流水线乘法器,速率可以很高,代价是消耗逻辑资源 。 具体使用哪种方式,要看具体情况。

1、 Quartus 用 硬件乘法器

(*multstyle="dsp"*)module top(clk,rst_n,A,B,C);
input clk;
input rst_n;
input [7:0]A;
input [7:0]B;
output reg [15:0]C;


reg [7:0] a,b;
always@(posedge clk or negedge rst_n)
if(!rst_n)
begin
 a<=8'd0;
 b<=8'd0;
end
else begin
      a<=A;
      b<=B;
     end
 always@(posedge clk or negedge rst_n)
 if(!rst_n)
  C<=16'd0;
 else
  C<=a*b;

endmodule

RTL视图

20140401193116474.jpg

资源使用情况

20140401193216863.jpg

注: 硬件乘法器中,含有触发器 [7:0]a [7:0]b ,[15:0]C

Technology Map Viewer

20140401193409491.jpg

速率

20140401193450543.jpg

2、Quartus 用 LEs 实现,程序不采用任何算法,编译器自己综合乘法器,至于Quartus用什么算法实现的乘法器,没有深入研究。。。。反正实现了乘法功能(哈哈)。

(*multstyle="logic"*)module top(clk,rst_n,A,B,C);
input clk;
input rst_n;
input [7:0]A;
input [7:0]B;
output reg [15:0]C;


reg [7:0] a,b;
always@(posedge clk or negedge rst_n)
if(!rst_n)
begin
 a<=8'd0;
 b<=8'd0;
end
else begin
      a<=A;
      b<=B;
     end
 always@(posedge clk or negedge rst_n)
 if(!rst_n)
  C<=16'd0;
 else
  C<=a*b;

endmodule

资源使用

20140401194304337.jpg

Technology Map Viewer (部分),简直不忍直视。。。

20140401194353486.jpg

速率

20140401194419475.jpg

 

用算法实现乘法器,设计比较好的乘法器,下篇博文续。。。。

文章评论2条评论)

登录后参与讨论

pengchengcheng082_593158939 2014-4-4 10:20

一个综合成 硬件乘法器 ,一个综合成 LEs ,程序一样,模块开头的指令不同

用户442704 2014-4-3 21:13

程序有区别么?
相关推荐阅读
pengchengcheng082_593158939 2015-08-21 16:26
Linux 下 的 vi 编辑器
一、按ESC键 跳到命令模式,然后: :w 保存文件但不退出vi :q 不保存文件,退出vi :wq 保存文件并退出vi :q! 不保存文件,强制退出vi :w! 强制保存,不推出...
pengchengcheng082_593158939 2015-07-28 15:57
面向对象和面向过程区别
转自 http://blog.sina.com.cn/s/blog_4dd5955301000a2m.html     面向对象和面向过程的区别,实在是难用一两句话说明白。   ...
pengchengcheng082_593158939 2015-05-23 10:39
后仿真能否被形式验证(Formal Verification)和静态时序分析(Static Timing Analysis)所取代
转自 http://www.cnblogs.com/jyaray/archive/2011/04/26/2029856.html 验证的主要目的:就是检查时间模型是否满足时间要求,是否实现了时...
pengchengcheng082_593158939 2015-05-19 11:18
两种代码方式
下面的两段程序等价,RTL图以及综合后的结果 完全一样。看似简单,其实是两种不同的思维方式。在复杂电路中能体现出两种方式各自的特点,第一种容易理解,第二种则结构更清晰,更接近综合后的结果。以前习惯用上...
pengchengcheng082_593158939 2015-05-14 16:28
Linux 下 的 cc 和 gcc
转自 http://www.cnblogs.com/zhouyinhui/archive/2010/02/01/1661078.html   在Linux下一会看到cc,另一会又看到gcc...
pengchengcheng082_593158939 2015-05-13 17:19
mips 编译器
1、linux 系统下编程的编译器 GNU toolchain(GNU工具链)是一个包含了由GNU项目所产生的各种编程工具的集合。这些工具形成了一条工具链,用于开发应用程序和操作系统。  ...
我要评论
2
12
关闭 站长推荐上一条 /2 下一条