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

2024-05-10

根据1800-2012 规格 http://standards.ieee.org/getieee/1800/download/1800-2012.pdf,

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 转换对我也不起作用,但以下有效

int index_to_del[$];

index_to_del = que.find_first_index(x) with ( x == task_to_del );
que.delete(index_to_del[0]);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何匹配和删除队列中的元素? 的相关文章

  • Setup and Hold time and clocking block in system verilog

    原文链接 http systemverilog123 blogspot com 2016 02 setup and hold time and clocking block html Friday February 5 2016 Setup
  • MCDF实验——Lab3

    Lab3将在Lab2的基础上使用随机约束和环境结构来改进完善实验代码 Lab3中将对generator和initiator之间的数据生成和数据传输的处理进行改进 还将完善何时结束测试 将其主动权交于generator而不再是test组件 在
  • 关于unique case和priority case语法

    SystemVerilog对于case casez casex语句新增了两个特殊的修饰符 unique及priority 其语法规则如下 unique case
  • systemverilog的timescale作用域

    参考文献1 https www chipverify com verilog verilog timescale scope 在数字电路仿真过程中 如果没有模块本身没有指定timescale 则编译器本身可能插入一个默认的timescale
  • 【验证小白】只有SV+modelsim学验证(4)——想办法合理的结束仿真后,准备好了所有代码

    前言 把checker加入到环境中后 环境组件基本就搭建完成了 试着跑了跑出了发现之前的pkt data有一些问题外 还发现仿真结束机制太不合理了 过于简单粗暴 于是把结束仿真的行为梳理一下 做的更合理一些 参考了VMM的思路 做一个漏洞百
  • Interface中input delay&output delay

    最开始在学习SV的时候 碰到interface的使用并没有过多的在意 只是了解clocking block是为了解决竞争问题 然而在后续使用clocking block的过程中 总会碰到一些时序错位的问题 如下 通过简单的例子来表述下clo
  • 【EDA Tools】Spyglass 检查 Verilog 和 SystemVerilog 混合语言及 Lint 检查

    目录 写在前面 读入设计 发现问题并解决 Lint 检查 写在前面 Spyglass可以用于检查混合设计中的语言互操作性和一致性问题 对于设计中包含多种硬件描述语言的情况 Spyglass 能够识别并解析其中的模块及其互连 并对其进行验证
  • 打印存储在 reg 类型变量中的有符号整数值

    如何打印存储在 8 位寄存器中的有符号整数值 声明为 reg 7 0 acc Using display acc d acc 它打印无符号值 正确的语法是什么 display功能 如果您声明reg as signed display将显示减
  • 如何在 Verilog 中将长语句分成行

    例如 我有一个很长的声明 display input data x output data x result x input data output data result 如何在 Verilog 中将其变成单语句和多行 您需要分解引用的字
  • 过渡盖箱未撞击

    我正在从数据总线采样值 因为预期值是不连续的 因此容器没有达到转换覆盖范围 虽然垃圾箱在没有过渡的情况下独立运行 示例 我们想要涵盖地址 W 的值的转换 A W X W Z D 7 0 8 0 covergroup cg with func
  • Verilog HDL 循环语句错误:具有非常量循环条件的循环必须终止

    我对 Verilog 完全陌生 对于我在大学学习的课程 我必须很快了解它的很多内容 我正在摆弄我的 Altera DE2 板和 quartis2 并了解其细节 我正在尝试制作一个通过开关打开和关闭的计数器 到目前为止 计数器根据按键进行计数
  • 使用 svlib 从 SystemVerilog 中的字符串中提取正则表达式匹配

    我是THE的新用户svlibSystemVerilog 环境中的封装 参考Verilab svlib 我有以下示例文本 PARAMATER lollg 1 SPEC ID 1G3HSB 1 我想使用正则表达式来提取1G3HSB从这段文字 我
  • 如何在 Verilog 中定义带参数的模块?

    我想定义一个add有一个参数的模块 但我对新实例的声明进展不顺利 我想定义这个模块的一个实例 module add parameter wd 1 input wire wd 1 0 a b output wire wd 1 0 o assi
  • 简单赋值时不输出期望值

    当我将一些值分配给具有四位的变量时 当我简单地输出该值时 我会得到意想不到的结果 我以前从未见过这个 想知道我是否在语法上做错了什么 module main reg 3 0 x initial begin monitor b x x 001
  • 如何使用参数化接口?

    我正在努力理解界面 起初 它们看起来很简单 但是一旦我开始使用参数化接口 我就无法让各个部分就位 我有这个界面 interface my if parameter H WIDTH 64 parameter L WIDTH 8 logic H
  • Modelsim 对 SV 的支持

    我目前正在使用 modelsim SE 5 8e 它不支持SystemVerilog 我需要使用 SystemVerilog 来设计和验证我的项目 您知道哪个版本的 Modelsim 能够很好地支持 sytemverilog 的设计和验证子
  • 在断言中使用“sequence.triggered”时重置感知

    我有一些断言使用triggered序列的性质 这对于检查 当 X 发生时 Y 一定在过去的某个时间发生 形式的属性很有用 让我们举一个简单的例子 给定三个信号 a b and c c仅允许在以下情况下走高 a3 个周期前为高 并且b2 个周
  • 将枚举转换为逻辑

    考虑以下模块声明 module DFF d q CLK RESET parameter W 2 input W 1 0 d input CLK input RESET output logic W 1 0 q endmodule 当 d 和
  • 合并关联数组

    假设我有两个关联数组 有没有办法使用连接运算符之类的东西来合并它们 我尝试了这个 但它不起作用 module tb initial begin int a int 1 1 2 2 int b int 3 3 4 4 display a a
  • Verilog 中的大括号是什么意思?

    我很难理解 Verilog 中的以下语法 input 15 0 a 16 bit input output 31 0 result 32 bit output assign result 16 a 15 a 15 0 我知道assign语句

随机推荐

  • 从内核空间中的块设备读取

    我正在编写一个内核模块 需要从现有的块设备执行读取 dev 东西 有谁知道有任何其他模块可以执行这些操作 我可以用作参考吗 欢迎任何指点 Linux 2 6 30 如果你真的绝对必须那么使用filp open filp close vfs
  • 使用 versioneer 和 GitHub 更新版本号

    我在用versioneer适用于多个 GitHub 托管的 Python 项目 看来 versioneer 已安装并且工作正常 我可以调用project version 但是我忘记了如何更新版本号的过程 如果有什么东西在setup cfg
  • 解决复合赋值中的转换警告

    在我的代码中有很多variable lt lt 1 句子哪里variable类型为 uint16 t 编译器发出警告说 从 int 转换为 uint16 t 可能会改变其值 Wconversion 我该如何解决 我可以使用长格式的符号 例如
  • Java 相当于不变文化

    我正在将以下 C 代码转换为 Java Java 中是否存在与 NET 中的文化不变概念相当的概念 string upper myString ToUpperInvariant 由于不变文化实际上只是美国文化 我可以在 Java 中做类似的
  • laravel Blade 模板不渲染

    进入 Laravel 后 我尝试使用 Blade 模板 但它没有渲染 我的所有示例都来自 Laravel 文档 UPDATE 所以这是我的master blade php 文件位于资源 gt 视图 gt master blade php y
  • svn:修订版本中不存在路径

    我想在颠覆中创建标签 在命令行上我尝试了以下操作 svn复制http myserver mycompany com 8080 svn SVN Main trunk http myserver mycompany com 8080 svn S
  • Ruby 对象打印为指针

    我正在尝试创建一个类 它有一个带有单个参数的构造函数 当我创建该对象的新实例时 它返回一个指针 class Adder def initialize my num my num my num end end y Adder new 12 p
  • GAE是无状态的吗?有什么影响?

    我曾经被告知 GAE 是无国籍的 我总体上理解无状态的概念 但我可以使用一些指导来从概念上将其应用于 GAE 类型的系统 我专门问这个问题是因为我开发的一个应用程序似乎存在干扰问题 也就是说 当两个或更多人同时使用它时 它就会变得混乱 我正
  • 调整回形针大小以适合矩形框

    我有一个矩形图像 例如 30x800 像素 如何用回形针缩放它以保留 100x100 像素图像的纵横比 并用边框填充空白区域 一个例子 http www imagemagick org Usage thumbnails pad extent
  • 如何从实体框架 6 中的 Auditlog 实体获取 id

    我知道那里有几个类似的帖子 但我找不到任何解决此问题的帖子 我想在实体框架 6 中添加 更改或删除实体 软删除 时添加 某种 AudioLog 我已经覆盖了 SaveChanges 因为我只想为添加 修改或删除的 EntityStates
  • 随机森林修剪

    我有 sklearn 随机森林回归器 它非常重 有 1 6 GB 并且在预测值时工作很长时间 我想把它修剪一下 让它变得更轻 据我所知 决策树和森林没有实施修剪 我无法自己实现它 因为树代码是用 C 编写的 而我不知道 有谁知道解决方案吗
  • LINQ 函数的顺序重要吗?

    基本上 正如问题所述 LINQ 函数的顺序是否重要 表现 显然 结果仍然必须相同 Example myCollection OrderBy item gt item CreatedDate Where item gt item Code g
  • 如何从 Azure webjob 到 Azure webapp 进行通信?

    我正在运行 Azure Web 作业和 Azure Web 应用程序 该作业定期运行 并且 Web 应用程序需要作业的结果 我如何在那里得到结果 我尝试过使用 WCFnetNamedPipeBinding但由于 Azure webapps
  • Vapor - 更新用户属性返回“前提条件失败 - id.exists”

    我尝试将 UUID 添加到用户模型上的 UUID 数组属性 但它返回 前提条件失败 id exists 我正在使用数据库更新而不是创建或保存 使用 PostgresSQL 作为数据库 错误位于 FluentKit gt Model gt M
  • 使用 PRODUCT_NAME 构建 cocoapods 项目的 xcodebuild 失败

    我可以使用以下命令构建我的 Cocoapods 项目 base basename xcworkspace xcworkspace xcodebuild sdk iphonesimulator ios version CONFIGURATIO
  • Lucene,索引已经/外部标记化的标记并定义自己的分析过程

    在使用Lucene的过程中 我有点失望 我不明白或不明白我应该如何继续为任何 Lucene 分析器提供已经可直接索引的东西 或者我应该如何继续创建我自己的分析器 例如 如果我有一个List
  • Matplotlib:生成具有不同和倒置比例的多个双轴

    我想在两个 x 和 y 轴上绘制一个数据系列 以便有 4 个不同的轴 首先是 x 以 eV 为单位的能量 与 y 归一化计数 轴 然后是 x 与能量成反比的波长 与 y 计数 轴 我的代码是 import numpy as np impor
  • 将mysql表限制为一定大小并自动删除最旧的条目[重复]

    这个问题在这里已经有答案了 可能的重复 如何设置MySQL表的最大行数 https stackoverflow com questions 8048001 how can i set a maximum number of rows in
  • XSLT 中是否有一种包含一次?

    I have FileA FileB and FileC FileA包括FileB and FileC FileC包括FileB XSLT 1 0 中是否有一种一次性包含功能 如果你使用
  • 如何匹配和删除队列中的元素?

    根据1800 2012 规格 http standards ieee org getieee 1800 download 1800 2012 pdf Queue delete input int index 删除 SystemVerilog