VerilogHDL & VHDL 重要语法记录&备忘
VHDL
Port 设置默认值
如下所示,std_logic 和 std_logic_vector 分别有不同的默认值设置形式
1 | port( |
避免被优化
以下这三者都可以,但具体使用哪个需要结合他们的差异来做判断
1 | attribute syn_keep : boolean; |
差异对比:
- 对于
dont_touch
属性,被常用于防止综合工具对特定的 wire 或者 module 进行任何优化,告诉综合工具”不要触碰“这个元素,保存原始的形态。 - 对于
syn_keep
指令,这个指令是特定于综合的,被用来告诉综合工具保持某些信号或逻辑,主要目的是防止优化过程中的信号消除。 - 对于
mark_debug
指令,通常与硬件调试相关,用于标记需要在后续调试中观察的信号。
总结:
如果说是为了保持信号或模块在综合过程中不变,dont_touch
是最好的选择。如果是为了确保在逻辑优化阶段某些信号不被移除,syn_keep
更合适。最后如果是涉及硬件调试的场景,那么mark_debug
是首选。
目前不确定 dont_touch 是不是对于两种编译器都是适用的,能肯定的是 Xilinx 官方有明确的关于 dont_touch 的说明,而 Quartus 端目前能查到的是 keep attribute 的使用,两个链接都放在下面供参考
- Intel® Quartus® Prime Pro Edition Help version 23.4 - keep VHDL Synthesis Attribute
- VHDL Component Example • Vivado Design Suite User Guide: Synthesis (UG901) • Reader • AMD Adaptive Computing Documentation Portal (xilinx.com)
Verilog
wire signal 避免被优化
代码如下,具体差异上面已经介绍过不再赘述
1 | (* syn_keep = "true", mark_debug = "true" *) wire signal; |
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.