Synopsys AXI VIP 解析(5)——寄存器模型

文章介绍同时使用Synopsys AXI VIP和寄存器模型的示例。正常使用寄存器模型的流程是:写寄存器模型、写adapter转换、再例化连接,而VIP已经包含adapter,所以直接连接寄存器模型句柄就好。 示例为AXI VIP同时使用寄存器模型,APB VIP大同小异也可以参照。

VIP

adapter和寄存器句柄位于master agent(svt_axi_master_agent类)。

ini 复制代码
uvm_reg_block 	     axi_regmodel    ;
svt_axi_reg_adapter  reg2axi_adapter ;

使用前还需要将对应配置类(svt_axi_port_configuration类)中uvm_reg_enable配成1。

ini 复制代码
 bit uvm_reg_enable = 0;

寄存器模型

示例为一个简单的存储的寄存器模型,位宽32,起始地址0。

scala 复制代码
class ral_mem extends uvm_mem;
  function new(string name = "ral_mem");
    super.new(name, `UVM_REG_ADDR_WIDTH'h100, 32, "RW", build_coverage(UVM_NO_COVERAGE));
  endfunction
  `uvm_object_utils(ral_mem)
endclass : ral_mem

class ral_block extends uvm_reg_block;
  rand ral_mem ral_mem_0;
  
  function new(string name = "ral_block");
  	super.new(name, build_coverage(UVM_NO_COVERAGE));
  endfunction: new
  
  virtual function void build();
    this.default_map = create_map("", 0, 4, UVM_LITTLE_ENDIAN, 0);
    this.ral_mem_0 = ral_mem::type_id::create("ral_mem_0",,get_full_name());
    this.ral_mem_0.configure(this, "mem");
    this.ral_mem_0.build();
    this.default_map.add_mem(this.ral_mem_0, `UVM_REG_ADDR_WIDTH'h0, "RW", 0);
  endfunction : build
  
  `uvm_object_utils(ral_block)
endclass: ral_block

env

然后在build_phase实例化寄存器模型,并发送句柄至master agent,这里"axi_system_env.master0"是我的环境中master agent的路径,可以根据实际进行修改。 下面set_hdl_path_root()和上小节configure()合起来是HDL中存储的路径tb_top.axi_slave.mem。

scss 复制代码
regmodel = ral_block::type_id::create("regmodel");
regmodel.build();
regmodel.set_hdl_path_root("tb_top.axi_slave");
regmodel.lock_model();
uvm_config_db#(uvm_reg_block)::set(this,"axi_system_env.master[0]", "axi_regmodel", regmodel);

test_case

在测试用例中分别前门后门读写寄存器模型。

css 复制代码
  for(i=0;i<16;i++)
    top_env.regmodel.ral_mem_0.write(status, 4*i , i);

  for(i=0;i<16;i++)
    top_env.regmodel.ral_mem_0.read(status, 4*i , rdata);

  for(i=0;i<16;i++)
    top_env.regmodel.ral_mem_0.write(status, i , i+'h16, UVM_BACKDOOR);

  for(i=0;i<16;i++) begin
    top_env.regmodel.ral_mem_0.read(status, i , rdata, UVM_BACKDOOR);
    `uvm_info("tc",$sformatf("read %0h",rdata),UVM_MEDIUM)
  end

波形中可以看到前门读写行为。

相关推荐
世微 如初6 天前
AP5125大功率LED恒流驱动实战:地摊灯项目从原理图到调试笔记
驱动开发·芯片·led电源驱动·降压恒流ic
謓泽7 天前
【6.14】dB/dBm 标准两步换算流程(通用 / 用途说明)
芯片·公式·半导体·射频
百能云芯11 天前
车规级元器件供应商怎么选?┃百能云芯(icdeal)
ai·芯片·百能云芯
shiyuankeyan12 天前
AICsE 2026 Workshop 2征稿|高可靠半导体器件与集成电路的仿真、建模、设计与优化
集成电路·芯片·半导体·电子
youngerwang13 天前
【从搬运工到协处理器:网卡芯片架构、算法、验证与边缘演进深度剖析】
网络·算法·架构·芯片
半条-咸鱼13 天前
【INACCESSIBLE_BOOT_DEVICE】安装 Config Tool 后 Windows 蓝屏,最终通过 VMware 虚拟机解决
windows·stm32·vmware·芯片
JSMSEMI1114 天前
JSM12N60F 600V N沟道功率MOSFET
人工智能·芯片
森利威尔电子-16 天前
森利威尔SL3150H |PIN TO PIN 替换 MRDC88-1 10~150V 输入 0.6A 降压电源芯片
单片机·嵌入式硬件·物联网·集成电路·芯片
zhangfeng113316 天前
那nvidia orim车载gpu tee安全飞地 和天垓 100 gpgpu的 飞地 ,大概有多大存储量 ,解密流程
人工智能·深度学习·安全·语言模型·gpu算力·芯片
zhangfeng113316 天前
天数智芯天垓 100 加密大模型分布式部署安全方案
人工智能·分布式·安全·transformer·gpu算力·芯片