1. task
task就是任务,就是用于执行特定功能的可重用代码块,使用任务可以把大的程序模块分解成多个小的模块,可以使程序结构更清晰。
2. 使用task写tb文件
一次在写tb文件的时候,编写测试激励,需要重复去读写寄存器,并且读写使能、地址和数据是有时序要求的,那么这个读写过程就可以写成task重复调用。
在使用task的过程中,遇到一些问题,也会记录下来。
2.1 task 定义
先查找了task如何定义,网上查到如下:
task <任务名>; //注意无端口列表
端口及数据类型声明语句;
其它语句;
endtask
但是实际上我按照这样定义时,用modesim仿真会报错,根据提示,改成如下:
task <任务名> (
input 输入端口, //端口定义
output 输出端口
);
begin
end
endtask
这里的端口定义与使用module定义模块的方式是一样的,如task不需要端口则括号里面为空。
注意调用时端口的顺序要与定义的顺序一致。
2.2 task使用
了解了task的定义,现在开始着手编写里面功能。
我需要的task是去读写程序里的寄存器,有延迟要求,以写寄存器为例,需要控制三个信号:写使能Wren,写地址Addr,写数据Data,需要先给Addr和Data赋值,y延迟100ns之后,Wren拉高50ns。
我第一版是这样写的:
task Write_reg(
input [