h 前面已经介绍了Spartan3系列FPGA中硬件乘法器的用途、调用方法、结构特定等等,还介绍了使用一个专用硬件乘法器同时处理两个乘法的方法。接下来对它的一些具体使用方法做更深入的介绍。
1. 使用Xilinx CORE Generator来调用乘法器
前面给了一些硬件乘法器的Verilog HDL代码,不过一般都是直接使用“*”这个符号来调用MULT18*18模块,不能对它进行控制、使能等操作,在需要扩展使用的时候不够方便。
用过Xilinx CORE Generator系统的朋友都知道,Xilinx CORE Generator可以调用现有的IP核,并直接进行例化就可以调用,非常方便,省去了撰写大量代码的时间,而且其效率一般比我们自己写的还要高(毕竟是专门的研发人员做出来的)。所以在这里我们使用Xilinx CORE Generator来调用Xilinx FPGA的专用硬件乘法器。
首先需要在ISE Project Navigator中点击菜单栏中的“Project”,选择“New Source”。此时弹出了新建文件的窗口,这里我们选择IP(CORE Generator & Architecture Wizard),输入想设定的文件名字(只要符合ISE文件命名规范即可),然后点击next,此时ISE会调用IP的库;这里需要一定的时间,根据电脑配置而定,有时会有类似程序假死的现象产生。调用完成之后会出现选择IP的对话框。这里我们依次选择“View By Function”---“Math Functions”---“Multipliers”,这里出现了“Complex Multiplier”,它可以完成复数的乘法IP,我们暂时用不到,这里选择另一项:“Multiplier”,如图1所示。
图1 IP调用
点击next之后,会出现新建的文件的汇总信息(summary);如果需要修改,则点击back返回,否则点击finish。此时,ISE又需要一定的时间来产生IP配置文件,即*.xco文件。之后出现了图2的对话框。
图2 IP配置
这里详细说明一下配置的步骤。Multiplier栏里面,“Parallel Multiplier”是并行乘法器,一般就是输入两个变量来完成乘法操作的意思;“Constant-Coefficient Multiplier ”则是一个输入乘以一个常数的意思。在输入的选项里面,可以配置输入、输出的数据类型和位宽。
点击next之后,第二步让选择是采用LUT还是MULT来实现乘法器,这里我们选择“Use Mults”。选择之后下面的优化选项变为可选,根据我们的需要选择是速度优化还是面积优化。
点击next之后,第三步让选择输出位宽、流水线深度、是否有使能端、是否使用同步清零等。全部选择完成之后,点击generarate,Xilinx CORE Generator便开始产生例化代码。这一过程需要较长的时间来完成,同时会在工程文件夹里面生产一大堆文件,包括Verilog调用的、VHDL调用的、网表等等。
在CORE Generator生成之后,如果再需要对生产的IP调用进行修改,则可以在工程文件列表中双击刚才生产的vxo文件,并重新进入IP调用的编辑状态。
在IP调用的编辑状态下,点击IP symbol,则可以生成如图3所示的IP标志。
图3 生成的的IP标志
在生成过程中如果对一些选项不清楚的,可以随时点击IP编辑对话框右下角的help。不过help写的一般比较晦涩,更详细易懂的说明可以点击IP编辑对话框正下方的datasheet,这时会弹出这个IP使用的完整的datasheet,关于此IP的所有的信息都是一览无余了,如图4所示。
图4 IP的datasheet
在生成IP完成之后,在ISE Project Navigator左侧的中间位置,点击“View HDL Function Model”,可以看到该乘法器的功能描述,点击“View HDL Instantiation Template” 则就可以看到该乘法器的例化代码了,如图5所示。
图5 HDL例化模板
/**Xilinx版权声明,省略************************************************/
// The following must be inserted into your Verilog file for this
// core to be instantiated. Change the instance name and port connections
// (in parentheses) to your own signal names.
//----------- Begin Cut here for INSTANTIATION Template ---// INST_TAG
v YourInstanceName (
.clk(clk),
.a(a), // Bus [17 : 0]
.b(b), // Bus [17 : 0]
.ce(ce),
.sclr(sclr),
.p(p)); // Bus [35 : 0]
// INST_TAG_END ------ End INSTANTIATION Template ---------
// You must compile the wrapper file v.v when simulating
// the core, v. When compiling the wrapper file, be sure to
// reference the XilinxCoreLib Verilog simulation library. For detailed
// instructions, please refer to the "CORE Generator Help".
2. MAC核
做过数字信号处理(DSP)的朋友都知道,数字信号处理中有大量的乘且加运算,例子如FIR滤波器、IIR滤波器等。如果处理器中有乘数累加器(multiply accumulator),则可以极大的提高运算速度。在FPGA中处理时,如果调用专用的硬件乘法器,则相比数字信号处理器(DSPs),其运算速度会有极大的提高。Xilinx CORE Generator可以生成这样的IP核,不过受支持的器件是有限的,如图6所示,许多刚刚推出的IP核只支持Spartan3A\3ADSP、Spartan6、Virtex5、Virtex6等等,而随着ISE设计套件的一路升级,许多旧的IP核已经被淘汰、消失了。看来升级器件是早晚要解决的事情了。
附件大小Tu_1_IPDiao_Yong_.JPG57.53 KBTu_2_IPPei_Zhi_.JPG67.22 KBTu_3_Sheng_Cheng_De_IPBiao_Zhi_.jpg5.75 KBTu_4_IPDe_datasheet.JPG221.52 KBTu_5_HDLLi_Hua_Mo_Ban_.jpg85.73 KBTu_6_MAC_IP.JPG127.82 KB