SV学习笔记—function函数和task任务
目录
1.function/task
1.1 function函数
1.2 task任务及和function的不同点
1.function/task
function和task基本用法一致,但是有几个不同点,在后面阐述。
1.1 function函数
verilog中的函数必须有返回值并且必须被使用,且函数不能调用任务,sv中允许函数调用任务,前提是调用的任务不消耗时间:
仿真结果:
SV中的function函数和C语言中的用法非常相似;
其可以在参数列表中指定输入参数input、引用参数ref(类似于C语言中的指针)(可输入/出),但不可指定输出参数output、输入输出参数inout
可以返回数值或者不返回数值(void),如果调用具有返回值的函数,但没有使用该返回值,应添加void‘()进行转换:void'(some_function());
program example;int A;initial begin$display(“double of %0d is %0d”, 10, double1(10));//20print();//test functiondouble2(10,A);$display(“double of %0d is %0d”, 5, A);//10endfunction int double1(input int a);//SV中不指明输入输出默认是输入;不指明类型,默认是logic类型return 2*a;endfunctionfunction void print();//如果该function不返回值,则声明void,()内可不写形参,函数中也可不写return$display("test function");endfunctionfunction int double2(input int a,output int b);//不可用output返回A=2*a;endfunctionendprogram
仿真结果:
需要强调的是,若function( )中的形参是是input而不是ref类型,则function内部产生的行为不会对外部产生影响:
program example1;int x=3,y=5;initial begin$display("In main,互换前:x=%0d,y=%0d",x,y);swap(x,y);$display("In main,互换后:x=%0d,y=%0d",x,y);endfunction swap(input int x,input int y);int temp;$display("In funtion,互换前:x=%0d,y=%0d",x,y);temp=x;x=y;y=temp;$display("In function,互换后:x=%0d,y=%0d",x,y);endfunction
endprogram
仿真结果如下:
可见在函数内部x,y互换,但由于函数在运行时将实参单向传递给形参,因此函数内部的结果并不会影响外部。
如果将input改成ref类型:
program example2;int x=3,y=5;initial begin$display("In main,互换前:x=%0d,y=%0d",x,y);swap(x,y);$display("In main,互换后:x=%0d,y=%0d",x,y);endfunction swap(ref int x,ref int y);int temp;$display("In funtion,互换前:x=%0d,y=%0d",x,y);temp=x;x=y;y=temp;$display("In function,互换后:x=%0d,y=%0d",x,y);endfunction
endprogram
仿真结果如下:
可见由于ref相当于指针的作用,函数直接作用于x,y的内存,因此修改的外部的值。
1.1.1从函数中返回数组
方式一:
该方法利用函数init返回一个数组的方法,将该数组拷贝到f5中,若数组容量大,可能会导致运行缓慢
方式二:
该方法利用ref方式直接将f5改变,可以提高性能
1.2 task任务及和function的不同点
任务和函数的用法基本一致,但其相比于函数要更加灵活,有以下不同点:
- function可以通过return返回结果;而task无法通过return返回结果,因此只能通过output、inout或者ref的参数来返回
- task内可以置入耗时语句,而function则不能。常见的耗时语句包括@event、 wait event、# delay等
- function和task均可调用function;而task只可被task调用,而不可被function调用(如果task里有耗时语句)
- function如果不用return返回值则要声明void,如果用return返回值则需要声明返回什么类型的值;而task并不用声明返回什么类型的值
task mytask1 (output logic [31:0] x, input logic y);
...
endtask
SV学习笔记—function函数和task任务相关推荐
- Python学习笔记:函数(Function)
Python学习笔记:函数(Function) 一.函数基本概念 函数是Python里组织与重用代码最重要的方法.一般来说,如果你期望多次重复相同或相似的代码,写一个可重用的函数可能是值得的.函数通过 ...
- php中声明一个函数,php学习笔记之 函数声明
/* 函数定义: * 1.函数是一个被命名的 * 2.独立的代码段 * 3.函数执行特定任务 * 4.并可以给调用它的程序返回一个值 * * 函数的优点: * 1.提高程序的重用性 * 2.提高程序的 ...
- MySQL学习笔记—自定义函数
MySQL学习笔记-自定义函数 注释语法: MySQL服务器支持3种注释风格: 从'#'字符从行尾. 从'– '序列到行尾.请注意'– '(双破折号)注释风格要求第2个破折号后面至少跟一个空格符(例如 ...
- 《JavaScript语言精粹》学习笔记(函数(2))
<JavaScript语言精粹>学习笔记(函数(2)) 函数(Functions) 参数(Arguments) 当参数被调用时,会得到一个"免费"的参数数组argume ...
- SV学习笔记—类型转换
1.静态转换 静态转换操作不对转换值进行检查,格式是type'(value): program test;initial begin$display("int'(42+1.1) is&quo ...
- SV学习笔记—结构体及枚举类型及字符串
目录 1.结构体 1.1 压缩结构体 1.2 非压缩结构体 1.3联合结构体 2.枚举类型 3.字符串 1.结构体 Verilog的最大缺陷之一是没有数据结构,SV中可以使用struct语句创建结构, ...
- matlab 调用子函数返回值,matlab学习笔记13_1 函数返回值
一起来学matlab-matlab学习笔记13函数 13_1 函数返回值 觉得有用的话,欢迎一起讨论相互学习~Follow Me 函数返回一个值 返回值不必使用return语句,而是直接将需要返回的变 ...
- Python学习笔记12_函数
Python学习笔记12_函数 文章目录 Python学习笔记12_函数 1.函数定义 2.函数调用 3.函数的参数 3.1.可更改对象和不可更改对象参数 3.2.必需参数(位置参数) 3.3.关键字 ...
- python函数是一段具有特定功能的语句组_Python学习笔记(五)函数和代码复用
本文将为您描述Python学习笔记(五)函数和代码复用,具体完成步骤: 函数能提高应用的模块性,和代码的重复利用率.在很多高级语言中,都可以使用函数实现多种功能.在之前的学习中,相信你已经知道Pyth ...
最新文章
- Deepin系统安装
- todo文件说明已停止工作_番茄ToDo,一款颜值功能兼备的番茄钟。
- Java与C#平台通信 WCF CXF SOAP
- LeetCode_2_两数相加
- python - hash类型操作
- ATEN—第九章OSPF多区域的配置
- Git 克隆远程项目到本地_01
- 计算机知识探索怎么写,计算机基础知识及探索.doc
- Linux 下查看线程信息
- 纪念我2014.1.4 中国银行广东分行面试
- uni-app 获取手机状态栏高度
- 模拟多线程给多用户发送短信
- 软件供应链安全现状分析与对策建议
- 科学计算机功能键介绍ndf,DNF:非常实用的五个小技巧,你不会还不知道吧!-dnf快捷键设置...
- N个元素中选最大最小
- 互联网企业安全建设之路:互联网企业为什么要做安全?
- pyside2安装后打开designer.exe文件提示丢失 MSVCP140.dll的处理方法
- CS0533隐藏继承的抽条成员/CS0534不实现继承的抽象成员
- GSI计算机,DAT或者GSI水准数据用科傻(COSA)软件平差
- Linux进阶_PAM认证机制