Vivado Sim错误:“在verilog 95 / 2K模式下不允许根范围声明”

时间:2017-07-07 20:20:57

标签: verilog xilinx hdl vivado

当我在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

1 个答案:

答案 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