首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Xilinx FPGA芯片底层单元的使用(4)

Xilinx FPGA芯片底层单元的使用(4)

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结构图

继承事业,薪火相传
返回列表