在verilog中的单独文件中创建任务时出错

时间:2016-03-15 08:04:10

标签: verilog hdl

module tb();

    reg [7:0] a = 1;
    reg [7:0] b;

    initial begin
      AddTask(a, b);
      $display("%d", b);
    end

    task AddTask;

        input [7:0] a;
        output reg[7:0] b;

        begin
          b = a + 1;
        end

    endtask


endmodule

以上代码编译和模拟正确;但我想从模块“tb.v”中删除任务“AddTask”,并将其放在一个单独的模块“AddModule.v”(即在一个单独的文件中)中,以便进行清晰编码。当我这样做时,modelsim可以编译它但不能模拟它并给出错误: " Unresolved reference to 'AddTask' "。虽然我包含AddModule.v,但它无法识别AddTask。你能帮帮我吗,有什么不对?

module tb;

    reg [7:0] a = 1;
    reg [7:0] b;

    `include "AddModule.v"

    initial begin
      AddTask(a, b);
      $display("%d", b);
    end
 endmodule

AddTask在一个单独的文件中:

module AddModule;

    task AddTask;

        input [7:0] a;
        output reg[7:0] b;

        begin
          b = a + 1;
        end

    endtask

endmodule 

1 个答案:

答案 0 :(得分:1)

问题可能是嵌套模块声明。这在Verilog中是不允许的,但是在SystemVerilog中是可能的 尝试在没有模板声明的单独文件中仅声明任务AddModule()。然后,该文件可以包含在另一个模块的范围内,例如,在您的测试平台中(如示例代码中所示)。