第八章 任务与函数

前言

  • 在行为级设计中,设计者需要在程序的多个不同地方实现同样的功能,这意味着有必要把这些公共的部分提取出来,将其组成子程序,在需要的地方调用这些子程序,以免重复编码。
  • Verilog提供的任务和函数可以将较大的行为级计划分为较小的代码段,设计者将在多个地方使用的相同代码提取出来,编写成任务和函数,使得代码简洁、易懂。
  • 任务与函数和命名块一样,也包含在设计层次中,可以通过层次名进行访问。

任务和函数的区别

  • 任务和函数的目的不同。
  • 如下表
    在这里插入图片描述
  • 任务和函数都必须在模块内进行定义,其作用范围仅局限于定义它们的模块。
  • 任务用于代替普通的Verilog代码,其中可以包括延迟、时序、事件等语法结构,可以具有多个输出变量。
  • 函数用于代替纯组合逻辑的Verilog代码,在仿真0时刻开始执行,只能有一个输出。
  • 可以在任务和函数中声明局部变量,如寄存器、时间、整数、实数和事件,但是不能声明线网类型的变量。
  • 任务和函数中只能使用行为级语句,但是不能包括initialalways块。

任务

基本概念

  • 关键字:task...endtask

  • 子程序满足如下任一条件,则必须使用任务而不能用函数:

    • 子程序中包含延迟、时序或事件控制结构;
    • 没有输出或输出变量数目大于1;
    • 没有输入变量;
  • 任务的定义

    task <任务名>;
      <端口及数据类型声明语句>
      <语句1>
      ...
      <语句n>
    endtask
    
  • 任务中的端口声明:input 输入、output输出、inout输出/输出,类似模块中声明端口,但是本质上有区别。模块的端口用来和外部信号相连接,任务的I/O变量则用来向任务中传入或从任务中传出变量。

  • 举例,如对两个16位数进行按位与,按位或,按位异或。

    //模块中启动任务
    bitwise_oper(AB_AND, AB_OR, AB_XOR, A, B);
    
    //定义任务
    task bitwise_oper
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值