很简单的例子:
`ifdef the_define
bind(....);
`endif
尝试bind()
是否定义了the_define
。
为什么?如果它是正确的行为,如何绑定是有条件的?
答案 0 :(得分:0)
似乎按预期工作:
`timescasle 1ns/1ns
module tb;
initial #10 $finish;
endmodule
module binder();
initial $display("%m @ %2t",$time);
final $display("%m @ %2t", $time);
endmodule
`ifdef the_define
bind tb binder ibind();
`endif
使用+define+the_define
结果进行编译:
tb.ibind @ 0
tb.ibind @ 10
编译时没有+define+the_define
结果:
binder @ 0
binder @ 10
没有示例是有道理的,因为binder
现在被认为是顶级模块。一些模拟器可以选择指定单个顶部,将其他顶部模块视为未使用。阻止binder
成为顶级模块的另一种方法是将其移动到库文件/控制器(通常通过-v
/ -y
包含)。从历史上看,我已经看到一些模拟器给出了这种方法的错误,因为它在考虑bind
之前优化了未使用的模块;所以用你自己的工具集进行实验。另一种方法是`ifdef
模块本身;如果你有很多配置,很容易做但不是很灵活。
bind
。它不是模拟运行时选项。
其他可能性是:
the_define
(暂时可用性)