当我在Xilinx Vivado 2016.4中模拟我的顶级模块时,我收到了一个特殊的错误:
ERROR: [VRFC 10-1342] root scope declaration is not allowed in verilog 95/2K mode [<...>/header.vh]
我使用内置的 Vivado模拟器并指定了Verilog 2001。我的 header.vh 如下所示:
`ifndef _header_vh_
`define _header_vh_
function integer clog2;
input integer value;
begin
value = value - 1;
for (clog2 = 0; value > 0; clog2 = clog2 + 1)
value = value >> 1;
end
endfunction
`endif
答案 0 :(得分:2)
当函数clog2
的范围有效地设置为root(因为它未在模块中声明)时,会出现此错误; Verilog 2001中不允许使用此范围声明,但是在更高版本中(例如SystemVerilog)。切换到SystemVerilog可以解决问题(但不推荐),但为函数引入模块包装就足够了。
`ifndef _header_vh_
`define _header_vh_
module header();
function integer clog2;
input integer value;
begin
value = value - 1;
for (clog2 = 0; value > 0; clog2 = clog2 + 1)
value = value >> 1;
end
endfunction
endmodule
`endif