文章来自 微信公众号 “数字芯片实验室”
默认情况下,verilog module中的所有变量都是静态的。 但是, task/function中的变量都可以定义为static或automatic。以下示例组合定义为static或者automatic的task/function和其变量:
task/function和其变量都没有定义为automatic
在Verilog-1995中,task/function和其变量都是隐式静态的。 变量仅分配一次内存,多次调用将覆盖其变量。
static task/function
System Verilog引入了关键字static。 当task/function被明确定义为static,它的变量只分配一次内存,并且多次调用将覆盖其变量。
automatic task/function
从Verilog-2001开始,当task/function定义为automatic,其变量也是隐式automatic的。 因此,在多次调用task/function时,变量每次都会分配内存并不会覆盖。
static task/function和automatic变量
SystemVerilog还允许在静态task/function中使用automatic变量。 那些没有automatic定义的变量会保持隐含的静态。 这在变量需要在task/function调用之前初始化,并且自动分配内存的情况下很有用
automatic task/function和static变量
SystemVerilog还允许automatic task/function中使用静态变量。没有static声明的那些变量将保留隐式automatic。 这在静态变量需要为每次调用更新变量值的场景中很有用
— end —