Quartus Prime Lite 23.1中SystemVerilog设计综合未化简RTL门电路问题
为什么Quartus RTL Viewer显示未化简的门级网表?
你的问题核心是RTL Viewer展示的是综合初期的结构,而非最终优化后的电路,具体原因拆解如下:
RTL Viewer的定位问题:这个工具的作用是把你写的SystemVerilog代码直接转换成对应的RTL级结构,优先保证和代码逻辑一一对应,不会主动做逻辑化简。它的目标是帮你验证代码描述的逻辑是否正确,而不是展示最终部署到FPGA上的优化后电路。你看到的重复项
(a&~b)&c,其实是代码里对应minterm 4和5的原始描述被直接转译的结果。综合流程的阶段差异:Quartus的综合分多个阶段:
- 前端分析:把代码转成RTL结构(就是RTL Viewer展示的内容)
- 逻辑优化:这一步才会做布尔化简、冗余项消除,得到你教材里的
~b&~c + a&~b - 技术映射:把优化后的逻辑映射到FPGA的底层资源(比如LUT、触发器)
你只看了第一阶段的结果,自然和教材里的优化后电路不符。
代码写法的影响:如果你是直接用
case语句枚举每个minterm,或者用多个||拼接原始最小项,RTL Viewer会严格按照代码的分支生成结构。比如你写:assign f = (~a&~b&~c) | (a&~b&~c) | (a&~b&c);RTL Viewer就会直接生成三个与门加或门的结构,不会提前合并项。但如果直接写化简后的表达式,RTL Viewer就会展示对应的结构。
优化设置的问题:如果你的Quartus工程没开启默认优化,或者优化等级设为最低,逻辑优化阶段可能不会做彻底的化简。可以去
Assignments > Settings > Compiler Settings > Optimization Technique里检查,一般选Speed或Balanced都会自动做布尔化简。验证最终电路的正确方式:要看优化后的结果,应该打开Technology Map Viewer,或者通过仿真验证逻辑功能。RTL Viewer只是中间步骤的参考,不是最终电路的体现。
内容的提问来源于stack exchange,提问作者Pepe Cuesta
相关产品推荐
相关产品推荐

