core-v-verif系列之lib<19>

UVM环境介绍
HEAD commitID: 1f968ef

1. core-v-verif/lib/uvm_agents/uvma_axi/src/uvma_axi_pkg.sv

// Copyright 2022 Thales DIS SAS
//
// Licensed under the Solderpad Hardware Licence, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// SPDX-License-Identifier: Apache-2.0 WITH SHL-2.0
// You may obtain a copy of the License at https://solderpad.org/licenses/
//
// Original Author: Alae Eddine EZ ZEJJARI (alae-eddine.ez-zejjari@external.thalesgroup.com)
// Co-Author: Abdelaali Khardazi

/***** AXI4 slave agent package *****/

`ifndef __UVMA_AXI_PKG_SV__
`define __UVMA_AXI_PKG_SV__

// Pre-processor macros
`include "uvm_macros.svh"
`include "uvma_axi_macros.sv"


// Interfaces / Modules / Checkers
`include "uvma_axi_intf.sv"
`include "uvma_axi_aw_assert.sv"
`include "uvma_axi_w_assert.sv"
`include "uvma_axi_ar_assert.sv"
`include "uvma_axi_r_assert.sv"
`include "uvma_axi_b_assert.sv"

package uvma_axi_pkg;

   import uvm_pkg::*;
   import uvml_mem_pkg  ::*;
   import uvml_trn_pkg  ::*;
   import uvml_logs_pkg ::*;

   import "DPI-C" function read_elf(input string filename);
   import "DPI-C" function byte get_section(output longint address, output longint len);
   import "DPI-C" context function read_section_sv(input longint address, inout byte buffer[]);

   localparam NrSlaves      = 2; // actually masters, but slaves on the crossbar
   localparam IdWidth       = 4; // 4 is recommended by AXI standard, so lets stick to it, do not change
   localparam IdWidthSlave  = IdWidth + $clog2(NrSlaves);
   parameter AXI_ADDR_WIDTH = `UVMA_AXI_ADDR_MAX_WIDTH;
   parameter AXI_DATA_WIDTH = `UVMA_AXI_DATA_MAX_WIDTH;
   parameter AXI_USER_WIDTH = `UVMA_AXI_USER_MAX_WIDTH;
   parameter AXI_ID_WIDTH   = IdWidthSlave;
   parameter NUM_WORDS      = 2**24;

   `include "uvma_axi_tdefs.sv"

    // Objects
   `include "uvma_axi_cfg.sv"
   `include "uvma_axi_cntxt.sv"

   `include "uvma_axi_base_seq_item.sv"
   `include "uvma_axi_aw_item.sv"
   `include "uvma_axi_w_item.sv"
   `include "uvma_axi_b_item.sv"
   `include "uvma_axi_ar_item.sv"
   `include "uvma_axi_r_item.sv"

   `include "uvma_axi_aw_drv.sv"
   `include "uvma_axi_w_drv.sv"
   `include "uvma_axi_b_drv.sv"
   `include "uvma_axi_ar_drv.sv"
   `include "uvma_axi_r_drv.sv"
   `include "uvma_axi_aw_mon.sv"
   `include "uvma_axi_w_mon.sv"
   `include "uvma_axi_b_mon.sv"
   `include "uvma_axi_ar_mon.sv"
   `include "uvma_axi_r_mon.sv"

   `include "uvma_axi_aw_sqr.sv"
   `include "uvma_axi_w_sqr.sv"
   `include "uvma_axi_b_sqr.sv"
   `include "uvma_axi_ar_sqr.sv"
   `include "uvma_axi_r_sqr.sv"

   `include "uvma_axi_seq_item_logger.sv"

   `include "uvma_axi_aw_agent.sv"
   `include "uvma_axi_w_agent.sv"
   `include "uvma_axi_b_agent.sv"
   `include "uvma_axi_ar_agent.sv"
   `include "uvma_axi_r_agent.sv"

   `include "uvma_axi_vsqr.sv"

   `include "uvma_axi_agent.sv"
    // Sequences
   `include "uvma_axi_seq_lib.sv"

endpackage : uvma_axi_pkg

`endif

1. 简要介绍

uvma_axi_pkg.sv 文件定义了一个名为 uvma_axi_pkg 的 SystemVerilog 包,该包主要用于封装 AXI4 从机代理相关的组件和资源。它导入了多个必要的包和 DPI - C 函数,定义了一系列参数,并包含了大量的文件包含语句,用于引入 AXI4 验证环境所需的接口、类型定义、对象、驱动、监视器、序列器、序列等文件,为 AXI4 协议的验证提供了完整的基础框架。

2. 接口介绍

此文件主要定义包,不涉及传统意义上的接口,因此没有接口相关代码。

3. 参数介绍

localparam NrSlaves      = 2; // actually masters, but slaves on the crossbar
localparam IdWidth       = 4; // 4 is recommended by AXI standard, so lets stick to it, do not change
localparam IdWidthSlave  = IdWidth + $clog2(NrSlaves);
parameter AXI_ADDR_WIDTH = `UVMA_AXI_ADDR_MAX_WIDTH;
parameter AXI_DATA_WIDTH = `UVMA_AXI_DATA_MAX_WIDTH;
parameter AXI_USER_WIDTH = `UVMA_AXI_USER_MAX_WIDTH;
parameter AXI_ID_WIDTH   = IdWidthSlave;
parameter NUM_WORDS      = 2**24;
  • localparam NrSlaves = 2;:定义从机数量为 2,注释说明这些实际是主机,但在交叉开关上作为从机。localparam 表明该参数仅在包内可见。
  • localparam IdWidth = 4;:定义 ID 宽度为 4,这是 AXI 标准推荐的值,注释建议不要修改。
  • localparam IdWidthSlave = IdWidth + $clog2(NrSlaves);:计算从机的 ID 宽度,为 IdWidth 加上从机数量以 2 为底的对数。
  • parameter AXI_ADDR_WIDTH = UVMA_AXI_ADDR_MAX_WIDTH;:定义 AXI 地址宽度,取值为 UVMA_AXI_ADDR_MAX_WIDTH` 宏的值。
  • parameter AXI_DATA_WIDTH = UVMA_AXI_DATA_MAX_WIDTH;:定义 AXI 数据宽度,取值为 UVMA_AXI_DATA_MAX_WIDTH` 宏的值。
  • parameter AXI_USER_WIDTH = UVMA_AXI_USER_MAX_WIDTH;:定义 AXI 用户信号宽度,取值为 UVMA_AXI_USER_MAX_WIDTH` 宏的值。
  • parameter AXI_ID_WIDTH = IdWidthSlave;:定义 AXI ID 宽度,取值为计算得到的 IdWidthSlave
  • parameter NUM_WORDS = 2**24;:定义字的数量为 2^24

4. 模块实现介绍

4.1 条件编译和头文件包含
`ifndef __UVMA_AXI_PKG_SV__
`define __UVMA_AXI_PKG_SV__

// Pre-processor macros
`include "uvm_macros.svh"
`include "uvma_axi_macros.sv"

// Interfaces / Modules / Checkers
`include "uvma_axi_intf.sv"
`include "uvma_axi_aw_assert.sv"
`include "uvma_axi_w_assert.sv"
`include "uvma_axi_ar_assert.sv"
`include "uvma_axi_r_assert.sv"
`include "uvma_axi_b_assert.sv"
  • ifndef __UVMA_AXI_PKG_SV__define __UVMA_AXI_PKG_SV__:使用条件编译防止该文件被重复包含。
  • include "uvm_macros.svh":包含 UVM 宏文件,引入 UVM 验证方法学的宏定义。
  • include "uvma_axi_macros.sv":包含自定义的 AXI 宏文件,引入 AXI 相关的宏定义。
  • 后续的 include 语句包含了 AXI 接口、断言检查等相关文件,为 AXI 验证提供基础组件。
4.2 包定义和包导入
package uvma_axi_pkg;

   import uvm_pkg::*;
   import uvml_mem_pkg  ::*;
   import uvml_trn_pkg  ::*;
   import uvml_logs_pkg ::*;

   import "DPI-C" function read_elf(input string filename);
   import "DPI-C" function byte get_section(output longint address, output longint len);
   import "DPI-C" context function read_section_sv(input longint address, inout byte buffer[]);
  • package uvma_axi_pkg;:定义名为 uvma_axi_pkg 的包。
  • import uvm_pkg::*; 等:导入 UVM 包以及其他自定义包,引入所需的类和函数。
  • import "DPI-C" 相关语句:导入 DPI - C 函数,用于与 C 语言代码进行交互,如读取 ELF 文件等操作。
4.3 类型定义和对象文件包含
`include "uvma_axi_tdefs.sv"

// Objects
`include "uvma_axi_cfg.sv"
`include "uvma_axi_cntxt.sv"

`include "uvma_axi_base_seq_item.sv"
`include "uvma_axi_aw_item.sv"
`include "uvma_axi_w_item.sv"
`include "uvma_axi_b_item.sv"
`include "uvma_axi_ar_item.sv"
`include "uvma_axi_r_item.sv"
  • include "uvma_axi_tdefs.sv":包含 AXI 类型定义文件,定义 AXI 相关的数据类型。
  • 后续的 include 语句包含了 AXI 配置、上下文、序列项等对象文件,为 AXI 验证环境提供各种对象。
4.4 驱动、监视器、序列器和代理文件包含
`include "uvma_axi_aw_drv.sv"
`include "uvma_axi_w_drv.sv"
`include "uvma_axi_b_drv.sv"
`include "uvma_axi_ar_drv.sv"
`include "uvma_axi_r_drv.sv"
`include "uvma_axi_aw_mon.sv"
`include "uvma_axi_w_mon.sv"
`include "uvma_axi_b_mon.sv"
`include "uvma_axi_ar_mon.sv"
`include "uvma_axi_r_mon.sv"

`include "uvma_axi_aw_sqr.sv"
`include "uvma_axi_w_sqr.sv"
`include "uvma_axi_b_sqr.sv"
`include "uvma_axi_ar_sqr.sv"
`include "uvma_axi_r_sqr.sv"

`include "uvma_axi_aw_agent.sv"
`include "uvma_axi_w_agent.sv"
`include "uvma_axi_b_agent.sv"
`include "uvma_axi_ar_agent.sv"
`include "uvma_axi_r_agent.sv"

`include "uvma_axi_vsqr.sv"
`include "uvma_axi_agent.sv"

这些 include 语句包含了 AXI 各个通道的驱动、监视器、序列器和代理文件,构建了完整的 AXI 验证组件。

4.5 序列库文件包含
`include "uvma_axi_seq_lib.sv"

包含 AXI 序列库文件,提供各种 AXI 序列,用于生成不同的测试激励。

4.6 包结束
endpackage : uvma_axi_pkg

`endif
  • endpackage : uvma_axi_pkg:结束 uvma_axi_pkg 包的定义。
  • endif:结束条件编译。

5. 总结

uvma_axi_pkg.sv 通过定义一个包,将 AXI4 从机代理验证所需的各种资源和组件进行了封装。它引入了必要的包和 DPI - C 函数,定义了关键参数,并通过大量的文件包含语句引入了接口、类型定义、对象、驱动、监视器、序列器、序列等文件,为 AXI4 协议的验证提供了一个完整、可复用的基础框架。这种设计方式提高了代码的模块化程度和可维护性,方便开发人员进行 AXI4 相关的验证工作。

2. core-v-verif/lib/uvm_agents/uvma_axi/src/uvma_axi_r_assert.sv

// Copyright 2022 Thales DIS SAS
//
// Licensed under the Solderpad Hardware Licence, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// SPDX-License-Identifier: Apache-2.0 WITH SHL-2.0
// You may obtain a copy of the License at https://solderpad.org/licenses/
//
// Original Author: Alae Eddine EZ ZEJJARI (alae-eddine.ez-zejjari@external.thalesgroup.com)
// Co-Author: Abdelaali Khardazi

// *************************** READ DATA CHANNEL ************************** //

module  uvma_axi_r_assert (uvma_axi_intf.passive axi_assert, input bit clk, input rst_n);

   import uvm_pkg::*;

// *************************** Check if Read Signals are not equal X or Z when RVALID is HIGH (Section A3.2.2) ************************** //

   property AXI4_RID_X;
      @(posedge clk) disable iff (
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值