当前位置:网站首页>吃透Chisel语言.11.Chisel项目构建、运行和测试(三)——Chisel测试之ScalaTest
吃透Chisel语言.11.Chisel项目构建、运行和测试(三)——Chisel测试之ScalaTest
2022-07-04 12:50:00 【github-3rr0r】
Chisel项目构建、运行和测试(三)——Chisel测试之ScalaTest
硬件设计中的测试通常叫作testbench,直译过来叫作测试工作台,后面还是用testbench来表达。testbench会实例化一个待测件DUT(Design Under Test,待测设计),驱动输入接口并观察输出接口,比较输出是否复合预期。
Chisel中提供了两个测试的方法,分别是chiseltest包中的ChiselTest和iotesters包中的PeekPokeTester。不过iotesters在Chisel 3.5版本开始已经被弃用了,本系列因为是基于Chisel 3.5的,所以就不打算介绍iotesters相关内容了,只介绍ChiselTest相关内容。
Chisel的一个强大之处在于它可以利用Scala的强大功能来写testbench。比如说我们可以在软件模拟器中编写期望的硬件功能,然后把硬件仿真和软件仿真进行比较。这种方法在测试处理器的实现时非常高效。
接下来几篇文章我们就分别介绍Chisel中可能用到的四个测试框架,首先从ScalaTest开始。
ScalaTest
ScalaTest是Scala的测试工具,Chisel的测试工具ChiselTest也是ScalaTest的拓展。因此,我们首先学习一个简单的ScalaTest的例子。
要使用ScalaTest,首先需要在build.sbt中包含对应的库,我们可以直接在最后加上一句:
libraryDependencies += "org.scalatest" %% "scalatest" % "3.1.4" % "test"
也可以在Chisel-template中build.sbt的基础上进行修改(在序列中添加):
libraryDependencies ++= Seq(
"edu.berkeley.cs" %% "chisel3" % chiselVersion,
"edu.berkeley.cs" %% "chiseltest" % "0.5.1" % "test",
"org.scalatest" %% "scalatest" % "3.1.4" % "test"
),
测试通常会在src/test/scala文件夹下编写,运行整个测试可以用下面的指令:
sbt test
下面写一个简单的测试,测试Scala中的整数加法和乘法:
import org.scalatest._
import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.should.Matchers
class ExampleTest extends AnyFlatSpec with Matchers {
"Integers" should "add" in {
val i = 2
val j = 3
i + j should be (5)
}
"Integers" should "multiply" in {
val i = 3
val j = 4
i * j should be (12)
}
}
看起来有点复杂,仔细一读感觉都是大白话,尤其是should和should be,不像是写代码,但确实浅显易懂好记忆。ScalaTest就是支持这种读起来向可执行的规范一样的简单的单元测试。上面的例子中包含了两个测试,测试运行的输出会展示我们给出的规范并展示测试是否通过,输出如下:

这个语法其实很简单,把三个相关的包导入,剩下的照葫芦画瓢就行,就不多解释了。
sbt test这个命令会执行所有的测试,这在递归测试里面很好用。不过如果我们想要运行单个测试或单个测试套件的话,可以用这条命令:
sbt "testOnly ExampleTest"
这里ExampleTest就是我们向运行的测试的类,如果我们不小心拼错了,或者说没这个类,那他也不会报一个红色的错误,只会悄悄输出一句白色的结果:
[info] No tests to run for Test / testOnly
结语
测试是数字设计很关键的一环,必须要好好掌握。ScalaTest相关内容还是很简单的,下一篇文章的ChiselTest才是重头戏。这一篇提到ChiselTest其实就是ScalaTest的拓展,所以也大差不差,知识语法上稍微有些区别,下一篇我们共同学习。
边栏推荐
猜你喜欢

国内酒店交易DDD应用与实践——代码篇

1200. Minimum absolute difference

JVM 内存布局详解,图文并茂,写得太好了!

Interview disassembly: how to check the soaring usage of CPU after the system goes online?

1200. 最小绝对差

CVPR 2022 | 大幅减少零样本学习所需的人工标注,提出富含视觉信息的类别语义嵌入(源代码下载)...

MySQL5免安装修改

如何在 2022 年为 Web 应用程序选择技术堆栈

Qt如何实现打包,实现EXE分享

Go 语言入门很简单:Go 实现凯撒密码
随机推荐
The Secretary of Homeland Security warned immigrants "not to embark on a dangerous journey"
CVPR 2022 | 大幅减少零样本学习所需的人工标注,提出富含视觉信息的类别语义嵌入(源代码下载)...
担心“断气” 德国正修改《能源安全法》
XML入门一
C language programming topic reference
C语言个人通讯录管理系统
锐成芯微冲刺科创板:年营收3.67亿拟募资13亿 大唐电信是股东
. Net delay queue
C language dormitory management query software
Go 语言入门很简单:Go 实现凯撒密码
Automatic filling of database public fields
sharding key type not supported
易周金融 | Q1保险行业活跃人数8688.67万人 19家支付机构牌照被注销
How to choose a technology stack for web applications in 2022
Redis - how to install redis and configuration (how to quickly install redis on ubuntu18.04 and centos7.6 Linux systems)
Animation and transition effects
C语言宿舍管理查询软件
FS4059C是5V输入升压充电12.6V1.2A给三节锂电池充电芯片 输入小电流不会拉死,温度60°建议1000-1100MA
CommVault cooperates with Oracle to provide metallic data management as a service on Oracle cloud
Node mongodb installation