微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > IC验证交流 > 关于sv中ref的使用问题

关于sv中ref的使用问题

时间:10-02 整理:3721RD 点击:
大家好:
在这里遇到了一个问题,望懂得朋友能帮帮忙。
我用sv编写了对应设计的model进行验证,在sv的model中,我需要将taskA中的值传递到taskB中,于是我将所需传递的信号在taskA中定义为ref类型。
当开始仿真时,出现了问题,例如:当taskA中的signal被置为1时,会引起taskB的对应操作,但在taskB中不会对signal进行赋值操作。但是之后即使在taskA中出现会置signal为0的条件时,signal也不会再置为0,而是保持1.这样的model就不正确。

对于ref的const使用,我如果将taskA中的ref改为const ref,则会报 invalid use of const。
我的task是在类中编写的。
由于第一次用sv写model,很多都不理解,不知道上面的描述是否清晰。望赐教!

你是想在taska中调用taskb 然后把taska中的某个参数传入taskb吗?如果是这样的话,在调用taskb时把传入的参数定义成ref就行了

这种情况,可以使用全局变量。

谢谢您的回复
我的需求是 taskA中的参数一旦发生变化,即刻传递到taskB中。编写的方式为:

class abcd();
bit a ;
.....
extern task run();
extern task A(ref a);
extern task B();
endclass

taskabcd::run();
forever
begin
@(negedge itfc.clk);
fork
task A(a);
task B();
join_none
end
endtask
task abcd:: A(ref bit a);
.....
endtask
task abcd:: B();
....
endtask
大致是这么个构架,不知道这样是否正确。
现在的情况是:
1、当task A中的a发生变化后,会一直维持,不再改变,即使其控制条件发生变化,a也不再变化。
2、在task B中不会对a造成改变,只用于当作条件判断。
3、这里需求是实现数据的流水,因此会在每一个时钟周期发送一个激励,流水执行。
4、当在task A内部不将a定义为ref,则a的值会正常变化。
描述的可能不清楚,如果有碰到类似问题的朋友,请求赐教。

谢谢您的回复
我的需求是 taskA中的参数一旦发生变化,即刻传递到taskB中。编写的方式为:

class abcd();
bit a ;
.....
extern task run();
extern task A(ref a);
extern task B();
endclass

taskabcd::run();
forever
begin
@(negedge itfc.clk);
fork
task A(a);
task B();
join_none
end
endtask
task abcd:: A(ref bit a);
.....
endtask
task abcd:: B();
....
endtask
大致是这么个构架,不知道这样是否正确。
现在的情况是:
1、当task A中的a发生变化后,会一直维持,不再改变,即使其控制条件发生变化,a也不再变化。
2、在task B中不会对a造成改变,只用于当作条件判断。
3、这里需求是实现数据的流水,因此会在每一个时钟周期发送一个激励,流水执行。
4、当在task A内部不将a定义为ref,则a的值会正常变化。
描述的可能不清楚,如果有碰到类似问题的朋友,请求赐教。

目前这种写法,taskA和taskB每拍都会被调用一次,如果task中又有延迟,会比较乱,会出现这次taskA还没执行完,下次的taskA又开始执行的情况,出现多驱动。

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

网站地图

Top