代码覆盖率是衡量验证进展的最简易的⽅式。它的作⽤是检查代码是否冗余,设计要点是否遍历,被检测的对象是RTL代码,⽽代码覆盖率的检测⼀般由⼯具⾃动⽣成的。⾏覆盖率(Line coverage)、分⽀覆盖率(Branch coverage)、路径覆盖率(Path Coverage)、翻转覆盖率(Toggle coverage)、条件覆盖率(Conditional coverage)、有限状态机覆盖率(FSM coverage)。
以下几种情况可以直接exclude:
1). 设计RTL代码中一个模块被多次复用,传参实现不同功能如:
此处复用了tx q和rx q的模块,由于cmd q描述符链表长度只能是3,因此该处不可能达到19所以此处覆盖率可以exclude
2).设计RTL代码中使用了某些厂商提供的库,如:
此处使用了ram的仿真模型,可以exclude
3).一个模块被多次例化,只分析其中一个即可,如:
此处一个模块被多次复用,将其中一个覆盖率提升至收敛后没问题,其余都可以exclude
以下几种情况需要补充测试用例:
1).现有测试用例没有覆盖到的点,如:
此处为tx q描述符长度,由于所有的测试用例描述符链表长度都没有达到19个,所以此处没有覆盖到,补充测试用例
2).仿真不容易覆盖到的点,直接force如:
Wcnt写进fifo计数,由于当该fifo为空或者rrsp fifo为空的时候读使能就拉高,而rdy得busy时才会拉低,因此该计数很难大于1000。所以直接force rdy为0