QSPI功能覆盖率

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中中断状态。

//-----------(待添加)-------------//

.

.

.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值