覆盖率组covergroup编写案例

covergroup cg_apb_write_read_order_group @(posedge clk iff (rstn && penable));
    write_read_order: coverpoint pwrite{
      bins write_write = (1 => 1);
      bins write_read  = (1 => 0);
      bins read_write  = (0 => 1);
      bins read_read   = (0 => 0);
    } 
  endgroup

这段代码定义了一个名为 cg_apb_write_read_order_group 的 covergroup,用于收集 APB 总线写操作和读操作顺序的覆盖率信息。让我们逐行分析:

covergroup cg_apb_write_read_order_group @(posedge clk iff (rstn && penable));: 这行代码定义了 covergroup。

cg_apb_write_read_order_group: covergroup 的名称。

@(posedge clk): 指定在时钟 clk 的上升沿采样数据。

iff (rstn && penable): 指定只有在复位信号 rstn 为高电平且使能信号 penable 为高电平的情况下才进行采样。 这确保了只有在系统正常工作时才收集覆盖率数据。

write_read_order: coverpoint pwrite { … };: 这行代码定义了一个名为 write_read_order 的 coverpoint。

write_read_order: coverpoint 的名称。

coverpoint pwrite: 指定要监控的信号是 pwrite。 pwrite 信号应该是一个布尔类型的信号,表示 APB 总线当前是否进行写操作 (1 表示写操作,0 表示读操作)。

bins write_write = (1 => 1);: 定义了一个名为 write_write 的 bin。

(1 => 1): 表示当 pwrite 的值为 1(写操作)且前一个周期 pwrite 也为 1(写操作)时,该 bin 的计数器加 1。 这代表连续两次写操作。

bins write_read = (1 => 0);: 定义了一个名为 write_read 的 bin。

(1 => 0): 表示当 pwrite 的值为 1(写操作)且前一个周期 pwrite 为 0(读操作)时,该 bin 的计数器加 1。 这代表写操作后紧接着读操作。

bins read_write = (0 => 1);: 定义了一个名为 read_write 的 bin。

(0 => 1): 表示当 pwrite 的值为 0(读操作)且前一个周期 pwrite 为 1(写操作)时,该 bin 的计数器加 1。 这代表读操作后紧接着写操作。

bins read_read = (0 => 0);: 定义了一个名为 read_read 的 bin。

(0 => 0): 表示当 pwrite 的值为 0(读操作)且前一个周期 pwrite 也为 0(读操作)时,该 bin 的计数器加 1。 这代表连续两次读操作。

总结:

这个 covergroup 用于分析 APB 总线上的写操作和读操作的顺序。它通过四个 bin 来统计连续两次写操作、写后读、读后写、连续两次读操作的次数。 iff 条件确保只在系统正常运行时收集覆盖率数据。 为了让这个 covergroup 正确工作,需要在 covergroup 外部维护 pwrite 信号的前一个周期的值,以便进行连续操作的判断。 通常,会在测试平台中实例化这个 covergroup 并定期调用 sample() 方法来收集覆盖率数据。 最后,使用 report() 方法查看覆盖率结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值