news 2026/5/6 10:08:10

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/5/2 21:30:21

OFA图文匹配模型开源镜像部署:免编译、免依赖、开箱即用

OFA图文匹配模型开源镜像部署:免编译、免依赖、开箱即用 1. 这不是“又要配环境”的模型,是真能直接跑的图文理解工具 你有没有试过部署一个视觉语言模型,结果卡在安装 PyTorch 版本、CUDA 驱动、transformers 兼容性上,折腾半天…

作者头像 李华
网站建设 2026/5/1 16:53:30

mT5中文-base零样本增强模型效果展示:用户评论情感中性化增强前后

mT5中文-base零样本增强模型效果展示:用户评论情感中性化增强前后 1. 这不是普通改写,是让文字“稳下来”的新方式 你有没有遇到过这样的情况:用户评论里明明只是简单一句“这个产品还行”,模型却硬生生判成“强烈推荐”&#x…

作者头像 李华
网站建设 2026/5/1 18:00:45

GLM-Image快速上手教程:3步完成AI图像生成环境搭建

GLM-Image快速上手教程:3步完成AI图像生成环境搭建 1. 为什么你需要这个教程? 你是不是也遇到过这些情况: 想试试最新的国产图像生成模型,但看到“34GB模型”“CUDA 11.8”“HF_HOME配置”就关掉了网页?下载了镜像&…

作者头像 李华
网站建设 2026/5/1 7:58:51

小白友好!SiameseUIE模型部署与实体抽取入门教程

小白友好!SiameseUIE模型部署与实体抽取入门教程 你是不是也遇到过这样的问题:一段新闻稿里藏着十几个名字和地名,手动圈出来要花十分钟;客户发来一长串产品描述,想快速提取“负责人”和“交付城市”,却只…

作者头像 李华
网站建设 2026/5/1 5:33:48

Z-Image-Turbo_UI界面提示词结构拆解,提升生成质量

Z-Image-Turbo_UI界面提示词结构拆解,提升生成质量 在使用Z-Image-Turbo模型进行图像生成时,很多人会发现:同样的模型、同样的参数设置,不同人写出的提示词(prompt)却带来截然不同的结果——有的画面精致细…

作者头像 李华
网站建设 2026/5/1 10:11:22

Hunyuan-MT-7B-WEBUI部署全流程,新手也能懂

Hunyuan-MT-7B-WEBUI部署全流程,新手也能懂 你是不是也遇到过这样的情况:看到一个超厉害的翻译模型介绍,心里直呼“这太适合我们单位处理多语种公文了”,可点开文档第一行就写着“需配置CUDA 12.1PyTorch 2.3transformers 4.45……

作者头像 李华