【IC验证】随机约束

1.约束

(1)注意
一般随机约束只能在类中使用;

(2)实现步骤
在定义变量时,用rand/randc关键字进行修饰
定义约束;
创建并实例化类后,调用随机约束方法;
(3)常见的约束
A 双向约束
a 说明:约束块之间是并行的,约束语句之间也是并行;
b 例子:

class randomize_test;rand bit [31:0] src,dst,data[4];rand bit [7:0] kind;constraint cstr{src >10;src <15;}function void print();$display("src is %0d\n dst is %0d\n kind is %0d\n data is %p",src,dst,kind,data);endfunction
endclass
module tb;randomize_test p;initial beginp = new();$display("Before randomize");p.print();p.randomize();$display("After randomize");p.print();end
endmodule

c结果:
src的取值范围是10<src<15
B 内嵌约束
a 说明:
限制变量取值范围;
语法:
方法一:在约束块中:
成员变量 inside 取值范围;
方法二:
实例化随机约束句柄.randmize() with {}
b 例子
例子1:

class randomize_test;rand bit [31:0] src,dst,data[4];rand bit [7:0] kind;constraint cstr{src inside {[1:5],[7:8]};}function void print();$display("src is %0d\n dst is %0d\n kind is %0d\n data is %p",src,dst,kind,data);endfunction
endclass
module tb;randomize_test p;initial beginp = new();$display("Before randomize");p.print();p.randomize();$display("After randomize");p.print();end
endmodule

例子2:

class randomize_test;rand bit [31:0] src,dst,data[4];rand bit [7:0] kind;constraint cstr{src inside {[1:5],[7:8]};}function void print();$display("src is %0d\n dst is %0d\n kind is %0d\n data is %p",src,dst,kind,data);endfunction
endclass
module tb;randomize_test p;initial beginp = new();$display("Before randomize");p.print();p.randomize() with { 5<src;};$display("After randomize");p.print();end
endmodule

c 结果
例子一:
在这里插入图片描述
例子二:
在这里插入图片描述
C 权重约束
a 说明:
约束每个值分配的权重
语法:
变量名 dist {值:=每个值分配权重,值:/共同分配的权值};
b 例子

class randomize_test;rand bit [31:0] src,dst,data[4];rand bit [7:0] kind;constraint cstr{src dist {[1:3]:/1,[7:8]:=2,10:=5};}function void print();$display("src is %0d\n dst is %0d\n kind is %0d\n data is %p",src,dst,kind,data);endfunction
endclass
module tb;randomize_test p;initial beginp = new();$display("Before randomize");p.print();p.randomize();$display("After randomize");p.print();end
endmodule

c 结果
权重分配情况:
1,2,3共同分配1的权重,即每个对应1/3;
7,8每个分配的权重为2;
10分配的权重为5;
D 唯一标识约束
a 说明
声明后,约束的变量取值不会重复;
语法:
unique {多个成员变量};
b 例子

class randomize_test;rand bit [1:0] src,dst,data[4];rand bit [7:0] kind;constraint cstr{unique {src,dst};}function void print();$display("src is %0d\n dst is %0d\n kind is %0d\n data is %p",src,dst,kind,data);endfunction
endclass
module tb;randomize_test p;initial beginp = new();$display("Before randomize");p.print();p.randomize();$display("After randomize");p.print();end
endmodule

c 结果
在这里插入图片描述
E 条件约束
a 说明
如果条件满足,约束要满足;
语法:
方法一:
条件 -> 约束;
方法二:
if(条件1)
约束1;
else if(条件2)
约束2;
else
约束3;
b 例子
在这里插入图片描述
F 动态数组的长度约束
a 说明
约束动态数组的长度;
语法:
动态数组名.size() 约束;//可以使用各种约束,比如取值范围约束
b 例子

class randomize_test;rand bit [31:0] src,dst,data[];rand bit [7:0] kind;constraint cstr{data.size < 5;}function void print();$display("src is %0d\n dst is %0d\n kind is %0d\n data is %p",src,dst,kind,data);endfunction
endclass
module tb;randomize_test p;initial beginp = new();$display("Before randomize");p.print();p.randomize();$display("After randomize");p.print();end
endmodule

c 结果
在这里插入图片描述
H 软约束
a 说明
当多个约束冲突时,可以用soft关键字修饰(soft表示软约束,默认是硬约束),当软约束和硬约束冲突时会优先执行硬约束;
一般:底层约束用soft关键字修饰,额外的约束用硬约束;
注意:
soft关键字修饰的是约束语句,不是约束块;
硬约束和硬约束冲突时,约束失败;
硬约束和软约束冲突时,执行硬约束;
软约束和软约束冲突时,会就近执行;(后写的:with额外约束 -> 子类约束 ->父类约束)
b 例子

class randomize_test;rand bit [31:0] src,dst,data[4];rand bit [7:0] kind;constraint cstr{soft src inside {[1:5]};}function void print();$display("src is %0d\n dst is %0d\n kind is %0d\n data is %p",src,dst,kind,data);endfunction
endclass
module tb;randomize_test p;initial beginp = new();$display("Before randomize");p.print();p.randomize() with{src inside {[6:10]};};$display("After randomize");p.print();end
endmodule

c 结果
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/56382.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

光平面标定代码

本篇文章主要给出光平面标定代码&#xff0c;鉴于自身水平所限&#xff0c;如有错误&#xff0c;欢迎批评指正。&#xff08;欢迎进Q群交流&#xff1a;874653199&#xff09; 数据分为棋盘格数据和激光条数据&#xff0c;激光条数据为在第22个位姿至第26个位姿下打在棋盘格标定…

初识Linux之指令(二)

一&#xff1a;head指令 head 与 tail 就像它的名字一样的浅显易懂&#xff0c;它是用来显示开头或结尾某个数量的文字区块&#xff0c;head 用来显示档案的 开头至标准输出中&#xff0c;而 tail 想当然尔就是看档案的结尾。 语法&#xff1a;head 【参数】 【文件】 功能&…

java Execl 写入png图片 解决

1、先拿到Execl 的所有图片 放到list /*** 获取图片和位置 (xls)** param sheet* return* throws IOException*/public Map<String, PictureData> getPictures(XSSFSheet sheet) throws IOException {Map<String, PictureData> map new HashMap<String, Pict…

開發 meshtastic 聊天機器人(2)

利用 Web 串接主機附近周邊藍芽(含 meshtastic client) pip install bleak (這個比較簡單) ----另外一個為 pybluez2 (pybluez) 2.程式 import streamlit as st import asyncio from bleak import BleakScannerasync def fetch_data():devices await BleakScanner.discover(…

尚硅谷rabbitmq2024 第15-18节 springboot整合与可靠性答疑

在spring boot项目中&#xff0c;只引入了一个amqp的starter&#xff0c;为什么在写listener的时候能看到rabbitmq相关的类&#xff0c;比如RabbitListener( public void processMessage(String dataString, Message message, channel channel){ 这里的Message就是rabbitmq下面…

grpc和http的区别

当面试官问到gRPC和HTTP的区别时&#xff0c;你可以从以下几个方面进行回答&#xff1a; 协议层次&#xff1a; gRPC&#xff1a;gRPC是一个现代的、开源的、高性能的远程过程调用&#xff08;RPC&#xff09;框架&#xff0c;它使用HTTP/2作为传输协议&#xff0c;并使用Pro…

【ICPC】The 2021 CCPC Weihai Onsite G

Shinyruo and KFC #组合数学 #暴力 #枚举 题目描述 During your participation in this competition, Shinyruo is preparing to order KFC for the offline competition next week. There are n n n kinds of foods in KFC, and he plans to order a i a_i ai​ number …

京存非编存储走进中央民族大学

中央民族大学是一所具有鲜明民族特色的综合性全国重点大学&#xff0c;是国家民委、教育部、北京市共建高校。学校前身为1941年成立的延安民族学院。新中国成立后&#xff0c;经中央政府批准&#xff0c;1951年在北京成立中央民族学院&#xff0c;1993年11月更名为中央民族大学…

LeetCode 3158.求出出现两次数字的 XOR 值:化整数为哈希,一次遍历O(1)空间解决

【LetMeFly】3158.求出出现两次数字的 XOR 值&#xff1a;化整数为哈希&#xff0c;一次遍历O(1)空间解决 力扣题目链接&#xff1a;https://leetcode.cn/problems/find-the-xor-of-numbers-which-appear-twice/ 给你一个数组 nums &#xff0c;数组中的数字 要么 出现一次&a…

golang中如何读取nacos配置中心的信息

golang中如何读取nacos配置中心的信息 golang中如何读取nacos配置中心的信息读取步骤1. 安装 Nacos Go 客户端&#xff1a;2. 编写代码读取配置&#xff1a; 代码说明运行代码注意事项 golang中如何读取nacos配置中心的信息 在 Go 语言中读取 Nacos 配置信息&#xff0c;以下是…

【量化交易】聚宽安装

安装JQData 更换源&#xff1a; 如果使用的是pip默认的PyPI源&#xff0c;可以尝试更换为一个更快的国内镜像源。例如阿里云、豆瓣等提供的PyPI镜像。 更改方法可以通过设置环境变量或者在pip命令中直接指定&#xff1a; PS C:\Users\bilirjs\Documents> pip config set …

No.13 笔记 | 网络安全防护指南:从法律法规到技术防御

一、法律法规 《中华人民共和国网络安全法》要点 遵守法律&#xff1a;所有个人和组织在使用网络时&#xff0c;必须遵守宪法和法律&#xff0c;不得利用网络从事危害国家安全等活动。 个人信息保护&#xff1a;禁止非法获取、出售或提供个人信息。若违反但未构成犯罪&#x…

Oracle低代码平台apex介绍

Oracle APEX&#xff08;Application Express&#xff09;是一个强大的低代码开发平台&#xff0c;它允许开发者快速构建企业级Web应用程序。该平台基于Oracle数据库&#xff0c;并充分利用了数据库的功能来提供安全、可扩展且易于维护的应用程序。 什么是Oracle APEX&#xf…

Lua 协同程序(coroutine)

Lua 协同程序(coroutine) 概述 Lua 语言以其轻量级和易于嵌入的特点,在游戏开发、脚本编写等领域广受欢迎。Lua 中的协同程序(coroutine)是其并发编程的核心特性之一。协同程序提供了一种不同于多线程的并发执行方式,它允许多个代码段交替执行,而不是同时执行。这种机制…

Karmada核心概念

以下内容为翻译&#xff0c;原文地址 Karmada 是什么&#xff1f; | karmada 一、Karmada核心概念 一&#xff09;什么是Karmada 1、Karmada&#xff1a;开放&#xff0c;多云&#xff0c;多集群Kubernetes业务流程 Karmada (Kubernetes Armada)是一个Kubernetes管理系统&…

【NTN 卫星通信】卫星通信的专利

1 概述 好久没有看书了&#xff0c;最近买了本讲低轨卫星专利的书&#xff0c;也可以说是一个分析报告。推荐给喜欢的朋友。 2 书籍截图 图1 封面 图2 波音低轨卫星专利演进 图3 低轨卫星关键技术专利发展阶段 图4 第一页 3 参考文献 产业专利分析报告–低轨卫星通信技术

apisix云原生网关

定义 企业级网关通过域名、路由将请求分发到对应的应用上&#xff0c;通常承载数千个服务的流量&#xff0c;对稳定性有较高要求。 CNCF全景图 选型 Kubernetes抽象出两个核心概念&#xff1a;Service&#xff0c;为多个Pod提供统一的访问入口&#xff1b;Ingress&#xff…

大厂服务降级规范

优质博文&#xff1a;IT-BLOG-CN 服务降级&#xff0c;是指在系统承受较大负载时&#xff0c;根据业务的紧急性和流量情况&#xff0c;对部分非核心或不紧急的服务采取延迟、简化或暂停处理的策略&#xff0c;从而释放系统资源&#xff0c;确保核心业务的高效稳定运行。 为何…

【火山引擎】调用火山大模型的方法 | SDK安装 | 配置 | 客户端初始化 | 设置

豆包 (Doubao) 是字节跳动研发的大规模预训练语言模型。 目录 1 安装 2 配置访问凭证 3 客户端初始化 4 设置地域和访问域名 5 设置超时/重试次数 1 安装 通过pip安装PYTHON SDK。 pip install volcengine-python-sdk[ark] 2 配置访问凭证 获取 API Key 访问凭证具体步…

docker容器运行一段时间提示Failed to initialize NVML: Unknown Error

情况描述 服务器使用docker启动容器。启动以后一切正常也能跑程序。但是&#xff0c;在运行一段时间&#xff08;2天左右不等&#xff09;&#xff0c;会发现gpu掉了。输入nvidia-smi提示 Failed to initialize NVML: Unknown Error 主要发生条件是&#xff0c;docker启动的…