SystemVerilog(⼀):任务和函数
⼀、任务和函数
语句:时延语句:# 10 阻塞语句:@、wait
函数:不能使⽤时延语句和阻塞语句, ⼤部分不能调⽤任务。void函数可以被任何任务、函数调⽤。
⼦程序:任务和函数是两种⽤来定义⼦程序的⽅式。若消耗仿真时间,使⽤任务。若不消耗仿真时间,使⽤函数。
sv给任务和函数增加了新的语义特性,对⾼级抽象建模⼗分重要。包括静态和⾃动作⽤域、参数传递、线程、参数化函数。
molloc函数⼆、作⽤域
1、形参和局部变量在Verilog、SV中放在静态存储区。 加automatic使⽤⾃动存储。
2、静态作⽤域:
静态作⽤域变量被绑定到应⽤程序的数据存储区域(在这⾥是指仿真器). 此存储区域将被所有的线程所共
享. ⽽另⼀⽅⾯对于⾃动变量,将映射到栈区存储区, 对同⼀个函数进⾏多次调⽤,⾃动变量将映射到栈中互补相同的区域。
由C/C++编译的程序占⽤内存分为 :静态存储区(静态区、全局区)、堆区、栈区和代码区。
静态存储区:内存在编译(定义)时分配好,并⼀直保持不变,直⾄整个程序结束。存放静态变量、全局变量和常量。
栈区:执⾏函数时,局部变量的存储单元在栈上创建,执⾏结束由编译器⾃动释放。栈内存分配运算内置于处理器的指令集中,效率很⾼,但分配的内存容量有限。存放函数返回值、参数,局部变量。典型的例⼦是函数形参,在函数定义时并不给⾏参分配,只是在函数被调⽤时,才予以分配,调⽤函数完毕⽴即释放。如果⼀个函数被多次调⽤时,则反复地分配、释放形参变量的存储单元。
堆区:程序运⾏时申请任意⼤⼩内存,程序员决定在适当时候释放内存。存放通过new和malloc函数分配得到的空间。
⼀个变量属于那种存储⽅式可以从其⽣存期、作⽤域判断。⽣存期和作⽤域时从时间和空间这两个不同的⾓度来描述变量的特性。
变量的存储⽅式可分为:“静态存储”和“动态存储”两种。 前者对应静态存储区,后者对应堆和栈。
3、⾃动作⽤域(⾃动存储)
因局部变量静态存储常见的两个问题:多次调⽤阻塞时参数覆盖、声明和初始化未分离产⽣初始化漏洞。
SystemVerilog允许变量以⾃动作⽤域绑定。为了在函数/任务中使⽤⾃动绑定功能,函数/任务需要声明为automatic. 另外,所有在program块中声明的函数/任务缺省都是⾃动作⽤域的。如果在⾃动作⽤域⼦程序中仍然需要使⽤静态变量,那么必须使⽤static关键字显式声明此变量。
1、⾃动存储:在所属函数被调⽤时⾃动产⽣,在该函数结束时消亡。⾃动变量是⼀个局部变量,作⽤域为包含它的代码块,代码块是
被包含在花括号中的⼀段代码。⾃动变量通常存储在栈中。
2、静态存储:静态存储是整个程序执⾏期间都存储在的存储⽅式。有两种办法使变量成为静态:⼀种是在函数外定义它;另⼀种是在
声明变量时使⽤static。
3、动态存储:new和delete运算符提供动态存储功能。动态存储内存在堆中。
三、未待完续
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论