微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > IC验证交流 > 如何在system verilog的task中的队列完成的操作想用function完成?

如何在system verilog的task中的队列完成的操作想用function完成?

时间:10-02 整理:3721RD 点击:
function不能调用task中的队列吗,老是报错,求高手解答?

补充一下问题,我task中需要完成根据控制信息号sot【3:0】的提示位,来把4个DW的data【127:0】中的4个DW数据有选择的存入队列,
例如sot【1110】就把data【127:32】的数据存入到q中。
q.push_back(data[63:32]);
q.push_back(data[95:64]);
q.push_back(data[127:96]);
我的task中用到的这种存入数据的地方比较多,想用function来调用一下,
可是function调用老是报错,队列在function不能调用吗?

按照我的理解,function无法调用task,更无法使用task内部的数据。task可以调用function,但也无法使用内部的数据。唯一可以交互的就是task function的输入输出。
如有错误,请指正。

function可以调用task里面的数据的,我想问的就是fuction如何调用task里面的队列数据。

理解不了,function是一个瞬间完成的任务,task是一个需要若干cycle完成的任务。调用一次function或者task,她执行完就结束了。怎么就能这么调用呢?理解不了。
你为什么不把那个queue作为task的输出呢?上面一个task算出这个输出,下面的function作为输入。

其实我想问
SV里面的function能返回 队列类型的值吗?

用output,不要用返回。另外,队列类型?有这样的数据类型?是数组吗? 多维数组是可以的。

task xx();
...
yy(sot, data, q);
...
endtask
function void yy(bit [127:0] data, bit [3:0] sot, ref bit [31:0] q[$]);
for(int i=0; i<4; i++) begin
if(sot[i]) q.push_back(data[32*i+:32]);
end
endfunction

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

网站地图

Top