Quartus-FPGA路径优化禁用咨询:如何保留多级非门延迟路径
FPGA中保留多级非门延迟路径的方法
module path1(out, in, w0, w1, w2, w3, w4, w5, w6, w7, w8, w9); input in; output out; output w0, w1, w2, w3, w4, w5, w6, w7, w8, w9; not(w0, in); not(w1, w0); not(w2, w1); not(w3, w2); not(w4, w3); not(w5, w4); not(w6, w5); not(w7, w6); not(w8, w7); not(out, w8); endmodule
我设计了上述模块,原本想通过10级非门串联产生输出延迟,在FPGA硬件中实现指定延迟效果。但查看Quartus的RTL Viewer时发现,工具直接对路径做了逻辑优化,输出和输入被直连,完全没保留10级非门的延迟路径。我已经把所有中间线网都设为输出,没用;尝试在Fitter Settings里禁用相关优化选项,也没效果;甚至用LCELL原语来搭建路径,结果还是没产生延迟,RTL Viewer里依然只显示直连总线。请问该怎么构建这条延迟路径?能不能彻底禁用这类逻辑优化?
解决方法
- 强制实例化FPGA专用原语:放弃普通
not门,直接调用目标FPGA系列的缓冲/延迟原语(如Altera的LCELL),且给每个原语的输出添加物理位置约束,指定到不同的逻辑单元,避免工具合并优化。 - 添加时序约束锁定延迟:在SDC约束文件中给输入
in到输出out设置最小延迟,强制工具保留足够逻辑满足要求,示例:
延迟值根据需求调整,确保工具无法通过直连满足约束。set_min_delay -from [get_ports in] -to [get_ports out] 1000ps - 模块级禁用优化属性:在模块开头添加综合属性,直接禁止对该模块的冗余逻辑移除等优化:
同时在Quartus的Compiler Settings中关闭“Remove redundant logic”“Collapse duplicate logic”等全局优化选项。(* altera_attribute = "-name AUTO_SHIFT_REGISTER_RECOGNITION OFF; -name REMOVE_REDUNDANT_LOGIC OFF" *) module path1(...); - 插入触发器打破逻辑等价:若上述方法无效,可在非门之间插入寄存器,虽会变成同步延迟,但能彻底避免工具逻辑合并,适用于对延迟类型要求不严格的场景。
内容的提问来源于stack exchange,提问作者zibidigonzales
相关产品推荐
相关产品推荐

