核心内容摘要
Xinference-v1.17.1网络安全应用:恶意代码智能检测
仿真文件仿真文件可以分为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; endfunctiontop_testexample路径下的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,
; uvm_config_db#(int)::set(this,*passiveMaster.inst, waveformDebuggerMonEnable,
; uvm_config_db#(int)::set(this,*passiveSlave.inst, waveformDebuggerMonEnable,
; uvm_config_db#(int)::set(this,*activeSlave.inst, waveformDebuggerMonEnable,
;test还在build phase传递了sequence。
uvm_config_db#(uvm_object_wrapper)::set(this, axiSve
axiEnv
activeMaster.sequencer.run_phase, default_sequence,userSimpleSeq::type_id::get());env由于VIP是agentenvironment同样是example文件。
env首先例化了4个agent例化的agent是VIP agentcdnAxiUvmAgent的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);agentexample文件定义了VIP agent的2级子类只做了传递接口1件事。
传递方法是tb传递虚接口子类agent通过虚接口的getPath()获取路径字符串然后通过配置agent的字符串变量实现驱动/检测接口的绑定。
uvm_config_db#(...)::get(this,,vif,vif); __internal_interface_Path string(vif.getPath());seqrsequencer为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);VIPagentCadence 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;transVIP中传输类的类名为denaliCdn_axiTransaction。
首先包含协议信息例如AXI3/
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 ;