本文章大多以提问的形式给出问题,并尝试解答,主要目的是为了帮助自己复习sv基础知识,不足之处还请指正,以便共同学习!
二、过程块与子程序
1、task中continue和break的区别?
如如下代码及仿真结果所示:
continue: 表示终止本轮循环,进入下一轮循环
break: 跳出整个循环
2、task与function的区别?
function: 不可内置耗时语句
task: 可内置耗时语句(如wait(), @(posedge clk)等)
一般情况下,任务可以调用函数,但是函数不能调用任务。
3、always与initial的区别?
always:在整个仿真阶段一直存在并执行,通常搭配@(*)或者@(posedge clk) 来使用。
initial:initial块内的语句从上到下只顺序执行一次,通常用于测试平台,不可综合成电路。
有些时候在TB中也会看到always的使用,但是在偏向于软件的测试平台,尽量使用forever来代替always的使用,比如在program中,always是完全禁用的。
4、函数中对参数的描述。
verilog中对于task/funtion的参数描述比较冗杂,SV改进了其描述方式,使其更加简洁。