AHB_mtx是一个适配于ahb通讯协议的多端口仲裁ip,可以实现单端口访问,多端口串并行访问,默认master配置,地址映射,优先级仲裁等功能;针对这些功能点我采用了测试序列测试配合功能覆盖率收集的方式进行动态验证,后面也针对测试完备性,对非法地址访问,复位操作进行了完备性测试。这一节纪录了AHB_mtx的uvm验证环境搭建。
ahb_mtx最多可以容纳15个mst和15个slv端口,在我的testbench里,我采用之前ahb_ram用到的AHB VIP中的三个ahb_mst_agt作为mtx的mst,而将三个ahb_ram作为mem连接到mtx的slv端口。集成如下。
在做好dut例化、ahb_ram例化和接口连接后,在tb中通过config_db的方式将tb中的vif传到三个mst_agt, base_test, env,virt_sqr。至此tb中做的事情就结束了。
接下来在base_test里面,首先从tb中拿到vif并且放到cfg中,配置mst_agent和ahb_ram的个数以及多个ahb_ram的地址(这些参数和配置的函数放在cfg中,这里是调用函数配置),然后创建并且build寄存器模型rgm, 通过config_db将rgm传到下一层env中,也将rgm的句柄放到cfg中。
接下来在env里面,在build_phase阶段从上层拿到cfg和rgm后,根据mst_agent的数量mst_mun创建多个mst_agent,并且将cfg传到各个mst_agent,将rgm使用config_db配往下面所有层。在connect_phase阶段,将mst_agt的sqr句柄都穿到virt_sqr中,也将各个mst_agt中的sequencer通过adapter与rgm的map相连,将agt_monitor通过analyse_port与cov,predictor连接。
至此,验证环境就基本搭建完毕。整个验证环境运行基本如下,预先在base_test里配置好mst_num和slv_num以及slv端的地址范围,然后将test中将包含约束的virt_sqe挂载到virt_sqr上驱动整个环境跑起来。当然,在virt_sqe中可以选择使用·uvm_do_on的方式挂载virt_sqr,也可以直接使用rgm的方法通过uvm_map去挂载virt_sqr。