timescale
或任何其他指令在 Verilog (2001) 中是否是强制性的,或者它的使用是否属于约定或风格问题?例如,我通常使用 default_nettype none
在我的整个实现过程中强制执行显式网络声明。然而,Verilog 并不要求我这样做。
当涉及到timescale
时,我显然将其置于我的 HDL 测试平台的顶部。但为什么要在 IP 的每个模块中使用它呢?如果定义不一致,这是否会导致更多问题而不是阻止它们?
最佳答案
一般而言,Verilog 编译器指令不是强制性的。
对于 timescale
,请参阅 IEEE Std 1800-2017,第 22.7 节 `timescale:
If there is no timescale specified or it has been reset by a `resetall directive, the default time unit and precision are tool-specific.
这些指令在范围内是全局的,这意味着当编译器遇到一个指令时,它对所有随后编译的代码仍然有效(直到遇到另一个指令)。因此,无需向所有代码添加 timescale
指令。
但是,在实践中,如果编译的第一个模块(或多个模块)没有 timescale
指令但后续模块有,编译器会产生错误。这些模拟器还提供命令行选项来设置默认时间刻度以避免此错误。
关于verilog - Verilog 指令是否是强制性的,例如时间尺度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69470020/