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