微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > IC验证交流 > 关于systemverilog中的一些疑问

关于systemverilog中的一些疑问

时间:10-02 整理:3721RD 点击:
各位大神,在这里想请教一下关于sv中代码描述的一些问题。
因为我只对verilog非常熟,因此对软件编程有的时候不是很理解,关于它的执行顺序有的不明白。在verilog中都是在一些过程块中,添加语句组,语句都是放在begin...end 或者fork...jion中,但是我看sv的代码中很多都是很随意的感觉,并没有都放在语句组中。如:
initial
tie_score=0;
always @(posedge both_ready)
begin

end
function rps_c clone;
clone=new;
clone.rps=this.rps;
endfunction

task rps_randomize();
bit[1:0] temp;
temp=$urandom_range(3);//实现随机激励产生。
$display("tmp is %b",temp);
if (temp=='b00)
temp=2'b01;
case (temp)
'b01:rps=ROCK;
'b10:rps=PAPER;
'b11:rps=SCISSORS;
endcase
endtask
如上,在function或者task中都没有用到语句组,那么在执行的时候按顺序从下向下么。是不是在这里只要没有用到fork...join,就没有像verilog中的并行性这样的概念了?
在initial中,最外围没有begin。end,那其中的语句时并行的,还是从上向下一条一条执行。还有在initial中,能不加语句组吗?(begin...end 或者 fork...join)

在function和task中要是没有用到fork join,那么默认就是beginend 也就是默认是串行执行的,从上倒下一条一条执行,但是要注意一个问题:
就是function中没有仿真时间的概念,也就是在function中执行的语句都是不占用仿真时间的,因此串行和并行没有区别
而在task中是有仿真时间的概念的,
大概就这么多。
另外在initial中,不加语句组的话,默认就是beginend

哦,说的很清楚,非常感谢,明白了!

進來學習學習

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top