zoukankan      html  css  js  c++  java
  • 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,防止多个地方调用同一个子程序时串用局部变量(使用共享的静态存储区),它会迫使仿真器使用堆栈区存储局部变量。

  • 相关阅读:
    Windows:生成环境Word,PPT,EXCEL com+组件配置
    Win10 计算机管理 打不开应急办法
    Js:弹窗剧中
    Asp.net跨域配置
    Centos6系列安装nginx
    Win_oracle_exp/expdp备份
    MSSQL:查看某个账号使用得数据库
    MSSQL:查看作业情况
    MSSQL:账号无法删除方案
    MSSQL:删除系统作业计划
  • 原文地址:https://www.cnblogs.com/wt-seu/p/12701200.html
Copyright © 2011-2022 走看看