1、寄存器的读写值
将所有的寄存器通过寄存器模型获取到,然后通过uvm的方法rgm.default_map.set_check_on_read()来验证寄存器读写值的正确性。
先写后读,判断前后数值的正确性。
2、一般写、读device
将随机地址数据写入device,然后再读取。
3、softreset
softreset功能指的是在FIFO中有数据的时候,向ctrl寄存器的softreset域写1,将FIFO中的现存数据清除。所以验证此功能要先将随机数据写入,使得FIFO中有数据,然后将softreset域置1,然后再重新写入数据,那么总线就会发送重新写入的数据。
4、clk频率
将clk域设置为随机值写入,然后读写。(在各种模式下以及何种数据长度及格式下)
5、不同长度的addr、data、cmd、dummy的写和读
写一个sequence,用来将用到的数据和约束都添加进去,然后在另一个sequence中例化此sequence,利用循环,并添加addr、data、cmd、dummy的约束条件,从而实现在各种命令下、各种地址、数据、等待周期的传输
6、中断
中断用来指示两个FIFO中数据是否已满,对两个FIFO分别设置阈值,并设置中断位为1或0,当写入数据超过所设置的阈值的时候,判断中断是否被拉起。
1、command
将从qspi_monitor端传来的事务中的数据提取
coverpoint transaction_qspi.command{
bins WRITE_ENABLE = {6};
定义四个bins,将几个command的命令都覆盖到
}
2、addr
将从qspi_monitor端传来的事务中的数据提取
coverpoint transaction_qspi.addr{
option.auto_bin_max = 5;
自动创建仓,且最大仓数为5,addr为16位地址数据
}
3、read_write
将从qspi_monitor端传来的事务中的数据提取
coverpoint transaction_qspi.qspi_write {
bins read = {0};
建仓分别覆盖0和1的值,从而可以覆盖读写的值
}
4、cmd_width
将接口传来的数据进行采集
coverpoint vif.command_width{
bins command_width_zero = {0};
将每个数据位宽的可能性都建一个仓,即0-8-16-24-32位宽的5个仓。
}
5、data_width
将接口传来的数据进行采集
coverpoint vif.data_width {
bins data_width_32bit = {32};
将每个数据宽度建一个仓,即32-64-128三个仓。
}
6、spi_quad_mode
将接口传来的数据进行采集
coverpoint vif.spi_quad_mode {
bins quad_mode = {1};
将两种模式0-1建仓覆盖,共两个仓。
}
7、rdata_addr_dummy
将接口传来的数据进行采集
coverpoint vif.rdata_addr_dummy {
bins rdata_addr_dummy_zero = {0};
将读的dummy时间建仓,dummy时间分为0和8两个仓
}
8、wdata_addr_dummy
同上
9、cp_command_spi_quad_mode
cross command,spi_quad_mode;
在模式1和模式0,都有对应的4中command,所以将两个仓交叉覆盖
10、cp_command_cmd_width
cross command,cmd_width;
4个command中,都有对应的5种命令长度,所以将两个仓交叉覆盖
11、cp_command_data_width
cross command,data_width;
4个command中,都有对应的3种数据长度,所以将两个仓交叉覆盖
12、cp_command_rdata_dummy
cross command,rdata_addr_dummy {
bins cp_cmd_dummy = binsof(command) intersect{READ_DATA};
}
//intersect用来指定数值集,binsof用来指定覆盖点
只采集command命令的READ_DATA数据和所有dummy情况的组合
13、cp_command_wdata_dummy
cross command,wdata_addr_dummy {
ignore_bins ign_write_enable=binsof(command) intersect{WRITE_ENABLE};
//忽略所有WRITE_ENABLE命令和wdata_addr_dummy的组合
}
通过apb端监控寄存器变化,收集覆盖率
14、clk
15、statu
16、fifo_count
17、cross(将上述时钟与传输模式以及各种位宽组合)
通过qspi端的事务以及接口可以采集到命令地址数据宽度、单四线模式、中断等,但是还有一些覆盖不到的需要通过apb端,将apb_monitor收集的事务都发送至cgm中,并采集事务中的寄存器的值,如CTRL中的softreset、STATUS中的两个fifo的数据量、CLKDIV中的时钟分频、INTCFG中的触发中断阈值的指定、INTSTATUS中中断状态。
//-----------(待添加)-------------//
.
.
.