当前位置: 首页 > news >正文

SystemVerilog中randomize() 的注意事项

1、等式左右两边的变量名不能相同。若果相同,求解器会认为两边一样,导致约束不生效,例如:

class dma_seq extends uvm_sequence #(dma_trans);bit [39:0]          addr;`uvm_do_with(req, {req.addr == addr;})endclass : dma_seq

2、假如要约束addr为0x0000_000C,下面的写法是不行的:

addr == 1'hC;

因为位宽不对,这样addr永远只为0,失去了最低位的1bit,应写为:

rand_states = (glb_cfg.randomize() with {glb_cfg == 'hC;
})

3、SystemVerilog中constraint指定不等于。

class user_mem_mam_policy extends uvm_mem_mam_policy;bit [31:0]    offset;constraint policy_offset_cons{start_offset % 8 != 0;}endclass : uvm_mem_mam_policy

4、SystemVerilog中约束数组。

bit [15:0]    dma_rd_len[];
constraint c_dma_rd_len{foreach(dma_rd_len[i]){dma_rd_len[i] dist {128:=20, 256:=20, [0:127]:/20, [129:255]:/20};}}constraint c_dma_rd_len_sum_con{dma_rd_len.size() == 655350;}

5、在task中产生一个随机数,可以做如下约束:

function void pre_randomize();std::randomize(sub_payload_num) with {sub_payload_num inside {[1:255]};};
endfunction : pre_randomize

6、在randomize with{}语句中,可以使用if-else,但是if-else语句要用大括号包起来,不能使用begin-end

class uvm_axi_cfg extends svt_axi_system_configuration;`uvm_object_utils(uvm_axi_cfg)bit [0:0]                    slow_mode;function new(string name = "uvm_axi_cfg");super.new();$value$plusargs("SLOW_MOD=%0d", slow_mode);slavecfg[0].randomize() with {axi_interface_type == AXI3;data_width         == 32;id_width           == 4;addr_width         == 32;}if(slow_mode == 'h1) {default_arready == 1'b0;default_awready == 1'b0;default_wready  == 1'b0;}else if(slow_mode == 'h0) {default_arready == 1'b1;default_awready == 1'b1;default_wready  == 1'b1;}endfunctionendclass

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 关于我的阿里云服务器被入侵 - 分析报告
  • java ForkJoinPool使用完全解析
  • LeetCode 算法:单词拆分 c++
  • ABB机器人教程:外部调用例行程序功能介绍与使用方法
  • vue2实践:el-table实现由用户自己添加删除行数的动态表格
  • 【Redis】redis5种数据类型(list)
  • 智能平衡移动机器人-MBD开发介绍
  • Golang | Leetcode Golang题解之第397题整数替换
  • CAN总线物理层知识点详解及大厂CAN总线高频面试题
  • 贪心-用最少的箭射球
  • 端口大全说明,HTTP,TCP,UDP常见端口对照表
  • 数据流图例题
  • SQL的基本语句(2024年9月最新版 入门级)
  • Python应用指南:获取行政区最小外接矩形
  • containerd二进制安装
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • DataBase in Android
  • FastReport在线报表设计器工作原理
  • golang中接口赋值与方法集
  • Javascript 原型链
  • js学习笔记
  • Laravel Mix运行时关于es2015报错解决方案
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • python 装饰器(一)
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • webpack项目中使用grunt监听文件变动自动打包编译
  • 电商搜索引擎的架构设计和性能优化
  • 关于springcloud Gateway中的限流
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 将 Measurements 和 Units 应用到物理学
  • 软件开发学习的5大技巧,你知道吗?
  • 微信小程序填坑清单
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 系统认识JavaScript正则表达式
  • 学习ES6 变量的解构赋值
  • k8s使用glusterfs实现动态持久化存储
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • ​MySQL主从复制一致性检测
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • ​如何防止网络攻击?
  • # linux 中使用 visudo 命令,怎么保存退出?
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #define、const、typedef的差别
  • #if等命令的学习
  • #laravel部署安装报错loadFactoriesFrom是undefined method #
  • (¥1011)-(一千零一拾一元整)输出
  • (六)vue-router+UI组件库
  • (顺序)容器的好伴侣 --- 容器适配器
  • (学习日记)2024.01.19
  • (转)Linux整合apache和tomcat构建Web服务器
  • (转)一些感悟
  • *1 计算机基础和操作系统基础及几大协议
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .md即markdown文件的基本常用编写语法
  • .net core 使用js,.net core 使用javascript,在.net core项目中怎么使用javascript