module TaskExample;
// 定义一个简单的任务
task adder_task;
input [7:0] a, b;
output [7:0] sum;
begin
sum = a + b;
end
endtask
// 主模块
initial begin
reg [7:0] operand1, operand2;
reg [7:0] result;
// 对操作数赋值
operand1 = 8'b00110011;
operand2 = 8'b11001100;
// 调用任务
adder_task(operand1, operand2, result);
// 输出结果
$display("Result: %b", result);
$stop; // 终止仿真
end
endmodule
在这个例子中,adder_task 是一个简单的任务,接受两个8位宽的输入参数 a 和 b,以及一个8位宽的输出参数 sum。任务的定义使用了 task 和 endtask 关键字。
在主模块中,通过给定的输入参数调用 adder_task 任务,并将结果赋给 result。在仿真中,通过 $display 函数输出结果。
与函数类似,任务是一种用于组织和重用代码的结构。任务可以包含更复杂的逻辑,例如时序逻辑或状态元素,使其更加灵活。需要注意的是,任务中不能包含非阻塞赋值 <= 或时钟触发 @ 等需要进行时序控制的语句。如果需要时序逻辑,可以考虑使用 always 块。
转载请注明出处:http://www.zyzy.cn/article/detail/11036/Verilog