Ошибка при создании задачи в отдельном файле в 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

Приведенный выше код скомпилирован и смоделирован правильно; Но я хочу вырезать задачу "AddTask" из модуля "tb.v" и поместить ее в отдельный модуль "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 ответ

Решение

Возможно, проблема в декларации вложенного модуля. Это не разрешено в Verilog, однако возможно в SystemVerilog.
Попробуйте объявить только задачу AddModule() в отдельном файле без объявления модуля. Этот файл затем может быть включен в область действия другого модуля, например, в ваш тестовый стенд (как в вашем примере кода).

Другие вопросы по тегам