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