zoukankan      html  css  js  c++  java
  • 任务与函数

    学习目标

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

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

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

    1.任务与函数的区别

    函数 任务

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

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

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

    任务可以在非零时刻仿真

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

    声明语句

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

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

    变量

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

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

    变量

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

    传递多个值

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

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

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

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

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

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

    2.任务

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

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

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

    没有输入变量。

     2.3自动(可重入)任务

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

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

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

    3.函数

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

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

    子程序只有一个返回值

    至少有一个输入变量

    没有输出或者双向变量

    不含非阻塞赋值语句

  • 相关阅读:
    CSS中position小解
    position
    mac默认安装postgresql, 如何让postgresql可以远程访问
    The data directory was initialized by PostgreSQL version 9.6, which is not compatible with this version 10.0.
    active admin gem error
    psql 无法添加超级用户
    ubuntu 15.04 安装Balsamiq Mockups 3
    Rails html 写public里图片的路径
    rails c 历史命令
    undefined local variable or method `per' for []:ActiveRecord::Relation
  • 原文地址:https://www.cnblogs.com/fxygrzb/p/6066950.html
Copyright © 2011-2022 走看看