十二 · 2022年06月13日

SpinalHDL—覆盖率收集

   在做RTL仿真验证时,覆盖率收集往往是我们在验证中需要注意的地方,本篇就SpinalHDL中的验证覆盖率收集做一个简单说明。

sbt配置

   在SpinalHDL里进行仿真验证时,我们的待测试代码会生成Verilog/Systemverilog电路交由Verilator进行仿真,而激励则由scala本身提供,两者之间通过verilator的VPI进行通信交流。SpinalHDL覆盖率的收集在SpinalHDL 1.4.2中开始支持,在我们通过sbt构建项目时,build.sbt的依赖项配置如下:

name := "scalaTest"
version := "0.1"
scalaVersion := "2.11.12"
fork := true
val spinalVersion = "1.4.2"
libraryDependencies ++= Seq(
  "com.github.spinalhdl" % "spinalhdl-core_2.11" % spinalVersion,
  "com.github.spinalhdl" % "spinalhdl-lib_2.11" % spinalVersion,
  compilerPlugin("com.github.spinalhdl" % "spinalhdl-idsl-plugin_2.11" % spinalVersion))
libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.8" % "test"

开启覆盖率收集功能

    有注意上文所给例子的小伙伴或许已经注意到,我们已经开启了覆盖率收集:

val dut=SimConfig.withWave.withCoverage.compile(addSimEnv(10,8))

   SpinalHDL通过指定withCoverage选项来开启覆盖率收集。在《SpinalHDL—基于Scala的测试框架》一文中我们拍完仿真测试用例后在相应目录下每个teseCase会生成一个.dat文件:

843a79558bb26063d14a3633d36e39e4.png

   我们一共跑了五个testCase,因而生成了五个.dat文件。

生成html报告

   由于Verilator生成的.dat文件无法直观阅读,这里我们需要将.dat文件合并并生成html文件。这里需要安装lcov。

#合并覆盖率.dat文件为一个coverage.dat
 verilator_coverage  -write coverage.dat test.dat test_1.dat test_2.dat test_3.dat test_4.dat
#生成coverage.info  
 verilator_coverage  -write-info coverage.info coverage.dat
#生成 html覆盖率报告
genhtml coverage.info --output-directory coverage

   最终会生成一个coverage的文件夹:

3890f103c793b615529453827bb202c3.png

    打开index.html文件即可看到代码覆盖率:

694c7ae5db4ad0a6fd0d3d0420e742b6.png

作者:玉骐
原文链接:Spinal FPGA
微信公众号:
 title=

推荐阅读

更多SpinalHDL技术干货请关注[Spinal FPGA]欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。
推荐阅读
关注数
1579
内容数
131
用SpinalHDL提升生产力
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息