2

我通过计算组件所需的触发器数量来估计我的资源使用情况。例如,当我为ins_controldata(简单计数器和一些 I/O)估计它时,我使用 32 个触发器。当我查看该组件的详细映射报告时,第 13 节 - 层次结构的利用,我看到我的估计接近用于该组件的 slice 寄存器的数量。每个切片有 4 个 LUT 和 8 个触发器。

现在,当我对有限状态机执行相同操作时 inst_xtm640,我估计我的触发器使用量约为 43(包括 6 个状态所需的 3 个触发器)。当我查看地图报告时,我发现我的估计或多或少是正确的(+-10% 错误)。但是所需的 slice 数量远远高于所需的 slice 寄存器和 LUT。查看使用过的 LUT 是 40,应该只有 20 左右。

为什么要为这个组件使用额外的切片?是为了速度优化吗?

+----------------------------------------------------------------------------------+
| Module               | Partition | Slices*       | Slice Reg     | LUTs          |                                                            
+----------------------------------------------------------------------------------+
| ++inst_controldata   |           | 6/6           | 35/35         | 20/20         |
| +++inst_xtm640       |           | 40/40         | 57/57         | 88/88         |
+----------------------------------------------------------------------------------+

编辑:我想我自己找到了它,但总是欢迎其他输入:

并非所有切片都被充分使用。所以这并不意味着如果我使用 88 个 LUTS 和 57 个切片寄存器,我将使用 22 个切片。有些切片没有完全使用,所以这会使切片使用率更高。额外的片也将用于满足时序约束。

4

2 回答 2

0

您的编辑确实是正确的。合成器有时是一件非常不可预测的事情,尤其是您的约束是什么以及您优化的内容是获得结果的关键。

如果您要针对大小(面积)进行优化,您的估计可能会更接近。你的系统越大越复杂,这对你最终的位置和路线的影响就越大。这就是为什么当你看你的小例子时,结果更接近。

这也是你不应该“填满”你的 FPGA 的一个很好的理由。剩下的空间越多,优化器关闭时间的效率就越高。这当然是对资源的“浪费”,但可能会带来更好的结果。

我收到的关于 FPGA 布局的一个建议是不要详细说明合成器没有操作空间。例如,不要用逻辑来做触发器,而是使用语言的抽象。只要您知道结果是如何达到的,就让合成器完成它的工作,找出什么是必要的以及如何优化它,它通常会做得更好

\保罗

于 2013-08-14T16:02:33.140 回答
0

在赛灵思工具链中,将 LUT 和寄存器分配给特定切片的构建步骤称为“映射”。默认情况下,特别是如果您的设计仅占用少量设备资源,map 不会尝试将尽可能多的 LUT 和寄存器打包到一个切片中。这就是为什么您看到的切片数比预期的要高。

您可以通过将 -c (Pack Slices) 选项设置为 1 来强制 map 更积极地打包切片:

-c [包装因子]

packfactor(对于非零值)是目标切片密度百分比。

  • packfactor 值为 0 指定只有相关逻辑(具有公共信号的逻辑)应打包到单个 Slice 中,并产生最不密集的设计。
  • 包装因子为 1 会导致最大包装密度,因为包装器尝试使用 1% 的切片利用率。
  • Packfactor 为 100 意味着只会出现足够的不相关的包来适应设备的 100% 利用率。这导致最小的堆积密度。
于 2013-09-29T18:58:31.733 回答