• 任务与函数


    学习目标

    理解任务和函数之间的区别

    理解定义任务所需的条件,学会任务的声明和调用

    理解定义函数所需的条件,学会函数的声明和调用

    1.任务与函数的区别

    函数 任务

    函数能调用另一个函数,但不能调用另一个任务

    任务能调用另一个任务,也能调用另一个函数

    函数总是在仿真时刻0就开始执行

    任务可以在非零时刻仿真

    函数一定不能包含任何延迟、事件或者时序控制

    声明语句

    任务可以包含延迟、事件或者时序控制声明语句

    函数至少有一个输入变量,函数可以有多个输入

    变量

    任务可以没有或者有多个输入、输出和双向变量

    函数只能返回一个值,函数不能有输出或者双向

    变量

    任务不返回任何值,任何可以通过输出或者双向变量

    传递多个值

    任务和函数都必须在模块内进行定义,起作用范围局限于定义他们的模块。

    任务可以代替普通的Verilog代码,其中可以包括延迟、时序、时间等语法结构,并且可以具有多个输出变量。

    函数用于代替表示春组合逻辑的Verilog代码,在仿真时刻0就开始执行,只能有一个输出。因此,函数一般用于完成各类转换和常用计算

    任务可以具有输入、输出和输入/输出(双向)变量,而函数只有输入变量。

    可以在任务和函数中声明局部变量,如寄存器、时间、整数、实数和事件,但是不能声明线网类型的变量。

    在任务和函数中只能使用行为级语句,但是不能包含always和initial块,。设计者可以在always块、initial块以及其他的任务和函数中调用任务和函数。

    2.任务

    任务使用task和endtask进行声明。如果子程序满足下面任意一个条件,则必须使用任务而不能使用函数。

    子程序中包含有延迟、时序或者事件控制结构。

    没有输出或者输出变量的的数目大于1.

    没有输入变量。

     2.3自动(可重入)任务

    任务在本质上是静态的,任务中的所有声明项的地址空间是静态分配的,同事并发执行的多个任务共享这些存储区。

    因此,如果这个任务在模块中的两个地方被同时调用,则这两个任务调用将对同一块地址空间进行操作。操作的结果很有可能是错误的。

    为了避免这一问题,Verilog通过在task关键字前面添加automatic关键字,是任务成为可重入的,这样声明的任务也称为自动任务。

    3.函数

    Verilog使用关键字function和endfunction来进行函数声明。对于一个子程序来说,如果下面的所有条件全部成立,则可以使用函数来完成

    在子程序内不含有延迟、时序或者控制结构

    子程序只有一个返回值

    至少有一个输入变量

    没有输出或者双向变量

    不含非阻塞赋值语句

  • 相关阅读:
    一周自学动态站点设计
    【甘道夫】Apache Hadoop 2.5.0-cdh5.2.0 HDFS Quotas 配额控制
    linux系统管理命令--系统测试工具
    Atitit.异步编程 java .net php python js 对照
    项目开发经常使用PHP功能
    它们的定义app.config中间section节点和在执行中使用
    Android 它们的定义ListView实现底部和页下拉刷新刷新的顶
    vs2012连接sql2008(错误类型:Could not load file or assembly)
    管理不,因为你不是说经理
    java编程接口(5) ------ button和button组
  • 原文地址:https://www.cnblogs.com/fxygrzb/p/6066950.html
Copyright © 2020-2023  润新知