gpt4 book ai didi

system-verilog - 在 SystemVerilog 中包含守卫

转载 作者:行者123 更新时间:2023-12-02 16:46:31 25 4
gpt4 key购买 nike

我有一个包含在 include guards 中的 verilog 头文件。它包含一些我用来在其他 rtl 文件中定义局部参数的函数。此包含文件在模块描述(模块(端口实例化)`include....(body)endmodule)中被引用。我一直认为,当 verilog 编译每个模块时,包含的范围将是该模块的本地范围,并且它只会在模块内强制执行保护。我现在一直在编译项目中的所有模块,这似乎是第二次在另一个模块中引用包含,守卫仍然存在。这与预处理器对 systemverilog 的行为方式有关吗?

最佳答案

当你说守卫时,我假设你的意思是这样的:

`ifndef MY_GUARD
`define MY_GUARD
// ... definitions for parameters, functions, etc. ...
`endif // MY_GUARD

`ifdef`ifndef`define 和其他相关的` 操作依赖于编译顺序.宏定义从被定义的那一刻起就存在于全局空间中,直到它们未被定义。在上面的示例中,一旦 MY_GUARD 被定义,任何 `ifndef MY_GUARD 将评估为 false 直到它未定义(`undef MY_GUARD)。

如果你想在多个模块中包含相同的文件,那么移除守卫。


因为您使用的是 SystemVerilog。考虑将公共(public)代码放在一个包中,然后将其导入每个模块。

关于system-verilog - 在 SystemVerilog 中包含守卫,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60343622/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com