在 Verilog 过程接口中,是否可以多次扫描迭代循环?
In Verilog Procedural Interface, is it possible to scan through iteration loop several times?
我们可以通过以下方式使用vpi_scan:
vpiHandle iter = vpi_iterate(property, handle);
if (iter)
while ( entry = vpi_scan(iter) )
/*code*/;
iter 将在 vpi_scan() returns NULL 时被释放。
但是,如果我需要多次扫描循环怎么办?有没有办法告诉 vpi_scan 不要释放迭代器,以便我可以在完成后 vpi_free_object ?
我想我可以使用额外的容器(收集并保留所有条目)来解决问题,但真的需要吗?
编辑:
1. 我不想多次调用 vpi_iterate,因为它可能很昂贵。
2. 假设我使用了一个额外的容器解决方案。有没有办法在不实际扫描循环的情况下找出 vpi_scan 循环中的条目数?这可以使实施更简单。
ut 如果我需要多次扫描循环怎么办? vpi_iterate
returns 一个指向迭代器的初始化指针.每个 vpi_scan
从列表中删除一个元素并释放它。如果 vpi_scan
没有 运行 到最后,你最好使用 vpi_free_object
清理迭代器列表的其余部分。如果您需要再次重新扫描同一个对象,您可以再次调用 vpi_iterate
它会 return 一个您可以重新扫描的新迭代器对象。
有没有办法告诉 vpi_scan 不要释放迭代器,这样我就可以在完成后 vpi_free_object? 不,(1) 是唯一可用于访问和释放迭代器元素的机制。标准中没有其他存在。
我想我可以使用额外的容器(收集并保留所有条目)来解决问题,但真的需要吗? -- 这是如果您想重新扫描数据结构,这是个好主意。从性能的角度来看,它可能会好得多。 Verilog 模拟器通常有一个单独生成的 vpi 数据库,它需要查阅,可能多次为您提供 vpi 访问信息。
有没有办法在不实际扫描整个循环的情况下找出 vpi_scan 循环中的条目数? 不是。没有定义的方法来从迭代器中查询此信息。使用 vpi_handle(vpiUse, iterator)
可能有变通方法,但这取决于基础数据和迭代类型。使用第一次扫描循环创建的链表要容易得多。
您可以获得 LRM 的所有附加信息或 verilog pli 手册。
我们可以通过以下方式使用vpi_scan:
vpiHandle iter = vpi_iterate(property, handle);
if (iter)
while ( entry = vpi_scan(iter) )
/*code*/;
iter 将在 vpi_scan() returns NULL 时被释放。 但是,如果我需要多次扫描循环怎么办?有没有办法告诉 vpi_scan 不要释放迭代器,以便我可以在完成后 vpi_free_object ? 我想我可以使用额外的容器(收集并保留所有条目)来解决问题,但真的需要吗?
编辑: 1. 我不想多次调用 vpi_iterate,因为它可能很昂贵。 2. 假设我使用了一个额外的容器解决方案。有没有办法在不实际扫描循环的情况下找出 vpi_scan 循环中的条目数?这可以使实施更简单。
ut 如果我需要多次扫描循环怎么办?
vpi_iterate
returns 一个指向迭代器的初始化指针.每个vpi_scan
从列表中删除一个元素并释放它。如果vpi_scan
没有 运行 到最后,你最好使用vpi_free_object
清理迭代器列表的其余部分。如果您需要再次重新扫描同一个对象,您可以再次调用vpi_iterate
它会 return 一个您可以重新扫描的新迭代器对象。有没有办法告诉 vpi_scan 不要释放迭代器,这样我就可以在完成后 vpi_free_object? 不,(1) 是唯一可用于访问和释放迭代器元素的机制。标准中没有其他存在。
我想我可以使用额外的容器(收集并保留所有条目)来解决问题,但真的需要吗? -- 这是如果您想重新扫描数据结构,这是个好主意。从性能的角度来看,它可能会好得多。 Verilog 模拟器通常有一个单独生成的 vpi 数据库,它需要查阅,可能多次为您提供 vpi 访问信息。
有没有办法在不实际扫描整个循环的情况下找出 vpi_scan 循环中的条目数? 不是。没有定义的方法来从迭代器中查询此信息。使用
vpi_handle(vpiUse, iterator)
可能有变通方法,但这取决于基础数据和迭代类型。使用第一次扫描循环创建的链表要容易得多。
您可以获得 LRM 的所有附加信息或 verilog pli 手册。