| ||
3.1过程语句
为过程语句添加标示符。sv循环中添加了continue和break语句。例3.2有必要记一下。
3.2任务、函数以及void函数
Verilog中,任务可以消耗时间;函数不能消耗时间,不能带有如#100的时延语句,如@(posedge clk)、wait(ready)的阻塞语句;函数不能调用任务。
sv允许函数调用任务,只能在fork…join_none语句生成的线程中调用。
不消耗时间的任务最好定义为函数。
3.3任务和函数概述
不带参数的子程序在定义或调用时并不需要带空括号。
在子程序中去掉begin…end
3.4子程序参数
对所有子程序参数的声明都带上类型和方向。
sv中采用ref参数类型将参数传递方式由复制改为引用。const修饰符使子程序无法修改输入数组的值。ref另一个好处:在任务中可以修改变量而且修改结果对调用它的函数随时可见。
带缺省值参数的函数。采用名字进行参数传递,使用形式:function(.参数(参数值))。
3.5子程序的返回
verilog函数执行完后会返回一个值,该值被赋给与函数同名的变量。
return语句用于函数和任务中。verilog只能返回比特、整数或者向量,sv还可以返回数组。实现方式有:1.定义一个数组类型,然后在函数声明中使用该类型;2.通过引用来进行数组参数的传递;3.将数组包装在一个类中,然后返回对象的句柄。
3.6局部数据存储
sv中模块和program中的子程序缺省情况下仍然使用静态存储,若要使用自动存储,则必须在程序语句中加入automatic关键词。(静态存储的话不同线程之间会窜用这些局部变量)
3.7时间值
`timescale,timeunit、timeprecision。$timeformat的4个参数。$time和$realtime的区别。