【问题标题】:Verilog: assigning to a module input from within the module itself is okay to do?Verilog:从模块本身内部分配给模块输入可以吗?
【发布时间】:2019-01-03 20:56:35
【问题描述】:

我刚刚遇到了一个情况,其中 Verilog 模块输入是从模块本身分配给的! 我认为这肯定会导致任何 Verilog 模拟器出错,但不,一个(至少)让这个通过! 怎么会这样?! 这不只是引发“X”悲剧,一旦模块外部的某些东西为输入分配了不同的值吗? 我真的错过了什么吗?

以防万一,有问题的模块是我们代工厂提供给我们的行为模拟库的一部分。

【问题讨论】:

  • 根据分配和输入声明的类型,它可能是“x”的可能性或竞争的可能性。 linting 工具应该标记这一点。编译器也应该发出警告。

标签: input module verilog assign


【解决方案1】:

Verilog 语言对基于端口方向的数据流没有任何规则。 SystemVerilog LRM 有一节 23.3.3.1 端口强制,明确描述了输入可以强制输出的地方,反之亦然。但是,综合工具的编码要求会阻止同一信号上的多个驱动程序。因此,如果存在来自 instatiated 模块内部和外部的驱动程序,您得到综合错误。

SystemVerilog 有多种编码风格,可以在模拟流程中捕获信号上的多个驱动程序,因此您不必等到进行综合,或使用单独的 linting 工具。

【讨论】:

  • 我同意 Dave 的观点,但我只是补充一点,您可能会遇到合成错误。我从另一位设计师那里获得了一些遗留代码,他们遇到了这个确切的问题。由于综合块的顶层,它没有出错。直到我运行 LEC 时我才注意到它,即便如此它也不是很明显。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 2021-11-27
  • 1970-01-01
相关资源
最近更新 更多