news 2026/4/29 6:01:21

Cadence AXI VIP(2)——示例环境解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Cadence AXI VIP(2)——示例环境解析

仿真文件

仿真文件可以分为3类,在不同路径下,分别是VIP通用文件、AXI VIP文件和example文件,首先建议将example拷贝到VIPCAT的路径之外。

/usr/Cadence/vipcat/vipcat_11_30_106/tools/denali_64bit/ddvapi/sv /usr/Cadence/vipcat/vipcat_11_30_106/tools/denali_64bit/ddvapi/sv/uvm/cdn_axi /usr/Cadence/vipcat/vipcat_11_30_106/tools/denali_64bit/ddvapi/sv/uvm/cdn_axi/examples/legacy_examples/using_soma_interface/axi4

验证环境

tb

主要是定义了时钟、复位,系统包含1主、1从、1无效主、1无效从,对4个子接口又包了1层总接口,但实际接口均为example文件定义,接口包含获取路径的方法。

string instance_path = $sformatf("%m"); function automatic string getPath(); return instance_path; endfunction

top_test

example路径下的vip_example.f会指定测试用例,也可以直接通过生成路径下csh脚本修改。

test首先会例化sve,这是个example文件,就是把env和sqrt包在了一起。

axi4UvmUserSve axiSve0;

test在build phase对VIP进行了配置,VIP以agent形式例化,*后是4个agent的名字,然后通过agent的inst成员进行配置。

uvm_config_db#(int)::set(this,"*activeMaster.inst", "waveformDebuggerMonEnable", 1); uvm_config_db#(int)::set(this,"*passiveMaster.inst", "waveformDebuggerMonEnable", 1); uvm_config_db#(int)::set(this,"*passiveSlave.inst", "waveformDebuggerMonEnable", 1); uvm_config_db#(int)::set(this,"*activeSlave.inst", "waveformDebuggerMonEnable", 1);

test还在build phase传递了sequence。

uvm_config_db#(uvm_object_wrapper)::set(this, "axiSve0.axiEnv0.activeMaster.sequencer.run_phase", "default_sequence",userSimpleSeq::type_id::get());

env

由于VIP是agent,environment同样是example文件。
env首先例化了4个agent,例化的agent是VIP agent(cdnAxiUvmAgent)的example定义的子类。

axi4UvmUserActiveMasterAgent activeMaster; axi4UvmUserActiveSlaveAgent activeSlave; axi4UvmUserPassiveAgent passiveSlave; axi4UvmUserPassiveAgent passiveMaster;

env在build phase对VIP进行了配置,通过cfg类实现。

activeMasterCfg.is_active = UVM_ACTIVE; activeMasterCfg.PortType = CDN_AXI_CFG_MASTER; uvm_config_object::set(this,"activeSlave","cfg",activeSlaveCfg);

agent

example文件定义了VIP agent的2级子类,只做了传递接口1件事。传递方法是tb传递虚接口,子类agent通过虚接口的getPath()获取路径字符串,然后通过配置agent的字符串变量实现驱动/检测接口的绑定。

uvm_config_db#(...)::get(this,"","vif",vif); __internal_interface_Path = string'(vif.getPath());

seqr

sequencer为example文件,包含了主/从agent的seqr。

cdnAxiUvmSequencer masterSeqr; cdnAxiUvmSequencer slaveSeqr;

seq

示例使用sequence为userSimpleSeq,为example文件,从前面可以看到发给了master agent的seqr。seq内容是发送4次长burst传输和8次随机传输,通过约束trans进行传输。

denaliCdn_axiTransaction trans; `uvm_do_with(trans, { trans.Type inside {DENALI_CDN_AXI_TR_Read, DENALI_CDN_AXI_TR_Write}; trans.Length > 16; }); get_response(trans);

VIP

agent

Cadence AXI VIP以agent的形式展现,对于多主多从场景需要例化多个agent。类名为cdnAxiUvmAgent,包含常规的monitor、driver和sequencer(题外话,VIP竟然都是明码)。
需要注意的是agent不包含虚接口,是通过__internal__interfacePath字符串变量实现传递。

cdnAxiUvmMonitor monitor; cdnAxiUvmDriver driver; cdnAxiUvmSequencer sequencer; cdnAxiUvmInstance inst; cdnAxiUvmMemInstance regInst; cdnAxiUvmMemInstance memoryInst; string __internal__interfacePath; cdnAxiUvmConfig cfg;

trans

VIP中传输类的类名为denaliCdn_axiTransaction。
首先包含协议信息,例如AXI3/4、AXI/ACE、AXI/AXI-Lite。

rand denaliCdn_axiSpecVersionT SpecVer ; rand denaliCdn_axiSpecSubtypeT SpecSubtype ; rand denaliCdn_axiSpecInterfaceT SpecInterface ;

然后包含传输信息,包括读/写、地址、数据、边带信号。

rand denaliCdn_axiDirectionT Direction ; rand reg [63:0] StartAddress ; rand reg [7:0] Data [] ; rand reg [7:0] Alen ; rand denaliCdn_axiTransferSizeT Size ; rand denaliCdn_axiBurstKindT Kind ; rand reg [4:0] Region ; rand reg [31:0] Auser [] ; rand reg [31:0] Buser [] ;

同时包含一些接口信息,和延时等控制信息。

// id max size rand reg [31:0] ArIdLength; // address max size rand reg [31:0] ArAddrLength; rand reg [31:0] UserData ; rand reg [31:0] BreadyDelay ;
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 0:35:32

从2509到2511升级全记录,Qwen-Image-Edit变化实测

从2509到2511升级全记录,Qwen-Image-Edit变化实测 最近在批量处理工业产品图时,我注意到一个明显现象:用老版本Qwen-Image-Edit-2509修改机械零件表面纹理后,边缘常出现轻微色偏;而同事用新镜像跑同样指令&#xff0c…

作者头像 李华
网站建设 2026/4/28 12:33:50

YOLOv13推理速度实测:比v12更快更准!

YOLOv13推理速度实测:比v12更快更准! 你有没有遇到过这样的场景:模型精度刚调到满意,一跑推理——延迟飙到20ms,实时视频流直接卡成幻灯片?或者换了个新模型,AP涨了0.5,但部署时发现…

作者头像 李华
网站建设 2026/4/20 16:03:40

YOLOv10n模型下载慢?这个镜像帮你提速百倍

YOLOv10n模型下载慢?这个镜像帮你提速百倍 你有没有在深夜调试目标检测代码时,盯着终端里那个卡在“Downloading weights: 5%”的进度条,一边刷新网页查Hugging Face状态,一边怀疑人生? 你是不是刚在新服务器上执行 y…

作者头像 李华
网站建设 2026/4/29 0:36:41

信号发生器CAN总线接口配置核心要点

以下是对您提供的技术博文进行 深度润色与工程化重构后的版本 。全文已彻底去除AI生成痕迹,强化了真实工程师视角下的经验沉淀、故障推演与系统思维;结构上打破传统“模块堆砌”,以 问题驱动—原理穿透—配置落地—实战验证 为主线自然延…

作者头像 李华
网站建设 2026/4/29 0:34:39

开源大模型选型指南:Qwen2.5多语言支持优势详解

开源大模型选型指南:Qwen2.5多语言支持优势详解 1. 为什么多语言能力正在成为大模型的“硬门槛” 你有没有遇到过这样的情况: 用英文提示词生成的内容逻辑清晰、细节丰富,但换成中文就容易跑题?给海外团队部署一个客服助手&…

作者头像 李华
网站建设 2026/4/23 12:45:24

从0开始学AI修图:Qwen-Image-2512-ComfyUI保姆级入门指南

从0开始学AI修图:Qwen-Image-2512-ComfyUI保姆级入门指南 你是不是也经历过这些时刻: 刚收到一批商品图,每张右下角都带着刺眼的供应商水印; 客户临时要改一张海报的背景,可PS里抠图半小时还毛边; 想给老照…

作者头像 李华