我正在 Xilinx ISE 的 Verilog 中编写一个可综合模块。其中一部分是创建一个 256x128x1 数组,每个单元格中有 1 位,并在每个时钟上升沿一次填充该数组 1 位。
我决定在填充它时忽略任何 for 和 while 循环以减少合成时间。但是,合成仍然需要很多时间(我现在已经让它运行了 30 分钟,它仍然没有停止)。在设计中需要创建这么多内存单元(32767)时,花费大量时间是否正常?
我正在 Xilinx ISE 的 Verilog 中编写一个可综合模块。其中一部分是创建一个 256x128x1 数组,每个单元格中有 1 位,并在每个时钟上升沿一次填充该数组 1 位。
我决定在填充它时忽略任何 for 和 while 循环以减少合成时间。但是,合成仍然需要很多时间(我现在已经让它运行了 30 分钟,它仍然没有停止)。在设计中需要创建这么多内存单元(32767)时,花费大量时间是否正常?
如果你有一个带有一些 seq/comb 的大“数组”。逻辑上,合成只是需要更多的时间来进行映射和优化,而且256x128x1 regs之间的互连并不简单,这些连接不是免费的!另一种方法是使用供应商提供的内存库来减少综合时间,但是您可能会更改算法以适应新的内存模型。
我认为你可以重新组织你的代码来制作具有 256 个元素的 BlockRAM 内存,每个元素都是 128 位宽。您可以设计一个 128 位宽的移位寄存器,并在每个上升时钟移入 1 位。当您收到 128 拍的数据时,将其写入 BlockRAM。此设计将比原始 32767x1 版本更好地使用 BlockRAM 资源。
但是考虑到您的单独运行时间,它是发生在综合阶段还是 PAR 阶段?32767x1 位 BlockRAM 不太可能导致长时间运行问题。