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

相关文章

SQL中的外键约束

外键约束用于表示两张表中的指标连接关系。外键约束的作用主要有以下三点: 1.确保子表中的某个字段(外键)只能引用父表中的有效记录2.主表中的列被删除时,子表中的关联列也会被删除3.主表中的列更新时,子表中的关联元素也会被更新 子表中的元素指向主表 以下是一个外键约束的实例展示

poj 3159 (spfa差分约束最短路) poj 1201

poj 3159: 题意: 每次给出b比a多不多于c个糖果,求n最多比1多多少个糖果。 解析: 差分约束。 这个博客讲差分约束讲的比较好: http://www.cnblogs.com/void/archive/2011/08/26/2153928.html 套个spfa。 代码: #include <iostream>#include <cstdio>#i

poj 3169 spfa 差分约束

题意: 给n只牛,这些牛有些关系。 ml个关系:fr 与 to 牛间的距离要小于等于 cost。 md个关系:fr 与 to 牛间的距离要大于等于 cost。 隐含关系: d[ i ] <= d[ i + 1 ] 解析: 用以上关系建图,求1-n间最短路即可。 新学了一种建图的方法。。。。。。 代码: #include <iostream>#include

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

POJ 1364差分约束

给出n个变量,m个约束公式 Sa + Sa+1 + .... + Sa+b < ki or > ki ,叫你判断是否存在着解满足这m组约束公式。 Sa + Sa+1   +   .+ Sa+b =  Sum[a+b] - Sum[a-1]  . 注意加入源点n+1 。 public class Main {public static void main(Strin

创建表时添加约束

查询表中的约束信息: SHOW KEYS FROM 表名; 示例: 创建depts表包含department_id该列为主键自动增长,department_name列不允许重复,location_id列不允许有空值。 create table depts(department_id int primary key auto_increment,department_name varcha

非空约束(Not Null)

修改表添加非空约束 使用DDL语句添加非空约束 ALTER TABLE 表名 MODIFY 列名 类型 NOT NULL; 示例: 向emp表中的salary添加非空约束。 alter table emp modify salary float(8,2) not NULL; 删除非空约束 使用DDL语句删除非空约束 ALTER TABLE 表名 MODIFY 列名 类型 NULL;

机器学习模型中的因果关系:引入单调约束

单调约束是使机器学习模型可行的关键,但它们仍未被广泛使用欢迎来到雲闪世界。 碳ausality 正在迅速成为每个数据科学家工具包中必不可少的组成部分。 这是有充分理由的。 事实上,因果模型在商业中具有很高的价值,因为它们为“假设”情景提供了更可靠的估计,特别是在用于做出影响业务结果的决策时。 在本文中,我将展示如何通过简单的更改(实际上添加一行代码)将传统的 ML 模型(如随机森林、L

Android studio jar包多层嵌套,Add library '__local_aars__:...@jar' to classpath问题

在添加jar包,早app下的build.gradle中的 implementation files('libs/jar包的名字.jar') 修改为 api files('libs/jar包的名字.jar') implementation 单层引用,只引用当前jar包层, api 多层引用,应用当前jar包层,已经jar包引用的jar包层

javaweb-day01-3(XML 的 dtd 约束)

XML 的约束方式有两种:dtd 和 schema  DTD约束: Document Type Definition    文档类型定义、文档类型界定。 入门示例: book.xml : <?xml version="1.0" encoding="gb2312"?><!DOCTYPE 书架 SYSTEM "book.dtd"><书架><书><书名>J