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

Error when creating a task in separate file in verilog

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

在单独的文件中添加任务:

module AddModule;

    task AddTask;

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

        begin
          b = a + 1;
        end

    endtask

endmodule 

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