Quartus RTL Viewer未显示级联Not门,如何查看正确RTL?
解决Quartus RTL Viewer不显示级联非门的问题
首先修正你代码里的笔误:第二个非门的输入用了未定义的d,应该改为a1,修正后的代码如下:
module notnot(clk, outp); input clk; output outp; wire a1; not #(20) n1(a1,clk); not #(20) n2(outp,a1); // 修正未定义的d为a1 endmodule module ini(a,b); input a; output b; notnot poe1(a,b); endmodule
为什么RTL Viewer只显示连线?
Quartus综合器默认会执行逻辑优化,两个级联的非门在逻辑上等价于直接连线(两次取反等于原信号),所以综合器会自动移除这两个冗余的非门,只保留连线。
查看正确RTL的两种方法
方法1:关闭全局逻辑优化
- 打开Quartus工程,点击菜单栏
Assignments->Settings - 在设置窗口中,展开
Compiler Settings->Advanced Settings (Synthesis) - 找到逻辑优化相关选项,勾选
Disable gate-level optimization(或取消勾选Remove redundant logic类选项,不同版本名称可能略有差异) - 重新执行全编译(
Processing->Start Compilation),之后打开RTL Viewer即可看到两个非门
方法2:添加代码约束阻止局部优化
在代码中给中间信号添加syn_keep属性,强制综合器保留该信号及对应的逻辑单元:
module notnot(clk, outp); input clk; output outp; // 添加syn_keep属性阻止a1被优化 (* syn_keep = "true" *) wire a1; not #(20) n1(a1,clk); not #(20) n2(outp,a1); endmodule module ini(a,b); input a; output b; notnot poe1(a,b); endmodule
重新编译后,RTL Viewer会保留两个非门的结构。
内容的提问来源于stack exchange,提问作者Bhawesh Mishra
相关产品推荐
相关产品推荐

