APB_SRAM验证平台常规知识点

APB_SRAM验证平台常规知识点
1、验证平台的结构
The UVM testbench structure
在这里插入图片描述
2、各组件的作用
1)Driver:注册于component,将apb_seq_item作为传入数据类型,实例化apb_mstr_agent_config/apb_interface,声明端口uvm_analysis_port用于将apb_seq_item经由driver传入scoreboard,构建new函数/build_phase函数/connect_phase函数;构建run_phase任务用于,reset interface,调用读/写任务将地址/数据经由sequencer和driver在规定的时序规则下发送给DUT,分别定义了读/写任务,根据APB 3.0的时序要求。
2)Monitor:注册于component,将实例化apb_mstr_agent_config/apb_interface,声明两个端口uvm_annlysis_port,一个用于将apb_seq_item经由monitor传入是scoreboard,一个用于将apb_seq_item经由monitor传入coverage monitor;构建new函数/build_phase函数/connect_phase函数;构建run_phase任务,在PSLVERR为高时,注入的读写error是否被监测到,是则报告相应信息,否则报error,在正常读/写传输时,将monitor中的apb_seq_item传入scoreboard/coverage monitor。
3)Sequencer:注册于component,将apb_seq_item作为传入数据类型,构建new函数/build_phase函数/connect_phase函数。
4)Coverage monitor:注册于component,实例化apb_seq_item,定义覆盖组,收集覆盖点ADDR/DATA/op_type,三者的交叉覆盖率;构建new函数;定义写函数,将apb_seq_item写入后,调用apb_cg.sample()开始覆盖率收集。
5)Agent:注册于component,实例化apb_mstr_agent_config/apb_master_driver/apb_monitor/apb_coverage_monitor/apb_mstr_sequencer;构建new函数;构建build_phase函数其中,检查config_db是否配置apb_mstr_agent_config成功,否则报fatal,是则cerate apb_mntr,如果agent是否为UVM_ACTIVE,是则create apb_mstr_drvr/apb_mstr_seqr,如果has_function_coverage为高,则create apb_cov_mntr。构建connect_phase其中,如果agent是否为UVM_ACTIVE,是则连接driver/sequencer,如果has_function_coverage为高,则连接monitor/coverage monitor。
6)Scoreboard:注册于component,声明两个端口uvm_analysis_imp_decl,一个用于连接driver到scoreboard,一个用于连接monitor到scoreboard;构建new函数/build_phase函数/connect_phase函数/run_phase任务,定义两个写函数,一个用于由driver向scoreboard写数据,一个用于由monitor向scoreboard写数据;定义比较函数,进行地址/数据比较,不匹配则报error;定义数据收集包,将期待的地址/数据收集存储在队列中。
7)Env:注册于component,实例化apb_env_config/apb_scoreboard/apb_mstr_agent,构建new函数;构建build_phase函数其中。检查config_db是否配置apb_env_cfg成功,失败则报fatal,是则create apb_mstr_agnt,如果han_scoreboard为高则create apb_scb,使用config_db配置apb_env_cfg.apb_mstr_agnt_cfg;构建connect_phase,如果has_scoreboard为高,连接driver/monitor到scoreboard;构建run_phase任务。
8)Test:注册与component,不同的测试用例之间差异很大,所以从uvm_test派生出来的类各不相同。任何一个派生出的测试用例中,都要实例化env,只有这样,当测试用例在运行的时候,才能把数据正常地发给DUT,并正常地接收DUT的数据。
(1)apb_base_test:实例化apb_env_config/apb_environment,构建new函数;构建build_phase函数其中,create apb_env_cfg/apb_env,检查config_db是否配置apb_env_cfg.apb_mstr_agnt_cfg.apb_intf是否成功,失败则报fatal,成功则配置env中has_scoreboard为高、env-agent中has_function_coverage为高、env-agent中is_active为UVM_ACTIVE,使用config_db配置apb_env-cfg;构建connect_phase函数/run_phase任务;定义读任务从特定的地址读取数据传入scoreboard中期待的数据队列;定义读任务从定向/随机化地址中读取数据;定义写任务向定向/随机化地址写入定向/随机化数据;定义任务reset DUT;定义任务使用内存越界错误启动读取传输;定义任务使用内存越界错误启动写入传输。
(2)apb_reg_por_read_test:构建new函数/build_phase函数/connect_phase函数,构建run_phase任务其中,采用objection机制–重置后读取全部memories。
(3)apb_directed_reg_write_read_test:构建new函数/build_phase函数/connect_phase函数;构建run_phase任务其中,采用objection机制–将低/中/中高/高范围定向数据写入所有的memories,然后读取。
(4)apb_rand_reg_write_read_test:构建new函数/build_phase函数/connect_phase函数,构建run_phase任务其中,采用objection机制–将随机化数据写入所有的memories,然后读取。
(5)apb_reg_alias_test:构建new函数/build_phase函数/connect_phase函数,构建run_phase任务其中,采用objection机制–将每个数据模式写入memory以进行别名测试。
(6)apb_slv_err_test:构建new函数/build_phase函数/connect_phase函数,构建run_phase任务其中,采用objection机制–在agent_cfg配置上设置期望错误位为高,使用定向地址和随机数据触发写传输,使用定向地址触发读传输。
3、数据流
数据由apb_seq_item产生,它继承于uvm_sequence_item,内有数据类型ADDR,DATA,控制信号op_type,进行约束,注册在field automation中,根据不同需要生成不同的sequence,如读数据,写数据,在error时的读写传输等类。最后将这些不同的sequence生成不同的测试用例,测试用例在层次化的配置下传送到driver,在driver中再经由interface发送给DUT,产生激励。还有一路将其得到的item拷贝发送给scoreboard。将DUT的响应信号由monitor收集,然后将其收集的item分别发送给coverage monitor和scoreboard。在scoreboard进行数据比较,并报告出对应的信息。
4、功能点提取依据
根据design specify 及APB 3.0 协议,提取三个功能点:
1)根据design specify,首先对默认的复位值进行读取验证,即目标满足read_val = default_val;
2)针对启用或禁用可配置的等待状态,可以采用定向/随机的读写测试在有无等待状态下进行验证,即op_type = write/read;address = all available addr;data = all valid data range。
3)SRAM的有效地址空间为0-63,对此让SRAM内核收到超出地址限制的读或写请求时,它会通过将PSLVERR信号设为1来响应错误,即op_type = read/write;address = out of bound address,data = patterns。
5、测试用例思路
根据功能点的提取编写相应的测试用例
6、怎么实现比较
首先进行地址位的比较。当地址一致时,再进行数据位的比较。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值