合成中应避免哪些SystemVerilog功能?
SystemVerilog引入了一些非常有用的结构来改进编码风格。然而,正如我的一位同事经常说的,“你不是在写软件,你是在描述硬件。”考虑到这一点,当需要综合最终结果时,应该避免语言的哪些特性?这显示了Synopsys工具目前可以合成的功能,但为了安全起见,我认为应该只使用所有主要供应商都可以合成的功能。此外,什么构造会在网络列表中产生奇怪的结果,这在ECO中很难遵循 总之:我喜欢紧凑且易于维护的代码,但如果它在后端导致问题,我就不喜欢。我应该避免什么合成中应避免哪些SystemVerilog功能?,verilog,system-verilog,Verilog,System Verilog,SystemVerilog引入了一些非常有用的结构来改进编码风格。然而,正如我的一位同事经常说的,“你不是在写软件,你是在描述硬件。”考虑到这一点,当需要综合最终结果时,应该避免语言的哪些特性?这显示了Synopsys工具目前可以合成的功能,但为了安全起见,我认为应该只使用所有主要供应商都可以合成的功能。此外,什么构造会在网络列表中产生奇怪的结果,这在ECO中很难遵循 总之:我喜欢紧凑且易于维护的代码,但如果它在后端导致问题,我就不喜欢。我应该避免什么 编辑:作为对投票结果的回应,我想试着让这更
编辑:作为对投票结果的回应,我想试着让这更具体一点。这个问题的灵感来自于答案。我非常喜欢使用Dave所说的“sugar”来降低代码复杂度,但如果某些合成工具会破坏信号名称并使结果难以处理,我就不会这样做。我在寻找更多这样的例子。理论上,如果你可以编写合成成机器代码的软件在一块硬件上运行,那么软件可以合成成硬件。相反,Verilog-1995中有一些硬件结构被认为是不可合成的,这仅仅是因为没有一家主要的供应商能够支持它(例如,
assign
/deassign
)。我们仍然有人使用//synopsis translate on/off
,因为他们花了很长时间才支持`ifdef synopsis
SystemVerilog中合成的大部分我认为是“强>安全/强”是我称之为Verilog的语法糖。这只是用更少的输入编写相同的Verilog代码的更方便的方法。例如:
- 数据类型:typedef、struct、enum、int、byte
- 将这些类型用作端口、参数和函数返回值
- 赋值运算符:++--+=
- 类型铸造和钻头流化
- 包裹
- 接口
- 端口连接快捷方式
- 函数/任务/宏参数和端口连接的默认值
枚举
与Verilog的参数
逻辑
代替reg
和wire
始终锁定
,始终锁定
,始终锁定
代替
Verilog中的单个始终块
unique
和priority
语句代替Verilog
完整
和并行
案例陈述