在 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()
,而无需周围的模块声明。然后可以将该文件包含在另一个模块的范围内,例如在您的测试台中(如您的示例代码中所示)。
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()
,而无需周围的模块声明。然后可以将该文件包含在另一个模块的范围内,例如在您的测试台中(如您的示例代码中所示)。