• SystemVerilog-任务和函数


    目录

    概述

    0、Verilog中函数不能调用任务,SV中允许哈数调用任务,但只能是由fork……join_none语句生成的线程中。
    Verilog中函数必须有一个函数名代表的返回值,并且返回值必须被使用,例如用到赋值语句。SV中增加了void 函数

    1、一般情况下,不带参数的子程序在定义或调用时不需要带空括号()

    2、相比于Verilog-1995,在子程序中去掉了begin……end, task/endtask、function/endfunction以及足够定义子程序的边界

    3、具有C语言风格的子程序参数,如 task mytask (output logic [31:0] x, input logic y)

    4、缺省的类型和方向是“logic 输入”, 如task mytask(a,b,output bit [15:0] u,v); 参数a,b是1比特宽度的logic输入,u和v是16比特宽度的bit类型输出

    5、具有高级的参数类型,参数的传递方式可以指定为引用而不是复制,这种ref参数类型允许将数组传递给子程序。如function void print_checksum(const ref bit [31:0] a[]).

    向子程序传递数组时应该尽量使用ref以获取最佳性能,否则数组会被复制到堆栈区,这样的操作代价很高;ref参数的第二个好处是在执行并发线程时共享变量信息

    6、可以给参数指定缺省值,如function void print_checksum(const ref bit [31:0] a[],input bit [31:0] low=1, input int high=-1)

    7、可以采用名字进行参数传递。如 task many(input int a=1,b=2,c=3,d=4);调用时可以只指定c,如many(.c(5));

    8、增加了return语句,使子程序的流程控制变得更加方便。

    9、Verilog的子程序只能返回一个简单值,例如比特、整数或是向量,在SV中可以采用引用ref来返回数组

    10、增加了自动存储automatic,防止多个地方调用同一个子程序时串用局部变量(使用共享的静态存储区),它会迫使仿真器使用堆栈区存储局部变量。

  • 相关阅读:
    Spring Boot 使用 Dev-tool 热部署
    Spring Boot 上传文件
    Spring Boot 目录文件结构
    Spring MVC 文件上传
    Spring MVC 混合使用多种视图技术
    XmlViewResolver 和 ResourceBundleViewResolver
    XML 和 Json
    Excel 和 PDF
    04-树5 Root of AVL Tree (25 分)
    04-树4 是否同一棵二叉搜索树 (25 分)
  • 原文地址:https://www.cnblogs.com/wt-seu/p/12701200.html
Copyright © 2020-2023  润新知