请问:怎样在顶层top文件中,调用另外一个文件中定义的task
时间:10-02
整理:3721RD
点击:
把所有task放在一个文件中取名为task.v,然后在top模块第一行用`include去包含这个文件.
在task.v中包含有一个名字叫write的任务,在top里面调用,modelsim提示无法查到write
哪位知道是什么问题吗,这样写对吗?
我的task.v文件如下:
//*************************************************************
//********Define multiplier and adder interface****************
//*************************************************************
task write;
input [15:0]in1;
input [15:0]in2;
output [15:0]a;
output [15:0]b;
output latch;
reg [15:0]a;
reg [15:0]b;
reg latch;
begin
a=in1;
b=in2;
latch=1'b1;
end
endtask
需要调用这个任务的模块如下:
`include "task.v"
module top(******);
write;
endmodule
在task.v中包含有一个名字叫write的任务,在top里面调用,modelsim提示无法查到write
哪位知道是什么问题吗,这样写对吗?
我的task.v文件如下:
//*************************************************************
//********Define multiplier and adder interface****************
//*************************************************************
task write;
input [15:0]in1;
input [15:0]in2;
output [15:0]a;
output [15:0]b;
output latch;
reg [15:0]a;
reg [15:0]b;
reg latch;
begin
a=in1;
b=in2;
latch=1'b1;
end
endtask
需要调用这个任务的模块如下:
`include "task.v"
module top(******);
write;
endmodule
task要写在module里。
2楼正解
嗯嗯,就像平时你把task写在哪里,就把include写在哪里。编译的时候遇到include就跳到task.v里编译的。
lz`include "task.v",这句声明,使用task.v的绝对路径看看
module top(******);
write;
`include "task.v"
endmodule
或者是 把task.v例化到top.v中
task u_task();
通过u_task.write调用
任务(task)和函数(function)只是模块中的一部分,不能在module....endmodule定义之外
这不是C语言,无需include,你只需在modelsim中把你的这个task.v加进工程就可以了
两种方法使用task,一是在当前tb直接写个这个task,然后就可以调用了(楼上诸位的意见);
方法二,在你现在的task.v中将task包装成一个module(也就是输入输出),若你这个module name叫a,然后你的tb中先例化module a,然后就可以用a.task使用了。
已经搞定 谢谢各位!
将task.v放到module中include
你好,我也想像你问题描述的一样使用task,可以让顶层模块简洁明了,不至于太乱,而且易于更改。请问小编最后是怎么解决这个问题?
