谈谈task与function在verilog中的区别以及使用

task:
(1)在模块中声明,实现参数的传递,可以与主模块共用一个仿真时间,也可以自己定义
(2)task没有返回值,执行结果返回调用它的环境中,例如task( input x,
input y, output z)与变量a,b,c为例; 当任务启动时,输入量通过x,y传递至a,b;当任务完成输出量由c传递给z。
(3)当任务调用时,按照input、output以及inout的次序,传递值
(4)任务可以启动任务和函数,也可以没有任何类型的变量
下面示例用task表示一个4位全加器;

module add4(
	input cin,
	input [3:0]a,
	input [3:0]b,
	output reg[4:0] sum,
	output reg cout);
task add(
	input cin,
	input [3:0] a,
	input [3:0] b,
	output [4:0] sum,
	output cout);
begin
	{cout,sum}=a+b+cin;
end
endtask
always@(a or b or cin)
begin
	add(cin,a,b,sum,cout);
end
endmodule

function:

(1)函数也可以由表达式实现。并且在函数标识符的位置上返回一个值。一个函数的定义隐含地定义一个与函数本身有同样名称、同样范围和同样类型定义的内部寄存器变量,这个变量必须在函数体内赋值,函数值可以通过函数名返回。
(2)函数中不可能包含时序控制操作(无 延时控制#,时间控制@

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值