当前位置: 首页 > article >正文

【IC验证】systemverilog_函数和任务

函数和任务

  • 一.作用
  • 二.任务(function)和函数(task)的区别
  • 三.注意点
  • 四.函数(function)
    • 1.`语法`
    • 2.`注意点`
    • 3.例子
      • (1)乘法函数
  • 五.任务(task)
    • 1.`语法`
    • 2.`注意点`
    • 3.例子

一.作用

提高代码的复用性、简洁性,易于代码的阅读和维护。

二.任务(function)和函数(task)的区别

(1)function不可以执行需要消耗仿真时间的语句,task可以执行需要消耗仿真时间的语句(如**#10**,@);
(2)function有返回值且只能返回一个单一数值,task没有返回值;
(3)function只能调用function,task既可以调用function也可以调用task;
(4)function的返回值可以作为一个表达式中的操作数;

三.注意点

1.函数和任务可以定义在模块中,也可以定义在类中;
2.函数和任务可以有一个或者多个输入或输出,也可以没有输入和输出;

四.函数(function)

1.语法

(1)函数的定义

function 返回值类型 函数名(参数列表)//函数主体
endfunction

(2)函数的调用

函数名作为返回值变量(参数);

2.注意点

(1)参数列表需要,声明参数的方向(input,output,inout,ref),和参数的类型(logic,bit,int),默认是input logic类型;
(2)参数可以指定默认值;
(3)函数可以没有返回值,没有返回值时,返回值类型为void;
(4)当函数具有返回值时,但是在调用函数时不适用返回值,建议添加void’(函数名());

3.例子

(1)乘法函数

代码:

module test_ft_tb;
    logic [7:0]     data1;
    logic [7:0]     data2;
    logic [15:0]    out;
    function logic [15:0] mult(input logic [7:0] a,input logic [7:0] b);
        mult = a*b;
    endfunction
    initial begin
        data1 = 0;
        data2 = 0;
        out = mult(data1,data2);
        $display("out is %d",out);
        data1 = 10;
        data2 = 2;
        out = mult(data1,data2);
        $display("out is %d",out);
    end
endmodule

结果:
在这里插入图片描述

五.任务(task)

1.语法

(1)任务的定义:

task 任务名(参数列表);
	//任务主体
endtask

(2)任务的调用

任务名(参数);

2.注意点

(1)参数列表需要,声明参数的方向(input,output,inout,ref),和参数的类型(logic,bit,int),默认是input logic类型;
(2)参数可以指定默认值(参数如果没有给默认值,那就必须传参);
(3)task没有返回值,也不需要void;
(4)任务需要执行完之后,才会输出,除非是ref类型;
(5)task中可以用return,执行到return会提前结束task;
(6)task执行完以后才会更新输出;

3.例子

代码:

module test_ft_tb;
	task mt(input logic [7:0] a,input logic [7:0] b,output logic [15:0] c);
		#5;		
		c = a*b;
		#5; 	
	endtask 

	logic [7:0] 	in1 = 3;
	logic [7:0] 	in2 = 4;	
	logic [15:0]	out = 0;
	initial begin
		repeat(15)begin
			#1;
			$display("@time %t: out is %d",$time,out);
		end		
	end
	initial begin
		mt(in1,in2,out);
		$display("@time %t: OUT is %d",$time,out);	
	end
    
endmodule

结果:
在这里插入图片描述


http://www.kler.cn/a/420865.html

相关文章:

  • Java虚拟机(JVM)中的元空间(Metaspace)一些关键点的总结
  • mac启动jmeter
  • python源码实例游戏开发小程序办公自动化网络爬虫项目开发源码(250+个项目、26.6GB)
  • POI和easyExcel详解
  • CSS学习记录03
  • Burp Suite 实战指南:Proxy 捕获与修改流量、HTTP History 筛选与分析
  • 杨辉三角形-多语言
  • 气象数据下载服务平台(二)
  • 超文本协议之HTML(泷羽sec)
  • Mysql读写分离分库分表
  • MySQL中的幻读问题
  • Linx下自动化之路:JDK1.8 安装包一键安装脚本实现离线极速部署
  • 高校数字化运营平台解决方案:构建统一的服务大厅、业务平台、办公平台,助力打造智慧校园
  • alpaca 和 sharegpt微调数据格式区别
  • 「Mac畅玩鸿蒙与硬件41」UI互动应用篇18 - 多滑块联动控制器
  • 汽车用聚芳醚砜行业全面而深入的分析
  • WPF从本地文件加载界面
  • Modbus rtu转profibusDP接电机保护器快速配置案例
  • 【代码随想录|贪心算法03】
  • 【Trick】adb指令运行时出现 Error: Activity class {xxx} does not exist.
  • 学习笔记048——Java字节流
  • Kotlin 协程的异常处理
  • 蓝象智联携手西电发布GaiaGPT,夯实数据安全底座
  • python(18) : flask_sqlalchemy 配置sqlserver数据库对象
  • 设计模式之 建造者模式 C# 范例
  • 细说STM32单片机用定时器触发DAC输出三角波并通过串口观察波形的方法