systemverilog-static和automatic

本文介绍了SystemVerilog中static和automatic关键字的应用,它们影响着变量的作用域和方法的行为。static变量在整个程序执行期间保持其值,而automatic变量在每次调用时创建新的内存空间。通过示例展示了static_test模块中,不同修饰符下函数cnt1、cnt2和cnt3的执行结果,揭示了静态和动态方法在变量状态上的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在systemverilog中module,program,functiontask默认都是static的,
可以在module,program,function和task加入automatic用作动态。
class中是automatic的。

  • static 变量为静态的,在整个程序执行过程中都存在,并且无论被实例多少次,在内存中只存在一份,每次实例都是指向这一个地址,共享一个变量

  • automatic是每次实例均产生一个新的内存,互相不共享,是单独、不同的
    static 和 automatic 除了可以修饰类中的成员变量,还可以修饰 function 和 task,被static修饰的方法称为静态方法,被automatic修饰的方法称为动态方法。

  • 如果方法被static修饰,那么其内部所有的声明的变量都是 static

  • 如果方法被修饰为 automatic,那么其内部所有的声明的变量默认都是 automatic

module static_test;
	//声明动态函数
	function automatic int cnt1(input a);
		int cnt = 0;
		cnt += a;
		return cnt;
	endfunction
	//声明静态函数
	function static int cnt2(input a);
		static int cnt = 0;
		cnt += a;
		return cnt;
	endfunction
	//未声明
	function int cnt3(input a);
		int cnt = 0;
		cnt += a;
		return cnt;
	endfunction
endmodule
initial begin
	$display("%0d",cnt1(1)); 输出1
	$display("%0d",cnt1(1)); 输出1
	$display("%0d",cnt2(1)); 输出1
	$display("%0d",cnt2(1)); 输出2
	$display("%0d",cnt3(1)); 输出1
	$display("%0d",cnt3(1)); 输出2
end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值