|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
在编写testbench时遇到一个问题,代码如下:
task pwm_output_1;
output high_side_pwm_in_o;
output low_side_pwm_in_o;
begin
#5000
high_side_pwm_in_o = 1;
low_side_pwm_in_o =0;
end
endtask
task pwm_output_2;
output high_side_pwm_in_o;
output low_side_pwm_in_o;
begin
#3000
high_side_pwm_in_o = 0;
low_side_pwm_in_o =1;
end
endtask
always @(posedge clk_t) begin
pwm_output_2 (high_side_pwm_in,low_side_pwm_in);
pwm_output_1 (high_side_pwm_in,low_side_pwm_in);
end
和下面这种情况比较
always @(posedge clk_t) begin
pwm_output_1 (high_side_pwm_in,low_side_pwm_in);
pwm_output_2 (high_side_pwm_in,low_side_pwm_in);
end
这两种情况只是把两个task在always 模块里的顺序改变了一下,得到了不同的波形,前面一种是先执行pwm_output_2后执行pwm_output_1,而后面一种是先执行pwm_output_1,后执行pwm_output_2,二者出来的波形都是方波,只是波形高低电平翻转的时刻不一样。
我的问题是:always语句是并行执行的,但为何在这里的仿真结果是顺序执行的?难道是因为调用task必须顺序调用? |
|