gpt4 book ai didi

system-verilog - 如何匹配和删除队列中的元素?

转载 作者:行者123 更新时间:2023-12-04 06:50:21 40 4
gpt4 key购买 nike

根据 1800-2012 specs ,

Queue::delete( [input int index] ) 

在 SystemVerilog 中删除队列的元素,此外,队列可以执行与解包数组相同的操作,使其可以访问:
Array::find_first_index( )

它返回匹配特定条件的第一个元素的索引。 IE。
find_first_index( x ) with ( x == 3)

现在我想从队列中删除一个保证存在的唯一项目。结合 1 和 1 给了我:
queue.delete(queue.find_first_index( x ) with ( x == obj_to_del ));

尽管说传递的参数必须是整数或整数兼容,但编译器并不理解。我大概可以把两者分开:
int index = queue.find_first_index( x ) with ( x == obj_to_del );
queue.delete( index );

或通过类型转换 find_first_index 强制整数:
queue.delete(int'(queue.find_first_index( x ) with ( x == obj_to_del ))) //Just finished compiling, does not work.

前者对我来说看起来不太优雅,而后者似乎有些勉强,这让我很好奇是否有更合适的方法来实现这一点。 find_first_index 是否可能返回一个大小为 1 且索引位于位置 0 的数组?

编辑:我愚蠢地没有提供一个自包含的例子:我正在做的一个剥离的例子看起来像:
class parent_task;
endclass;

class child_taskA extends parent_task;
endclass;

class child_taskB extends parent_task;
endclass;

class task_collector;

child_taskA A_queue[$];
child_taskB B_queue[$];

function delete_from_queue(parent_task task_to_del);
case (task_to_del.type):
A: A_queue.delete(A_queue.find_first_index( x ) with ( x == task_to_del));
B: B_queue.delete(B_queue.find_first_index( x ) with ( x == task_to_del));
default: $display("This shouldn't happen.");
endfunction
endclass

错误信息,逐字逐句是:
Error-[SV-IQDA] Invalid Queue delete argument
"this.A_queue.find_first_index( iterator ) with ((iterator == task))"
Queue method delete can take optional integer argument. So, argument passed
to it must be either integer or integer assignment compatible.

在调用 delete_from_queue 之前,有一些检查以确保有问题的任务存在。

最佳答案

int cast 对我也不起作用,但以下内容有效

int index_to_del[$];

index_to_del = que.find_first_index(x) with ( x == task_to_del );
que.delete(index_to_del[0]);

关于system-verilog - 如何匹配和删除队列中的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30494550/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com