Verilog 指令是否是强制性的,例如时间尺度?

Are Verilog directives mandatory, e.g. timescale?

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 指令但后续模块有,编译器会产生错误。这些模拟器还提供命令行选项来设置默认时间刻度以避免此错误。