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

标签 verilog directive

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/

相关文章:

testing - 我在实现 Verilog Test Fixture 来模拟我的设计时遇到问题

verilog - Verilog 中是否有 "? 1 : 0"的原因?

angularjs - 在 Angular.JS 中找不到指令所需的 Controller

html - 在 Internet Explorer 中的 angularjs 中未访问范围变量

angularjs - 使用 TypeScript 和 $inject 机制定义 AngularJS 指令

javascript - 从另一个指令获取指令的属性?

verilog - 港口申报无方向错误

verilog - 处理 SystemVerilog 包中的参数化

在单个时钟周期内执行的verilog中的余数运算算法

使用模板 URL 测试指令