第6节 Xilinx FPGA芯片底层单元的使用2
推荐给好友
打印
加入收藏
更新于2008-05-28 19:16:28

4.6.4 硬核乘加器的使用

随着FPGA芯片容量的提高和工艺的发展,很多FPGA内部都内嵌了硬件乘加器,所以FPGA内部的乘法器就有两种实现方式:硬核乘法器的实现和用逻辑单元搭建的乘法器。目前由于内嵌了大量的硬核乘法器,FPGA在数字信号处理系统方面的成本和功耗性能已经超越了专用的DSP处理器。

1. 硬核乘加器的组成和功能介绍

硬核乘加器是Xilinx XtremeDSP解决方案的核心组成部分,从而可以独立实现500MHz 的性能,或在整合到一列中时实现 DSP 功能,支持40多个动态控制的操作模式,包括乘法器、乘法器-累加器、乘法器-加法器/减法器、三输入加法器、桶形移位器、宽总线多路复用器或宽计数器,其组成结构如图4-127所示。此外,级联硬核乘加器,无需使用 FPGA 逻辑和路由资源。



图4-127 硬核乘加器的组成结构

图4-127中的OPMODE是乘加器工作模式配置输入,可在ISE中通过软件方式指定。硬核乘加器的乘法器和加法器可以单独使用,但对于一个乘加器资源,只使用了其乘法器或加法器,则另外的加法器或乘法器就不能再被使用。不同系列芯片中乘加器的特点略有不同,从整体而言,都具有以下特点:

  • 18位 18位,两个补码乘法器具有完全准确的36位结果、符号可以扩展到48位。
  • 三输入、灵活的48位加法器/减法器,具有可选的寄存器累加反馈。
  • 40多个动态用户控制器操作模式,使乘加器的功能适应从一个时钟周期到下一个时钟周期的变化。
  • 级联的18位B总线,支持输入取样传递。
  • 级联的48位p总线,支持部分结果的输出传递。
  • 多精度乘法器和算法支持17位操作数右移位,以对准宽乘法器的部分乘积(并行或顺序乘法)。
  • 对称智能舍入支持更高的计算精度。
  • 控制和数据信号使用的、能够提高性能的流水线选项,可以通过配置位来进行选择。 
  •  输入端口“C”通常用作乘、加、进位的三操作数加或灵活的舍入模式。
  • 独立的复位和时钟,实现了控制和数据寄存器。

2. 硬核乘法器IP Core的使用

硬核乘法器IP Core可以完成有符号数、以及无符号数的乘法,还能够完成输出数据的位宽截取,支持流水线操作,功能强大。其用户操作界面如图4-128所示,点击“Next”按键进入下一页,可以让用户选择是使用FPGA芯片上的硬乘法器(Use Mults),还是用Slice来构建乘法器(Use LUTs)。



图4-128 乘法器IP core用户操作界面

乘法器具有丰富的控制信号,其详细说明见下文。

A:乘法器的一个输入操作数,在使用时应当确定其位宽,其位宽可以在右边的端口位宽编辑框可以输入,并且可以有符号数、无符号数的两种选择。

B:乘法器的一个输入操作数,在使用时应当确定其位宽,其位宽可以在右边的端口位宽编辑框可以输入,而且可以与A口的输入操作数位宽不同。可以有符号数、无符号数的两种选择。(注:乘法器可以只接收A口的输入信号,而与一常数相乘,此常数可以为固定的或可重导入的。对于可重导入数据(RCCM)情况中,此常数可以在B口重新导入而得到改变。)

CLK:乘法器的工作时钟。上升沿有效。
CE:输入信号,指示时钟是否有效。
ND:握手信号。
ACLR:异步清零信号。
SCLR:同步清零信号。
LOADB:当RCCM时才有效。当此信号为高时,B端口新的输入可以重新写入计算模块的存储单元。
SWAPB:当RCCM时才有效。当此信号为高时,在计算模块的存储单元已存有的多个常数中进行选择。
RDY:输出的握手信号,当其变高时表明数据有效。
RFD:握手信号,在其变高后的下一个时钟上升沿数据有效。
O:异步输出信号,位宽根据输入信号的位宽而定。
Q:同步输出信号,位宽根据输入信号的位宽而定。
LOAD_DONE:当RCCM时才有效,指示重新导入数据的过程完成。

例4-9 使用IP Core实例化一个16位乘法器

IP Core直接生成的乘法器的Verilog模块接口为:

module multiply(sclr, rfd, rdy, nd, clk, a, b, q);

input sclr;
output rfd;
output rdy;
input nd;
input clk;
input [17 : 0] a;
input [17 : 0] b;
output [35 : 0] q;
……

endmodule

在使用时,直接调用multiply模块即可,如:

module multiply1 (sclr, rfd, rdy, nd, clk, a, b, q);

input sclr, nd, clk;
output rfd, rdy;
input [15 : 0] a, b;
output [31 : 0] q;

multiply multiply1(.sclr(sclr), .rfd(rfd), .rdy(rdy), .nd(nd), .clk(clk),
.a(a), .b(b), .q(q));

endmuodule

上述程序经过Synplify Pro综合后,得到的RTL结构如图4-129所示。



图4-129 乘法器IP Core综合后的RTL结构图

经过仿真测试得到的功能波形图如图4-130所示,正确地实现了乘法功能。



图4-130 乘法器IP core的仿真波形

3. 硬核乘加器IP Core的使用

硬核乘加器在乘法器后面级联了一个可控加法器,都可工作在芯片的最高工作频率。下面给出一个应用实例。

例4-10 使用硬核乘加器完成两路输入数据的相乘,并将每8个乘积结果累加后送出。其中输入数据为16比特,工作频率为50MHz。

1)在工程中添加硬核乘加器的IP Core文件,位于“FPGA Features and Design” “XtremeDSP Slice” “Multiply Accumulator v9.1i”。
2)配置IP Core参数。输入数据位宽设为16比特,且输入输出不与其余的DSP Slice级联,输出位宽设置为19比特,如图4-131所示,点击“Next”进入下一页;无进位选项,且只选择加法输入,OPMODE 模式设置为“Normal accumulator mode”,如图4-132所示,点击“Next”进入下一页;A、B流水线都设为1,其余设置如图4-133所示,点击“Next”进入下一页;最后一页为乘加器的配置参数列表,如图4-134所示,点击“Finish”按键,即可完成全部配置。


图4-131 乘法器IP core的配置界面(1)                                图4-132 乘法器IP core的配置界面(2)


图4-133 乘法器IP core的配置界面(3)                                       图4-134 乘法器IP core的配置界面(4)

3)在过程窗口中点击“View HDL Instantiation Template”命令,可查阅其代码例化模版,如下所列:

muladder instance_name (

.A_IN(A_IN),
.B_IN(B_IN),
.CE_IN(CE_IN),
.CLK_IN(CLK_IN),
.LOAD_IN(LOAD_IN),
.RST_IN(RST_IN),
.P_OUT(P_OUT)
);

4)调用该IP Core完成设计,代码如下:

module my_muladder(clk_50MHz, reset, ce, dina, dinb, dout);

input clk_50MHz;
input reset;
input ce;
input [15:0] dina;
input [15:0] dinb;
output [34:0] dout;

reg [34:0] dout;
wire [34:0] p_out;
reg load = 0;
reg [2:0] cnt = 0;
always @(posedge clk_50MHz) begin
         if(reset) begin
                  cnt <= 0; 
                  load <= 0; 
                  dout <= 0; 
         end
         else begin 
            cnt <= cnt + 1'b1; 
                 if(cnt == 0)
                          load <= 1'b0; //直通加法器 
                else
                         load <= 1'b1; //load=1累加
                if(cnt == 2)
                        dout <= p_out;
                else 
                        dout <= dout; 
               end
end

muladder muladder(

.A_IN(dina),
.B_IN(dinb),
.CE_IN(ce),
.CLK_IN(clk_50MHz),
.LOAD_IN(load),
.RST_IN(reset),
.P_OUT(p_out)
);

endmodule

上述程序经过Synplify Pro综合后,得到的RTL结构如图4-135所示。



图4-135 乘加器应用程序的RTL结构图

经过仿真测试得到的功能波形图如图4-136所示,可以看到本例正确地实现了8个乘积结果累加的功能。



图4-136 乘加器应用程序的仿真结果

4.7 本章小结

本章详细介绍了基于ISE的FPGA设计流程以及多个辅助工具(XST、XPower、PACE、ModelSim、Synplify以及MATLAB)的使用方法。首先介绍了ISE软件主要特性及其安装流程,然后介绍了如何通过ISE完成FPGA设计,详细介绍了综合、仿真以及实现的软件操作和XST、XPower、PACE等工具的基本操作。之后,简单介绍了Synplify Pro和ModelSim SE的安装流程,并介绍如何在ISE关联Synplify Pro和ModelSim SE 的使用方法以及和ISE的联合开发流程。再次,介绍了MATLAB和ISE的联合开发模式,其中利用MATLAB来辅助ISE开发是目前流行的设计方法之一,也是本书所强调的重点。最后,介绍了Xilinx FPGA底层单元(DCM、块RAM以及硬核乘加器)的原理和使用方法。鉴于篇幅,不可能对以上所提及软件的其他功能进行详细介绍,读者应该在实际工作中学习并熟练掌握。

 

<<上一节    下一节>>




 
关于我们 | 诚邀加盟 | 客户服务 | 相关法律 | 网站地图 | 友情链接 | 服务信箱:service@eefocus.com
© 2006 与非门科技信息咨询(北京)有限公司 All Rights Reserved.