UVM
文章平均质量分 66
元直数字电路验证
為天地立心,為生民立命,為往聖繼絕學,為萬世開太平。
我不去想是否能够成功,既然选择了远方,便只顾风雨兼程。
展开
-
[UVM]uvm_testbench_gen | 介绍一个UVM环境自动生成工具
摘要:介绍一个通过GUI方式自动生成UVM环境的工具,uvm_testbench_gen。工具来源于DVCon US 2022的一篇论文:Novel GUI Based UVM Test Bench Template Builder。工具源码开源在git。转载 2023-05-10 13:20:59 · 2305 阅读 · 1 评论 -
[UVM]为什么不建议在body()中使用pre_body()和post_body
A:为实现pre_body()、post_body()的执行效果,可在sequence中新定义task:body_pre()和body_post(),并将其至于body()内。A:在uvm_test中,如果要将顶层的virtual sequence挂在到virtual sequencer上,则应该使用start()方法,而不应该是`uvm_do_on()的宏,原因就是uvm_test中无法使用`uvm_do()系列macro。原创 2023-04-04 21:31:55 · 1758 阅读 · 0 评论 -
[UVM]UVM环境搭建之 env
前言:通常我们会在env中例化agent,Create RAL Model,Get Interface,Create Configure Object,Connect PORT。通常ENV该怎么部署比较好?本文将做一个详细的介绍。...原创 2020-03-21 21:31:39 · 2239 阅读 · 0 评论 -
[UVMC]UVMC学习笔记之在SystemC/C++ layer的信息汇报控制
在uvmc中可以提供对uvm testbench基本层次信息的打印和信息打印级别的控制,控制过程可以systemC layer实现操作。原创 2022-07-31 13:07:17 · 558 阅读 · 0 评论 -
[UVMC]UVMC学习笔记之在SystemC/C++作用域实现UVM factory操作
UVMC 提供了一组API可用于在SystemC layer对UVM的组件factory进行访问操作,用于层次打印,组件重载,调试,以及打印重载类型等等。原创 2022-07-31 12:51:47 · 642 阅读 · 0 评论 -
[UVMC]UVMC学习笔记之跨语言作用域的config操作
UVMC引入特定的内存共享方法,可以在UVM/SystemVerilog与SystemC模块之间传递记名的半全局变量,在使用方式上类似UVM build-in提供的config_db方法,可以传递字符串,整形数据(byte/int/bit-- char/int/long)和对象结构,在传递对象时需要对packet 结构打包成字符流。原创 2022-07-31 12:36:06 · 588 阅读 · 0 评论 -
[UVMC]UVMC学习笔记之phase同步控制
UVMC 实现了UVM/SystemVerilog 环境与SystemC 环境之间的同步控制,在systemC 部分通过特定的API实现对UVM的phase的精确同步。本文将介绍UVMC在systemC layer实现同步的API。原创 2022-07-30 21:47:10 · 776 阅读 · 0 评论 -
[UVM]uvm_resource详解
uvm_resource studyuvm_resource.svh引入了resource的概念,resource是一种参数化的容器,该容器可用来存放任意类型的数据(只要是SystemVerilog支持的数据类型都可以,例如列表、队列、向量、class handle、virtual interface等等)。resource可用于配置component、给sequence传递数据或者在测试平台各分立部件之间传递信息。 resource会以其name及type为标签(或称关键词、scope)存原创 2021-11-26 20:17:52 · 1929 阅读 · 0 评论 -
[Python3]Python解析Json文件的案例
Python解析Json文件的案例 摘要:什么是json?如何用Python解析json文件呢?本文将介绍一种方案。一、什么是jsonJSON 指的是 JavaScript 对象表示法(JavaScriptObjectNotation) JSON 是轻量级的文本数据交换格式 JSON 独立于语言:JSON 使用 Javascript语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。 目前非常多的动态(PH...原创 2021-10-27 00:06:29 · 531 阅读 · 0 评论 -
[DMA]AXI VIP中Memory的实现方法
AXI VIP中Memory的实现方法 摘要:在DMA验证过程中,需要对比read data与write data,但是araddr与awaddr未必是aligned address,那么我们怎么去对比DMA搬运的数据是否正确呢?为此我们需要造一个memory来存放数据,然后再对比DMA搬运的数据是否正确。一、用SystemVerilog实现Memory。 下面介绍一种用关联数组来模拟Memory的例子:class dma_scb extends uvm_s...原创 2021-10-26 17:06:07 · 1740 阅读 · 2 评论 -
[UVM][AXI][VIP]Response queue overflow
一、在VIP開發或應用中,經常會出現response queue溢出的情況,應為response queue的depth默認為8。那麼如何設置呢?如下圖所示,將Response Queue的Depth設置為512virtual task body(); super.body(); set_response_queue_depth(512);endtask...原创 2019-04-12 19:52:27 · 5216 阅读 · 2 评论 -
[VCS]merge coverage --- vdb merge
一、記錄一些常用的VCS Commandmerge coverage:urg -full64 -metric line+tgl+cond+fsm+assert+branch -warn none -dbname <merge_coverage_name>.vdb -dir simv.vdb -elfile <el_filename.el> 注意:其中-dir之後的第...原创 2019-03-12 21:43:59 · 12584 阅读 · 0 评论 -
`uvm_info中怎么打印行号和文件
`uvm_info中怎么打印行号和文件 前言:在SystemVerilog中,`__FILE__和`__LINE__作为编译指令,在编译阶段被替换掉:`__FILE__被替换为当前文件的文件名,以字符串的形式存在。`__LINE__被替换为当前文件的行号,以十进制数字的形式存在。在$display()中可以直接使用。一、`uvm_info()中如何获取行号和文件路径1.1 先看源码`ifdef UVM_REPORT_DISABLE_FILE...原创 2021-07-16 16:20:09 · 2621 阅读 · 1 评论 -
UVM中打印信息的控制 --- 设定、重载、统计
一、设置打印信息的冗余度阈值二、重载打印信息的冗余程度三、UVM_ERROR达到一定数量结束仿真四、设置技术目标原创 2021-07-16 15:56:21 · 2537 阅读 · 0 评论 -
[UVM]UVM Register Test Sequence
UVM Register Test Sequence一、源码分析1.1uvm_reg_hw_reset_seqclass uvm_reg_hw_reset_seq extends uvm_reg_sequence #(uvm_sequence #(uvm_reg_item)); `uvm_object_utils(uvm_reg_hw_reset_seq) function new(string name="uvm_reg_hw_reset...原创 2021-07-06 09:22:56 · 3983 阅读 · 0 评论 -
[VCS]使用VCS/QUESTA/NCSIM Run小程序、try SystemVerilog語法
一、第一個例子,使用工具為VCS 1、使用如下腳本來設置VCS環境#!/bin/csh -fsetenv VCS_HOME /tooltop/VCSMX/1703SP2-4setenv UVM_HOME /libtop/soft/verif/Methodology/UVM/uvm/uvm-1.1csetenv WORK_HOME `p...原创 2019-08-16 19:25:55 · 1291 阅读 · 0 评论 -
[RAL]UVM中通过宏定义来实现寄存器的读写
UVM中通过宏定义来实现寄存器的读写 前言:在SOC验证过程中,经常需要读写寄存器,但是通过Hierarchy来直接调用read、write函数显得有点麻烦,因此我们可以用宏定义来实现简写。本文给的例子是在Sequence中读写寄存器的一个案例,通过p_sequencer来找到ral_model并调用read和write函数。除此外,在Testcase中也可以通过这种方法来读写寄存器。一般在env中create ral model,在base_test中...原创 2021-04-08 21:23:17 · 1029 阅读 · 0 评论 -
[SV]在循环体中创建线程
在循环体中创建线程 前言:在SerDes的验证中,经常需要check每条lane的行为,对于check的task而言,只需要传入参数lan_num即可,其他的地方都相同。那么对于6T6R SerDes而言,怎么开6个线程呢?本文将给出一个例子。一、循环体中创建线程的例子task main_phase(uvm_phase phase);`ifdef DL_DIR for(int i = 0; i < ...原创 2021-03-27 15:04:54 · 590 阅读 · 0 评论 -
[UVM]UVM Register Model(RAL Model)的构建
UVM Register Model(RAL Model)的构建 前言:RAL Model在SoC验证中是非常重要的,通过RAL Model进行寄存器的读写,大大降低的TB对RTL改动的依赖。那么我们应该怎么建立RAL Model呢?本文将总结一种方案。一、RALF文件RALF是对Register的描述文件,通过RALF可以产生RAL Model RALF文件可以分为四个层次,分别是:field、register、block、syst...原创 2021-03-17 21:23:08 · 1643 阅读 · 2 评论 -
[UVM]uvm_config_db使用方法总结
uvm_config_db使用方法总结原创 2021-01-30 17:04:16 · 2648 阅读 · 0 评论 -
[SV]SystemVerilog状态机实现案例
SystemVerilog状态机实现案例一、用枚举型变量描述状态typedef enum bit [2:0] {TOP_HIB, TOP_BG, TOP_LDO, TOP_NOR} rx_top_fsm_e;二、状态机实现2.1 更新现态寄存器task top_fsm(); forever begin @(posedge intf_mon.clk_ck or negedge intf_mon.rst_n); ...原创 2021-01-30 16:05:15 · 1404 阅读 · 1 评论 -
[UVM]UVM解析命令行参数及读写文件
UVM解析命令行参数及读写文件 前言:在仿真过程中,我们常常需要记录一些仿真过程中产生的数据,那么怎么把这些数据记录在特定目录下的指定文件中呢,本文将展示一次实际应的例子。一、在上一篇博文中,我们介绍了UVM解析命令行参数的方法uvm_cmdline_processor cmdline_proc_inst;function new(string name, uvm_component); sup...原创 2021-01-09 10:56:05 · 2988 阅读 · 0 评论 -
[UVM]UVM命令行参数解析工具:uvm_cmdline_processor
UVM命令行参数解析工具:uvm_cmdline_processor 前言:uvm_cmdline_processor扩展自uvm_report_object,是一个对仿真命令进行处理的处理器类。uvm_cmd_line_verb类是一个独立的类,主要对仿真的编译路径,事件等进行记录。一、UVM仿真命令进行处理的处理器1.uvm_cmd_line_verb类只有四个属性:string comp_path; ...原创 2021-01-08 19:53:16 · 1726 阅读 · 0 评论 -
[UVM]uvm_heartbeat应用案例(二)
Fatal From HeartBeat Monitor / Detecting Inactive condition of the testbench This example is same as the previous example, the comp_a is shown as inactive to the uvm heartbeat so that the uvm heartbeat should detect the same. As mentioned b...原创 2020-08-21 18:32:54 · 615 阅读 · 0 评论 -
[UVM]uvm_heartbeat应用案例(一)
uvm_heartbeat应用案例一、将uvm_heratbeat逻辑添加到测试台中The testbench in the below example consists of a component comp_a In the run phase of comp_a, a loop is running with a delay of 50 This example shows the implementation of the u...原创 2020-08-21 17:28:38 · 765 阅读 · 0 评论 -
[UVM]uvm_heartbeat简介
uvm_heartbeat Heartbeats provide a way for environments to easily ensure that their descendants are alive. or in other words, the uvm_heart beat catches the deadlock or hang states of the verification compon...原创 2020-08-21 16:22:51 · 913 阅读 · 0 评论 -
[SV]使用SystemVerilog参数化类编写通用代码模板
使用SystemVerilog参数化类编写通用代码模板 SystemVerilog支持使用参数化类编写泛型代码的模板。在这里,我们将描述组成UVM基类库的代码中的一些设计模式。使用SystemVerilog Universal Verification Methodology(UVM)或任何基于类的方法论编写测试工作台的用户可以从这些技术中学习。 设计模式是针对常见编程问题的优化的、可重用的解决方案。它们不仅仅是类定义或一组例程——它们...翻译 2020-07-09 21:05:40 · 5852 阅读 · 1 评论 -
`uvm_do_with中constraint不生效的原因及解决方案
`uvm_do_with中constraint不生效的原因及解决方案 前言:我们通常在上层的top_vseq中启动下层sub_seq或seq_item,出于灵活性或者可重用性的考虑,可能会使用`uvm_do_with对下层的random变量进行约束。为了coding方便以及增强代码可读性的考虑,上层和下层seq变量的名字可能是一样的。但是这样就会造成一个问题:我们会发现如果使用`uvm_do_with(sub_seq, {var_a == var_a});这个约束是无法生...原创 2020-07-09 11:26:03 · 6193 阅读 · 0 评论 -
[UVM]数字验证必备网站 --- DV成長秘籍
非常有用的UVM門戶 --- DV成長秘籍一、UVM和SV門戶總結 驗證學院(Verification Academy) www.verificationacademy.com Accellera System Initiative www.accellera.org UVM Co...原创 2020-05-21 16:39:52 · 3072 阅读 · 0 评论 -
[UVM]图解UVM寄存器訪問方法(Register Access Methods)
寄存器訪問方法(Register Access Methods) 前言:UVM的寄存器抽象层(RAL)提供了几种访问寄存器的方法。这篇文章将解释注册表访问方法是如何工作的。在寄存器抽象中,我们介绍了RAL的概述并解释了如何定义寄存器。在这篇文章中,我们将介绍如何访问寄存器。一、Summary 下表总结了每个方法如何更新register-field对象的属性。Method m_reset ["HARD"] v...翻译 2020-05-15 19:15:16 · 2243 阅读 · 5 评论 -
[UVM]Component Override
UVM Component Override一、Type Override There are several ways to override a component using its type.1.1、uvm_component_registry#(T,Tname)::set_type_override(override_type) 第一种方法是使用uvm_component_registry。...翻译 2020-05-14 19:39:13 · 1770 阅读 · 0 评论 -
[UVM]Register Callbacks --- 一種對有粘連關係寄存器的驗證方法
Register Callbacks --- 一種對有粘連關係寄存器的驗證方法 前言:在某些DUT中,当写入一个寄存器时,另一个寄存器會接受一个新值。本文将解释如何使用Register callback來对这种行为建模。一、Registers定義 在寄存器抽象中,我们定义了两个寄存器:RECIPE和TASTE...翻译 2020-05-14 11:52:18 · 1037 阅读 · 0 评论 -
[UVM]用modelsim搭建UVM环境及源码分享
用modelsim搭建UVM环境及源码分享一、下载modelsim1.1、百度云盘链接:https://pan.baidu.com/s/1BRSlQiOXIa7CvOr_UQIr7A1.2、提取码:crg0二、文件准备1.1、准备test top//UVM test yop//top`include "uvm_pkg.sv"module hello_world_example; import uvm_pkg...原创 2020-05-10 18:52:05 · 3418 阅读 · 0 评论 -
[UVM]在UVM top層使用generate語句實現批量Interface連線
SystemVerilog中使用generate語句實現Interface批量連線 前言:在前文(Link)中我們談過generate語句在Verilog中的用法,本文將詳細介紹generate中TB中的使用。通過引入generate,將大大減少連線或者set interface的工作,從而避免一些低級的錯誤。一、應用場景假如我們需要4個ckdly_...原创 2020-04-22 19:44:32 · 1247 阅读 · 1 评论 -
[UVM]UVM TLM2.0简介及应用实例分析
UVM TLM2.0 通过前面博文的介绍,我们知道了UVM中各个组件之间的通信是通过TLM1.0的方式实现的。而伴随着SystemC模型的广泛应用,SystemC的主要通信机制TLM2.0也引起了UVM标准委员会的广泛兴趣。我们之前介绍过TLM协议本身并不依赖于某一种语言,而可以跨语言地完成它的传输标准...转载 2020-04-19 00:22:35 · 4162 阅读 · 0 评论 -
[UVM]UVM TLM1.0 Interface归纳总结 --- 图解UVM TLM1.0 Interface
UVM TLM Interface原创 2020-04-18 20:04:23 · 2041 阅读 · 0 评论 -
[UVM]UVM中的analysis port 和analysis export
UVM中的analysis port 和analysis export一、analysis port 和analysis export與port 和export的區別都是用于传递transaction analysis port(analysis export)与IMP 之间的通信是一种一对多的通信,而PORT 和EXPORT 与IMP 的通信是一种...原创 2020-04-16 12:24:46 · 6428 阅读 · 0 评论 -
[UVM]UVM_ERROR數量統計 --- 在env中override report_phase
UVM_ERROR數量統計一、如何在仿真結束后,報告ERROR的數量呢?1.1、可以在env中Override report_phase來實現function void my_env::report_phase(uvm_phase phase); bit ...原创 2020-04-14 19:46:53 · 1839 阅读 · 0 评论 -
[UVM]UVM RAL Model中get_reg_by_name應用詳解
UVM RAL Model中get_reg_by_name應用詳解一、Register定義假如現在有下面這樣的一組Register:DBG_MSB_0DBG_MSB_1DBG_MSB_2DBG_MSB_3DBG_MSB_4DBG_MSB_5DBG_MSB_6DBG_MSB_7現在有沒有一種辦法在循環體中Read這些Register呢?答案是肯...原创 2020-04-14 19:19:07 · 3786 阅读 · 0 评论 -
[UVM]史上最全的UVM TLM通信PORT和IMP使用方法總結
UVM TLM通信一.PORT與IMP的鏈接PORT TYPE IMP TYPE TASK/FUNCTION IN COMPONENT B A uvm_blocking_put_port#(my_transaction) B uvm_b...原创 2020-04-13 19:12:02 · 3660 阅读 · 0 评论