uvm_reg_model——寄存器模型(一)
对于一个复杂设计,寄存器模型要能够模拟任意数量的寄存器域操作。UVM提供标准的基类库,UVM的寄存器模型来自于继承自VMM的RAL(Register Abstract Layer),现在可以先将寄存器模型进行XML建模,再通过脚本工具直接生产寄存器模型。首先来看看uvm_reg_model的代码,该文件用来保存Register Layer的全局变量和文件include。
- //------------------------------------------------------------------------------
- // TITLE: Global Declarations for the Register Layer
- //------------------------------------------------------------------------------
- //
- // This section defines globally available types, enums, and utility classes.
- //
- //------------------------------------------------------------------------------
- `ifndef UVM_REG_MODEL__SV
- `define UVM_REG_MODEL__SV
- typedef class uvm_reg_field;
- typedef class uvm_vreg_field;
- typedef class uvm_reg;
- typedef class uvm_reg_file;
- typedef class uvm_vreg;
- typedef class uvm_reg_block;
- typedef class uvm_mem;
- typedef class uvm_reg_item;
- typedef class uvm_reg_map;
- typedef class uvm_reg_map_info;
- typedef class uvm_reg_sequence;
- typedef class uvm_reg_adapter;
- typedef class uvm_reg_indirect_data;
除了声明了基本的寄存器模型外,还定义了一些全局变量和枚举的定义:
- // Type: uvm_hdl_path_slice
- //
- // Slice of an HDL path
- //
- // Struct that specifies the HDL variable that corresponds to all
- // or a portion of a register.
- //
- // path - Path to the HDL variable.
- // offset - Offset of the LSB in the register that this variable implements
- // size - Number of bits (toward the MSB) that this variable implements
- //
- // If the HDL variable implements all of the register, ~offset~ and ~size~
- // are specified as -1. For example:
- //|
- //| r1.add_hdl_path('{ '{"r1", -1, -1} });
- //|
- //
- typedef struct {
- string path;
- int offset;
- int size;
- } uvm_hdl_path_slice;
- typedef uvm_resource_db#(uvm_reg_cvr_t) uvm_reg_cvr_rsrc_db;
- //--------------------
- // Group: Enumerations
- //--------------------
- // Enum: uvm_status_e
- //
- // Return status for register operations
- //
- // UVM_IS_OK - Operation completed successfully
- // UVM_NOT_OK - Operation completed with error
- // UVM_HAS_X - Operation completed successfully bit had unknown bits.
- //
- typedef enum {
- UVM_IS_OK,
- UVM_NOT_OK,
- UVM_HAS_X
- } uvm_status_e;
- // Enum: uvm_path_e
- //
- // Path used for register operation
- //
- // UVM_FRONTDOOR - Use the front door
- // UVM_BACKDOOR - Use the back door
- // UVM_PREDICT - Operation derived from observations by a bus monitor via
- // the <uvm_reg_predictor> class.
- // UVM_DEFAULT_PATH - Operation specified by the context
- //
- typedef enum {
- UVM_FRONTDOOR,
- UVM_BACKDOOR,
- UVM_PREDICT,
- UVM_DEFAULT_PATH
- } uvm_path_e;
- // Enum: uvm_check_e
- //
- // Read-only or read-and-check
- //
- // UVM_NO_CHECK - Read only
- // UVM_CHECK - Read and check
- //
- typedef enum {
- UVM_NO_CHECK,
- UVM_CHECK
- } uvm_check_e;
- // Enum: uvm_endianness_e
- //
- // Specifies byte ordering
- //
- // UVM_NO_ENDIAN - Byte ordering not applicable
- // UVM_LITTLE_ENDIAN - Least-significant bytes first in consecutive addresses
- // UVM_BIG_ENDIAN - Most-significant bytes first in consecutive addresses
- // UVM_LITTLE_FIFO - Least-significant bytes first at the same address
- // UVM_BIG_FIFO - Most-significant bytes first at the same address
- //
- typedef enum {
- UVM_NO_ENDIAN,
- UVM_LITTLE_ENDIAN,
- UVM_BIG_ENDIAN,
- UVM_LITTLE_FIFO,
- UVM_BIG_FIFO
- } uvm_endianness_e;
- // Enum: uvm_elem_kind_e
- //
- // Type of element being read or written
- //
- // UVM_REG - Register
- // UVM_FIELD - Field
- // UVM_MEM - Memory location
- //
- typedef enum {
- UVM_REG,
- UVM_FIELD,
- UVM_MEM
- } uvm_elem_kind_e;
- // Enum: uvm_access_e
- //
- // Type of operation begin performed
- //
- // UVM_READ - Read operation
- // UVM_WRITE - Write operation
- //
- typedef enum {
- UVM_READ,
- UVM_WRITE,
- UVM_BURST_READ,
- UVM_BURST_WRITE
- } uvm_access_e;
- // Enum: uvm_hier_e
- //
- // Whether to provide the requested information from a hierarchical context.
- //
- // UVM_NO_HIER - Provide info from the local context
- // UVM_HIER - Provide info based on the hierarchical context
- typedef enum {
- UVM_NO_HIER,
- UVM_HIER
- } uvm_hier_e;
- // Enum: uvm_predict_e
- //
- // How the mirror is to be updated
- //
- // UVM_PREDICT_DIRECT - Predicted value is as-is
- // UVM_PREDICT_READ - Predict based on the specified value having been read
- // UVM_PREDICT_WRITE - Predict based on the specified value having been written
- //
- typedef enum {
- UVM_PREDICT_DIRECT,
- UVM_PREDICT_READ,
- UVM_PREDICT_WRITE
- } uvm_predict_e;
- // Enum: uvm_coverage_model_e
- //
- // Coverage models available or desired.
- // Multiple models may be specified by bitwise OR'ing individual model identifiers.
- //
- // UVM_NO_COVERAGE - None
- // UVM_CVR_REG_BITS - Individual register bits
- // UVM_CVR_ADDR_MAP - Individual register and memory addresses
- // UVM_CVR_FIELD_VALS - Field values
- // UVM_CVR_ALL - All coverage models
- //
- typedef enum uvm_reg_cvr_t {
- UVM_NO_COVERAGE = 'h0000,
- UVM_CVR_REG_BITS = 'h0001,
- UVM_CVR_ADDR_MAP = 'h0002,
- UVM_CVR_FIELD_VALS = 'h0004,
- UVM_CVR_ALL = -
- } uvm_coverage_model_e;
- // Enum: uvm_reg_mem_tests_e
- //
- // Select which pre-defined test sequence to execute.
- //
- // Multiple test sequences may be selected by bitwise OR'ing their
- // respective symbolic values.
- //
- // UVM_DO_REG_HW_RESET - Run <uvm_reg_hw_reset_seq>
- // UVM_DO_REG_BIT_BASH - Run <uvm_reg_bit_bash_seq>
- // UVM_DO_REG_ACCESS - Run <uvm_reg_access_seq>
- // UVM_DO_MEM_ACCESS - Run <uvm_mem_access_seq>
- // UVM_DO_SHARED_ACCESS - Run <uvm_reg_mem_shared_access_seq>
- // UVM_DO_MEM_WALK - Run <uvm_mem_walk_seq>
- // UVM_DO_ALL_REG_MEM_TESTS - Run all of the above
- //
- // Test sequences, when selected, are executed in the
- // order in which they are specified above.
- //
- typedef enum bit [:] {
- UVM_DO_REG_HW_RESET = 'h0000_0000_0000_0001,
- UVM_DO_REG_BIT_BASH = 'h0000_0000_0000_0002,
- UVM_DO_REG_ACCESS = 'h0000_0000_0000_0004,
- UVM_DO_MEM_ACCESS = 'h0000_0000_0000_0008,
- UVM_DO_SHARED_ACCESS = 'h0000_0000_0000_0010,
- UVM_DO_MEM_WALK = 'h0000_0000_0000_0020,
- UVM_DO_ALL_REG_MEM_TESTS = 'hffff_ffff_ffff_ffff
- } uvm_reg_mem_tests_e;
包含其他文件的include:
- `include "reg/uvm_reg_item.svh"
- `include "reg/uvm_reg_adapter.svh"
- `include "reg/uvm_reg_predictor.svh"
- `include "reg/uvm_reg_sequence.svh"
- `include "reg/uvm_reg_cbs.svh"
- `include "reg/uvm_reg_backdoor.svh"
- `include "reg/uvm_reg_field.svh"
- `include "reg/uvm_vreg_field.svh"
- `include "reg/uvm_reg.svh"
- `include "reg/uvm_reg_indirect.svh"
- `include "reg/uvm_reg_fifo.svh"
- `include "reg/uvm_reg_file.svh"
- `include "reg/uvm_mem_mam.svh"
- `include "reg/uvm_vreg.svh"
- `include "reg/uvm_mem.svh"
- `include "reg/uvm_reg_map.svh"
- `include "reg/uvm_reg_block.svh"
- `include "reg/sequences/uvm_reg_hw_reset_seq.svh"
- `include "reg/sequences/uvm_reg_bit_bash_seq.svh"
- `include "reg/sequences/uvm_mem_walk_seq.svh"
- `include "reg/sequences/uvm_mem_access_seq.svh"
- `include "reg/sequences/uvm_reg_access_seq.svh"
- `include "reg/sequences/uvm_reg_mem_shared_access_seq.svh"
- `include "reg/sequences/uvm_reg_mem_built_in_seq.svh"
- `include "reg/sequences/uvm_reg_mem_hdl_paths_seq.svh"
uvm_reg_model——寄存器模型(一)的更多相关文章
- uvm_reg_predictor——寄存器模型(十七)
这是寄存器模型类中唯一派生自uvm_component的类,我们的寄存器模式需要实时,以最接近的方式知道DUT中寄存器的变化,uvm_reg_predictor就是为这个而生的. // TITLE: ...
- uvm_reg_cbs——寄存器模型(十六)
当你完成寄存器模型的时候,你就会想到给后来的人一个接口,给他更多的扩展,让他做更多的事,一般而言,只有做VIP时,会想到做callbacks. typedef class uvm_reg; typed ...
- uvm_reg_block——寄存器模型(七)
这是寄存器模型的顶层 //------------------------------------------------------------------------ // Class: uvm_ ...
- uvm_reg_sequence——寄存器模型(六)
寄存器模型 uvm_reg_sequence是UVM自带所有register sequence 的基类. 该类包含model, adapter, reg_seqr(uvm_sequencer). 感觉 ...
- uvm_reg_item——寄存器模型(五)
uvm_reg_item 扩展自uvm_sequence_item,也就说寄存器模型定义了transaction item. adapter 的作用是把这uvm_reg_item转换成uvm_sequ ...
- uvm_reg_defines——寄存器模型(四)
文件: src/marcos/uvm_reg_defines 类: 无 该文件是寄存器模型src/reg/* 文件对于的宏文件,主要定义了寄存器地址位宽,寄存器数据位宽,字节的大小.计算机从最初的8, ...
- UVM——寄存器模型相关的一些函数
0. 引言 在UVM支持的寄存器操作中,有get.update.mirror.write等等一些方法,在这里整理一下他们的用法. 寄存器模型中的寄存器值应该与DUT保持同步,但是由于DUT的值是实时更 ...
- uvm_reg_fifo——寄存器模型(十五)
当我们对寄存器register, 存储器memory, 都进行了建模,是时候对FIFO进行建模了 uvm_reg_fifo毫无旁贷底承担起了这个责任,包括:set, get, update, read ...
- uvm_reg_file——寄存器模型(十四)
有了uvm_reg_field, uvm_reg, uvm_block, 也许我们需要跟大的uvm_file,这就是传说中的寄存器堆. // // CLASS: uvm_reg_file // Reg ...
随机推荐
- MTK UART串口调试
一.UART初始化 1. kernel-3.18/drivers/misc/mediatek/uart/uart.c static int __init mtk_uart_init(void) { ; ...
- Azure Key Vault (1) 入门
<Windows Azure Platform 系列文章目录> 为什么要使用Azure Key Vault? 我们假设在微软云Azure上有1个场景,在Windows VM里面有1个.NE ...
- Jquery获取web窗体关闭事件,排除刷新页面
在js脚本里全局定义一个 var r=true;若是刷新的话则把r=false; $(window).unload(function () { if (r) { //这里面证明用户不是点的F5刷新 执 ...
- UltraISO中文版+注册码
UltraISO v9.5.3.2901 百度网盘下载地址: http://pan.baidu.com/s/1l9t2U 新浪微盘下载地址: http://vdisk.weibo.com/s/rcvB ...
- Linux : linux命令之 svn
感谢前辈的整理,让我直接站在巨人的肩膀上.来自:http://www.jb51.net/os/RedHat/2461.html 1.将文件checkout到本地目录 svn checkout path ...
- VS2008给对话框添加背景颜色
第一种方法如下: 在对话框OnPaint()函数中添加代码 //改变对话框背景颜色 CRect rect; CPaintDC dc(this); GetClientRect(rect); dc.Fil ...
- fetch + async await 使用原生JS发送网络请求
由于现在主流浏览器支持Fetch API,无需引用其他库就能实现AJAX,一行代码就搞定,可以说是非常方便了. export default { name: 'HelloWorld', data() ...
- TP5实现签到功能
基于tp5 模型的一个签到功能: 由于存储所有的签到日期数据库会非常庞大,所以签到日期只存储近三个月的. 具体功能: 1.记录最近一次的签到时间 2.每次签到都会添加15积分 3.有连续签到的记录 C ...
- hdoj2577【多种状态】(简单DP)
#include <stdio.h> #include <iostream> #include <sstream> #include <string.h> ...
- PHP 数组序列化,转为字符串
serialize() <?php $a = array('a' => 'as' ,'b' => 'bs' , 'c' => 'cs'); //序列化数组 $s = seria ...