- STATIC与AUTOMATIC的区别: 这主要是一个生命周期的问题。如果数据变量被声明为automatic,那么在进入该进程/方法之后,automatic变量会被创建,而在离开该进程/方法之后,automatic变量会被销毁。这同C语言的变量及其作用域的使用说明是一致的。而static变量在仿真开始时即会被创建,而在进程/方法执行过程中,自身不会被销毁,且可以被多个进程/方法所共享。 所以,对于automatic与static两种生命周期的数据类型,最直观的区别就是static在仿真过程中的任何时刻都可以被共享,且不会被销毁,直到仿真结束;而automatic变量则同软件的局部变量一样,在它的作用域生命结束时,它也会被销毁回收存储空间。
-
SV规定:在module、program、interface、task和function之外声明的变量拥有静态的生命周期,即存在于整个仿真阶段,这同C定义的静态变量一样。
在module、interface和program内部声明,且在task、process或者function外部声明的变量也是static变量,且作用域在该块中。
在module、program和interface中定义的task、function默认都是static类型。
在过程块中(task、function、process)定义的变量均跟随它的作用域,即过程块的类型,如果过程块为static,则它们也默认为static,反之亦然。这些变量也可以由用户显式声明为automatic或者static。
为了使得在过程块中声明的变量有统一默认的生命周期,可以在定义module、interface、package或者program时,通过限定词automatic或者static来区分。对于上述程序块默认的生命周期类型为static。