1 环境介绍
Synopsys AXI VIP(2020版本)协议支持AXI3、AXI4、ACE、AXI4-Stream。
AXI VIP具体包含 axi_master_agent_svt、axi_slave_agent_svt、axi_interconnect_env_svt、axi_system_env_svt。
axi_master_agent_svt
相当于Master Agent,通过class"svt_axi_port_configuration"配置,通过class "svt_axi_master_transaction"传输数据,其中包含传输类型读/写、地址、写数据数组、burst类型、长度等信息。
axi_slave_agent_svt
相当于Slave Agent,通过class"svt_axi_port_configuration"配置,通过class "svt_axi_slave_transaction"传输数据,其中包含读数据数组、应答数组、ready延时等信息。
Slave中包含存储模型class “svt_mem”,Slave无效模式下通过总线数据直接写入,有效模式下通过sequence写入。同时支持使用read()、write()等方法后门读写。
Slave中包含FIFO模型class “svt_axi_fifo_mem”,对应AXI的FIXED burst模式。
axi_interconnect_env_svt
相当于AXI Interconnect的仿真模型,可以配置主从接口的数量,Interconnect的主接口接从设备,从接口接主设备(定义和Synopsys AXI DW是反的)。每个主/从接口通过class"svt_axi_port_configuration"配置,通过class "svt_axi_master_transaction " 和class "svt_axi_ic_slave_transaction"传输信息(2020版本还不支持svt_axi_ic_master_transaction)。
axi_system_env_svt
System Environment集成了Master Agent、Slave Agent和Interconnect Env(图中没有Interconnect ,可以选择加上)。通过class“svt_axi_system_configuration”配置主接口和从接口的数量,例如没有从接口也可以设置为0,默认最多16主16从,可以通过宏定义将上限最高修改到450,例如主接口+define+SVT_AXI_MAX_NUM_MASTERS_<value>。
顶层配置类class ” svt_axi_system_configuration”中又包含class ” svt_axi_port_configuration”数组。前者配置系统信息,包括主/从数量、虚接口传递、地址映射等信息;后者以数组形式作为前者变量,用来独立配置不同接口信息,包括协议类型、信号宽度、Active/Passive模式、协议检查、覆盖率统计开关等。
使用agent的优势在于轻量化,而使用Environment的优势在环境修改灵活,例如项目中期增减接口。
2 接口
svt_axi_if
svt_axi_if接口对应System Environment,除了时钟复位还包含svt_axi_master_if、svt_axi_lp_if和svt_axi_lp三个从接口数组,分别对应AXI主从和低功耗协议。
logic common_aclk
logic interconnect_resetn
svt_axi_master_if master_if[15:0](common_aclk);
svt_axi_lp_if lp_if[15:0]();
svt_axi_slave_if slave_if[15:0](common_aclk);
svt_axi_master_if
logic internal_aclk;
logic aclk;
接口有2个时钟,aclk是每个svt_axi_master_if独立的时钟,internal_aclk是整个svt_axi_if的全局时钟,可以通过common_clock_mode选择。
svt_axi_master_if接口包含AXI的AW、W、B、AR、R读写通道信号。列举AW通道为例。
logic awvalid;
logic [`SVT_AXI_MAX_ADDR_WIDTH-1:0] awaddr;
logic [`SVT_AXI_MAX_BURST_LENGTH_WIDTH-1:0] awlen;
logic [`SVT_AXI_SIZE_WIDTH-1:0] awsize;
logic [`SVT_AXI_BURST_WIDTH-1:0] awburst;
logic [`SVT_AXI_LOCK_WIDTH-1:0] awlock;
logic [`SVT_AXI_CACHE_WIDTH-1:0] awcache;
logic [`SVT_AXI_PROT_WIDTH-1:0] awprot;
logic [`SVT_AXI_MAX_ID_WIDTH-1:0] awid;
logic awready;
还包含ACE协议的AC、CR、CD窥探通道信号(AW等常规通道也有ACE增加信号),列举AC通道为例。
logic acvalid;
logic acwakeup;
logic actrace;
logic acready;
logic [`SVT_AXI_ACE_SNOOP_ADDR_WIDTH-1:0] acaddr;
logic [`SVT_AXI_ACE_SNOOP_TYPE_WIDTH-1:0] acsnoop;
logic [`SVT_AXI_ACE_SNOOP_PROT_WIDTH-1:0] acprot;
logic [`SVT_AXI_MAX_VMIDEXT_WIDTH-1:0] acvmidext;
logic acvalidchk;
logic acreadychk;
logic [(`CEIL(`SVT_AXI_ACE_SNOOP_ADDR_WIDTH,8))-1:0] acaddrchk;
logic acctlchk;
logic acvmidextchk;
logic acwakeupchk;
还包含AXI4-Stream协议信号
logic tvalid;
logic tready;
logic [`SVT_AXI_MAX_TDATA_WIDTH-1:0] tdata;
logic [`SVT_AXI_TSTRB_WIDTH-1:0] tstrb;
logic [`SVT_AXI_MAX_TDEST_WIDTH-1:0] tdest;
logic [`SVT_AXI_TKEEP_WIDTH-1:0] tkeep;
logic tlast;
logic [`SVT_AXI_MAX_TID_WIDTH-1:0] tid;
logic [`SVT_AXI_MAX_TUSER_WIDTH-1:0] tuser;
此外还包含AXI5的一些新增信号,例如chk后缀,但VIP文档并没有说支持相应协议。
svt_axi_slave_if
diff比较发现,svt_axi_slave_if包含的信号和svt_axi_master_if完全相同,所以不再列举信号。
和svt_axi_master_if的区别在modport定义会有差别,function在一些ACE的分支也会有差别
svt_axi_lp_if
低功耗接口,接口定义包含在AXI3/4协议中
logic cactive;
logic csysreq;
logic csysack;
svt_axi_steam_if
信号定义为标准AXI4-Stream协议接口。
但实际并不会使用,AXI4-Stream VIP使用的也是svt_axi_if。