微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 请问:怎样在顶层top文件中,调用另外一个文件中定义的task

请问:怎样在顶层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要写在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,可以让顶层模块简洁明了,不至于太乱,而且易于更改。请问小编最后是怎么解决这个问题?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top