写了一个function,借此谈谈 对SV 子程序的理解。

//函数
function automatic void  check_read32 (ref int unsigned rdata ,bit   [31:0] check_value [],input string check_name);if(rdata != check_value[0] ) begin$display("%s compare failed , read data %0h may not expected!", check_name, rdata);end
endfunction//调用此函数的program
program  hello_sv; //module  hello_sv;
initial beginbit [31:0] check_value [];int unsigned rdata;rdata= 'h89ABCDEF ; check_value = '{'h89ABCDEF,'ha0a02020};check_read32(rdata,check_value,"rdata32('h4000_F000, ta)");  end
endprogram :hello_sv  //endmodule 
  • verilog 程序块的封装,常以module封装各个模块。但是使用module 保存
    测试平台常会引起驱动和采样的问题。SV引入program块,这个program会将时间片化为不同的区域,将TB的事件和设计的事件分开。
  • 数据定义,对于int byte等,默认是有符号型,注意合理定义为无符号型。(个人认为,如果用不到负数,定义为有无符号型都无所谓,最好使用无符号型吧吗,绿书P21说带符号为的变量随机化时会出现意想不到的坏结果)。这里是因为动态数据定义为无符号型。
  • 函数的调用时,这里传入的参数和定义时的变量名一样,实际上当然也可以不一样,传入的时候位置对应整齐就好。
  • 函数定义时,function automatic void check_read32().
    • automatic 类型表示自动存储,当这个函数在不同地方同时使用时,不会导致这些函数中的局部变量被互相篡改,调用。在一个类中默认所以方法为automatic类型。
    • void 是无返回值,若有返回值,这这里的void要换成返回值的类型
    • 后面就是名函数名字了
    • 函数的变量,可以在括号中直接指定,也可以在后面指定。
  • ref类型有两个优点
    • 把数组传递给子程序(当然,不带ref也可向子程序中传递数组,当时这是不带ref,数组先会被copy到堆栈,如果数据较大,就很耗费资源了)。
    • 在task里,ref变量可被修改,并且其他对其调用的函数里,可见。

SV function相关推荐

  1. SV学习(2)——过程语句、函数和任务、变量声明周期

    SV学习(2)--过程语句.函数和任务 1. 过程语句 1.1. 硬件过程块 1.2. 赋值语句 1.3. 控制语句 1.3.1. for循环 1.3.2. while循循环 1.3.3. do-wh ...

  2. 1.11. java 脚本引擎

    什么是脚本引擎,脚本引擎是指在程序运行期间嵌入另一种脚本语言,并与其交互,产生最终运行结果 脚本引擎存在的意义是什么?脚本引擎可以改变编译语言的内部运行逻辑,弥补编译语言的不足,使编译语言具备动态语言 ...

  3. Vim/Neovim ALE system verilog使用xvlog时出现“ ‘logic‘ is uan unknown type “ 等

    ALE识别.sv文件后的从xvlog.vim模板获取命令并执行,而xvlog编译system verilog需要添加-sv参数 修改xvlog.vim即可 但是带来的问题是verilog和sv假如使用 ...

  4. C++_Primer_学习笔记_第十九章(特殊工具和技术)

    第十九章(特殊工具与技术) /1.控制内存分配 1).不能直接应用标准内存管理机制. 某一些应用程序需要自定义内存分配的的细节,比如使用关键字new将对象放置在特定的内存空间中. 为了实现这一个目的, ...

  5. 圆环百分比 echart数据图表实现圆环百分比

    现在要实现上图中的功能,圆环的四个颜色(也可以是更多颜色,可以自己改)根据四块所占比不同动态变化,并且文字也会跟着它对应的块变化位置. 只需要两步: 1.引入echarts.min.js 需要下载这个 ...

  6. SV学习笔记—function函数和task任务

    目录 1.function/task 1.1 function函数 1.2 task任务及和function的不同点 1.function/task function和task基本用法一致,但是有几个 ...

  7. sv常用的系统function/task(一)

    一.仿真控制系统task 1.$finish(n) n--0,1,2 0:直接结束仿真,不打印任何信息 1:打印结束行号,以及结束时间 2:打印结束行号,以及结束时间,以及仿真的内存消耗 以及cpu运 ...

  8. sv中virtual的使用(function/task部分)

    virtual function/task的使用: class a;virtual function void a1(); $display("123"); endfunction ...

  9. sv利用function实现一串字符去掉所有字符0的功能(2)

    还是回到上次说的,我的思路是,通过去除首位字符0,中间部分0采用递增扫描截取的方式,碰到一个0,截取拼接字符后,然后重新扫描(如果字符串数量大,中间位0多,可能计算机耗时会较长). 我的代码如下: 运 ...

最新文章

  1. /etc/passwd /etc/shadow 详解
  2. 持久层是什么意思_软件项目实训及课程设计指导—如何在数据持久层中应用DAO模式...
  3. C++静态库与动态库
  4. Flink SQL 1.11 新功能与最佳实践
  5. java必会的英语单词
  6. 兴业证券:主动偏股型基金评价体系
  7. C# 常用路径获取方式
  8. javplayer 使用教程_童装裁剪之连衣裙打版教程 有图纸
  9. matlab语法归纳
  10. matplotlib中堆积图、分块图、气泡图的绘制
  11. 学习OpenCV 4(一)
  12. iOS-QQ自动聊天机器人
  13. VSLAM基础(七)————光束平差法Bundle Adjustment
  14. 因果AI热度背后的打靶迷局
  15. idea双击无反应。打不开解决办法
  16. python扫雷游戏设计_Python 扫雷游戏 完整源代码+图片素材
  17. Python我的世界小游戏源代码
  18. 阿里云配置SSH密钥连接
  19. php常用模块,PEAR:常用模块-PHP教程,PHP应用
  20. C# 类实现接口(Interface) 多态 多继承

热门文章

  1. python中计时方法
  2. 后台架构设计—数据存储层
  3. Vue中一些需要注意的点(采坑)
  4. hive和hadoop的浅显理解
  5. 三个故事重新认识roe风和争势
  6. 服务器看门狗芯片电路图,看门狗电路简介(低成本)
  7. matlab之判别分析
  8. Linux:安装npm
  9. [Java]剑指offer51-55题_day11
  10. java思想编程kindle版电子书下载,讲的太清楚了