systemverilog-内嵌约束randomize()with{}、soft 约束、local::

2023-12-31 11:18

本文主要是介绍systemverilog-内嵌约束randomize()with{}、soft 约束、local::,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

内嵌约束
SV允许使用 randomize()with{} 来增加额外的约束,这和在类里增加约束是等效的。
当没有soft修饰时,约束发生冲突则报错;当soft修饰时,则以外部约束的优先级高于内部

class chnl_generator extends uvm_component;rand int pkt_id = 0;rand int ch_id = -1;rand int data_nidles = -1;rand int pkt_nidles = -1;rand int data_size = -1;rand int ntrans = 10;constraint cstr{soft ch_id == -1;soft pkt_id == 0;soft data_size == -1;soft data_nidles == -1;soft pkt_nidles == -1;soft ntrans == 10;}场景1:task send_trans();chnl_trans req;req = chnl_trans::type_id::create("req");assert(req.randomize with {local::ch_id >= 0 -> ch_id == local::ch_id; local::pkt_id >= 0 -> pkt_id == local::pkt_id;local::data_nidles >= 0 -> data_nidles == local::data_nidles;local::pkt_nidles >= 0 -> pkt_nidles == local::pkt_nidles;local::data_size >0 -> data.size() == local::data_size; endtask场景2:task send_trans( int pkt_id, int ch_id, int data_nidles, int pkt_nidles, int data_size, int ntrans );chnl_trans req;req = chnl_trans::type_id::create("req");assert(req.randomize with {local::ch_id >= 0 -> ch_id == local::ch_id; local::pkt_id >= 0 -> pkt_id == local::pkt_id;local::data_nidles >= 0 -> data_nidles == local::data_nidles;local::pkt_nidles >= 0 -> pkt_nidles == local::pkt_nidles;local::data_size >0 -> data.size() == local::data_size; endtask
endclass

data表示变量

  • 当task没有传递参数时,local::data表示chnl_generator::data
  • 当task有传递参数时,local::data表示任务传递进来的参数
    local:: 表示“域”,而不是句柄,可以用local::this表示调用randmize() 函数的对象句柄。
    约束体with{约束}中的变量名查找顺序默认是从被随机化对象开始查找。如果调用randomize()函数局部域中也有同名变量,那就需要使用 local:: 来显式声明该变量来源于外部函数,而非被随机化的对象。

参考: https://blog.csdn.net/lbt_dvshare/article/details/107280692

这篇关于systemverilog-内嵌约束randomize()with{}、soft 约束、local::的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/555877

相关文章

(超详细)YOLOV7改进-Soft-NMS(支持多种IoU变种选择)

1.在until/general.py文件最后加上下面代码 2.在general.py里面找到这代码,修改这两个地方 3.之后直接运行即可

brew install opencv@2 时报错 Error: Can't create update lock in /usr/local/var/homebrew/locks!

解决方案,报错里已经说明了: 我的解决方案: sudo chown -R "$USER":admin /usr/local   stackoverflow上的答案 I was able to solve the problem by using chown on the folder: sudo chown -R "$USER":admin /usr/local Also you'

Mysql数据库约束的概述 , 逐渐约束 , 主键自增 , 表关系的概念和外键 ,多表关系约束介绍和使用

约束和表设计 1、DQL查询语句-limit语句(掌握) 目标 能够掌握limit语句的使用 讲解 作用: LIMIT是限制的意思,所以LIMIT`的作用就是限制查询记录的条数。 LIMIT语句格式: select * from 表名 limit offset, row_count;mysql中limit的用法:返回前几条或者中间某几行数据-- 1 表示分页查询的索引,对应数

双层嵌套json字符串(即json对象内嵌json数组)解析为Map

无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点这里可以跳转到教程。 之前我层写过一篇文章,介绍了json与map的相互转化,但当时只涉及到单一的json对象或json数组,对json对象内嵌套这json数组的json字符串无法处理,这篇文章主要解决这个问题。 之前的那篇文章址:http://blo

关于小程序内嵌H5页面交互的问题?

有木有遇到?有木有遇到。 小程序内嵌了H5,然后H5某个按钮,需要打开小程序某个页面进行信息完善或登记,登记后要返回H5页面,而H5页面要动态显示刚才在小程序页面登记的信息。 操作流程是这样: 方案1: 增加类似 刷新,用户操作 -> 读取控制配置 -> 做相应动作。         增加用户操作!! 方案2: 利用websocket通信,通过服务端传递。         增加外

SQL的六种约束——数据库的约束

/*数据库的约束*/ /*1.not null  非空约束     ①强制列不接受空值     ②例:创建表时,name varchar(6) not null,2.unique 唯一性约束     ①约束唯一标识数据库表中的每条记录     ②unique和primary key都为数据提供了唯一性约束     ③primary key 拥有自动定义的Unique约束     ④注意:每个表中只

数据库中为什么不推荐使用外键约束?

引言 其实这个话题是老生常谈,很多人在工作中确实也不会使用外键。包括在阿里的JAVA规范中也有下面这一条: 【强制】不得使用外键与级联,一切外键概念必须在应用层解决。  但是呢,询问他们原因,大多是这么回答的: 每次做DELETE 或者UPDATE都必须考虑外键约束,会导致开发的时候很痛苦,测试数据极为不方便。 坦白说,这么说也是对的。但是呢,不够全面,所以开一文来详细说明。

启动zabbix_agentd报cannot create IPC key for path '/usr/local/zabbix/etc/zabbix_agentd.conf', try to cr

启动service zabbix_agentd start或者/usr/local/sbin/zabbix_agentd -c /usr/local/zabbix/etc/zabbix_agentd.conf (其中-c表示后者是前面的绝对路径),查看日志报错如下: [root@host-192-168-*-*~]# tail -f /tmp/zabbix_agentd.logzabbix_ag

Adversarial Perturbation Constraint对抗扰动约束

对抗扰动约束(Adversarial Perturbation Constraint)是在机器学习和深度学习领域中,一个涉及对抗样本(Adversarial Examples)的概念。对抗样本是指通过对输入数据进行微小、特意设计的扰动,使得模型产生错误预测或分类的输入数据。对抗扰动约束涉及这些扰动的生成和应用时的限制条件。 主要概念 对抗样本:这些是经过精心修改的输入数据,目的是欺骗机器学习

关于html内嵌vuejs使用iframe无法加载vue实例解决方案,使用bootstrap再iframe

描述:html内嵌vuejs,manage页面也采用vue进行iframe跳转,这个时候无法加载vue实例。具体原因不明,解决方案如下:bootstrap做管理页面,再通过iframe加载html内嵌vue的页面 <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Management Dashboard wit