任务(task):相当于是一个函数,在主程序中不调用该任务,该任务是不会执行的。
任务的写法:
task task_name(
input a; //定义输入端口
output b; //定义输出端口
);
//这里写任务需要执行的操作,该段代码中不能包含always块和initial块。
endtask
任务的调用:虽然任务中不能出现always和initial块,但是调用任务却是在initial和always块中调用的。
调用: task_name(端口1,端口2,。。。。);
task tx_bit( //定义tx_bit任务
input [7:0] data //任务中定义输入端口为8位data数据输入
);
integer i;
for(i=0; i<10; i=i+1) begin
case(i)
0: rx <= 1'b0;
1: rx <= data[0];
2: rx <= data[1];
3: rx <= data[2];
4: rx <= data[3];
5: rx <= data[4];
6: rx <= data[5];
7: rx <= data[6];
8: rx <= data[7];
9: rx <= 1'b1;
default: rx <= 1'b1;
endcase
#560;
end
endtask
task tx_byte(); //定义tx_byte任务
integer i;
for(i=0; i<4; i=i+1) begin
tx_bit(8'h55); //在任务中调用之前的tx_bit任务,并传入数据8‘h55
end
endtask
//经过以上两个任务中的调用,但是实际中任务仍然不会执行,要使任务在程序中执行则必须在initial或always中调用它
//调用任务
always @(posedge clk or negedge rst_n)
tx_byte(); //这样任务被调用,任务所执行的逻辑才能正常执行
原文链接:https://blog.csdn.net/xiaoxiangwei111/article/details/106557778
|