我在foo_const.v中定义了一个变量,在foo_const.v中定义如下:
localparam NUM_BITS = 32;
然后我有另一个文件foo_const_slice.v执行此操作:
localparam SLICE_ADDR_BITS = NUM_BITS;
使用vcs命令编译好:
vcs -sverilog foo_const.v foo_const_slice.v
但是当我尝试使用QuestaSim时:
vlog -work work -sv foo_const.v foo_const_slice.v
我收到以下错误消息:
** Error: foo_const_slice.v(46): (vlog-2730) Undefined variable: 'NUM_BITS'.
答案 0 :(得分:2)
问题在于,默认情况下,vlog编译的每个文件都会进入一个单独的编译单元,就像C / C ++和许多其他语言一样。默认情况下,vcs将所有文件连接在一起构成一个编译单元。
虽然有一种方法可以更改默认值(您可以在用户手册中查找),但正确的编码方法是将参数放入包中,然后根据需要导入包。
戴夫