gpt4 book ai didi

c - 在 Verilog 过程接口(interface)中,是否可以多次扫描迭代循环?

转载 作者:太空宇宙 更新时间:2023-11-04 07:51:45 26 4
gpt4 key购买 nike

我们可以通过以下方式使用vpi_scan:

vpiHandle iter = vpi_iterate(property, handle);
if (iter)
while ( entry = vpi_scan(iter) )
/*code*/;

当 vpi_scan() 返回 NULL 时,iter 将被释放。但是,如果我需要多次扫描循环怎么办?有没有办法告诉 vpi_scan 不要释放迭代器,这样我就可以在完成后使用 vpi_free_object?我想我可以使用额外的容器(收集并保留所有条目)来解决问题,但真的需要吗?

编辑:1. 我不想多次调用 vpi_iterate,因为它可能很昂贵。2. 假设我使用了一个额外的容器解决方案。有没有办法在不实际扫描循环的情况下找出 vpi_scan 循环中的条目数?这可以使实现更简单。

最佳答案

  1. 如果我需要多次扫描循环怎么办? vpi_iterate 返回指向迭代器的初始化指针。每个 vpi_scan 都会从列表中删除一个元素并将其释放。如果 vpi_scan 没有运行到最后,你最好使用 vpi_free_object 来清理迭代器列表的其余部分。如果您需要再次重新扫描同一个对象,您可以再次调用 vpi_iterate,它将返回一个您可以重新扫描的新迭代器对象。

  2. 有没有办法告诉 vpi_scan 不要释放迭代器,这样我可以在完成后释放 vpi_free_object? 不,(1) 是唯一可以使用的机制访问和释放迭代器元素。标准中没有其他存在。

  3. 我认为我可以使用额外的容器(收集并保留所有条目)来解决问题,但真的需要吗? -- 如果您想这样做,这是个好主意重新扫描您的数据结构。从性能的角度来看,它可能会好得多。 Verilog 模拟器通常有一个单独生成的 vpi 数据库,它需要查阅,可能多次为您提供 vpi 访问信息。

  4. 有没有办法在不实际扫描整个循环的情况下找出 vpi_scan 循环中的条目数? 不是。没有定义的方法来从迭代器中查询此信息。使用 vpi_handle(vpiUse, iterator) 可能有变通方法,但这取决于基础数据和迭代类型。使用第一个扫描循环创建的链表要容易得多。

您可以获得有关 LRM 或 verilog pli 手册的所有其他信息。

关于c - 在 Verilog 过程接口(interface)中,是否可以多次扫描迭代循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53383628/

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