我自己做过几次。
通常,设计工具会根据综合设置在架构实现和 DSP Slice 之间进行选择。
例如,对于 Xilinx ISE,在综合过程设置、HDL 选项中,有一个设置“-use_dsp48”,其中包含以下选项:Auto、AutoMax、Yes、No。您可以想象,这控制了工具尝试放置的难度DSP片。我曾经遇到过一个问题,我将一个整数乘以 3,从而推断出一个 DSP 片——除了我已经手动推断了芯片中的每个 DSP 片,所以合成器失败了!我将设置更改为否,因为我已经在使用每个 dsp 切片。
这可能是一个很好的经验法则(我刚刚编造的):如果您的设计时钟频率低于 50 MHz,并且您可能会使用不到 50% 的芯片中的 DSP 片,那么只需使用*、+ 和 - 运算符。这将推断没有流水线寄存器的 DSP 片。这确实限制了最高速度。(我不知道当你使用除法时会发生什么)
但是,如果看起来您要运行的切片更接近 DSP 切片的最大速度(Spartan 6 正常速度等级为 333 MHz)您要使用所有切片,您应该手动推断它们.
在这种情况下,您有两个选择。
选项 1:手动使用原始 DSP 实例化模板。选项 2:使用 Xilinx Core Generator 的 IP 块。(我会使用此选项。同时,您将了解有关核心生成的所有信息,这将对将来有所帮助)
在执行上述任一操作之前,请阅读 DSP slice 用户指南的前几页。对于 Spartan 6 (DSP48A1),即 Xilinx 文档 UG389:
http ://www.xilinx.com/support/documentation/user_guides/ug389.pdf
首先考虑核心生成器选项。我通常在 Core Generator 中为我正在使用的部件创建一个测试项目,在其中我创建任意数量的 IP 块只是为了学习系统。然后,当我准备在 ISE 中向我的设计添加一个时,我在 Design Hierarchy 中单击鼠标右键,单击 new source,然后选择“IP (CORE Generator & Architecture Wizard)”,这样我就可以直接编辑和重新生成块从我的项目。
在 Core gen 中,看看您可以选择的不同 IP 块 - 有几十个,其中大部分都非常酷。
乘数核心是您应该首先查看的。检查每一页,然后单击数据表按钮。重要的部分是整数位宽、流水线阶段(延迟)和任何控制信号。通过删除所有不需要的端口,这会产生最简单的块。
去年我在构建一个 5 x 3 阶 IIR 滤波器时,我不得不使用手动实例化模板,因为我正在构建一个非常自定义的实现,其中 2 个 DSP 片的时钟比采样率快 4 倍。这是一个彻头彻尾的痛苦。