函数和任务 函数function不会消耗仿真时间,而任务task则可能会消耗仿真时间。 函数无法调用任务,而任务可以调用函数。 一个函数只能返回一个数值,而任务则不能返回数值 函数可以作为一个表达式中的操作数,而该操作数的值即函数的返回值。
参数传递 input参数方向在方法调用时,属于值传递。即传递的过程中,外部变量的值会经过拷贝,赋值给输入参数。 output、inout也会在传入或者传出的时候发生值传递的过程。 值传递的过程只发生在方法的调用时和返回时。 ref参数在传递时不会发生值拷贝,而是将变量指针传递到方法中,在方法内部对该参数的操作将会 同时影响外部变量。 如果为了避免外部传入的ref参数会被方法修改,则可以添加const修饰符,来表示变量时只读变量。
参数默认值 sv允许方法声明输入参数时指定参数的默认值。 带有参数默认值的方法被调用时,如果这些参数没有被传递值,那么编译器将会为这些参数传入对应的默认值。 SV允许类似于模块例化,可由参数位置在调用方法时传递参数,也可以由参数名字映射的方式来传递参数。
SV允许不带ref进行数组参数的传递,这是数组会被复制到堆栈区里。这种操作的代价很高,除非是对特别小的数组。 ref参数的第二个好处实在任务里可以修改变量并且修改结果对调用它的函数随时可见。
在SV中可以为参数指定一个缺省值,如果在调用时不指明参数,则使用缺省值。 在编写子程序代码时最容易犯的错误就是,往往会忘记,在缺省的情况下参数的类型是与其前一个参数相同的,而第一个参数 的缺省类型的是单比特输入。
对简单的int变量使用ref通常并无必要,但编译器不会对此作出任何反应,连警告都没有,所以你不会意识到正在使用一个错误的 方向类型。如果在子程序中使用了非缺省输入类型的参数,应该明确指明所有参数的方向。
|