当前位置:网站首页>吃透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的拓展,所以也大差不差,知识语法上稍微有些区别,下一篇我们共同学习。
边栏推荐
- C语言集合运算
- Redis - how to install redis and configuration (how to quickly install redis on ubuntu18.04 and centos7.6 Linux systems)
- Web知识补充
- 2022KDD预讲 | 11位一作学者带你提前解锁优秀论文
- C语言个人通讯录管理系统
- Programmer anxiety
- XML入门一
- JVM series - stack and heap, method area day1-2
- 基于STM32+华为云IOT设计的酒驾监控系统
- Golang 使用 JSON unmarshal 数字到 interface{} 数字变成 float64 类型(转)
猜你喜欢

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

【R语言数据科学】:交叉验证再回首

CommVault cooperates with Oracle to provide metallic data management as a service on Oracle cloud

面试拆解:系统上线后Cpu使用率飙升如何排查?

2022G3锅炉水处理考试题模拟考试题库及模拟考试

一次 Keepalived 高可用的事故,让我重学了一遍它

2022kdd pre lecture | 11 first-class scholars take you to unlock excellent papers in advance

HAProxy高可用解决方案

JVM series - stack and heap, method area day1-2

【Antd】Antd 如何在 Form.Item 中有 Input.Gourp 时获取 Input.Gourp 的每一个 Input 的value
随机推荐
The only core indicator of high-quality software architecture
Openharmony application development how to create dayu200 previewer
做事的真正意义和目的,真正想得到什么
锐成芯微冲刺科创板:年营收3.67亿拟募资13亿 大唐电信是股东
Install Trinity and solve error reporting
Haproxy high availability solution
C语言小型商品管理系统
博士申请 | 西湖大学学习与推理系统实验室招收博后/博士/研究实习等
ASP. Net core introduction I
C语言宿舍管理查询软件
嵌入式编程中五个必探的“潜在错误”
基于STM32+华为云IOT设计的酒驾监控系统
自主工业软件的创新与发展
2022G3锅炉水处理考试题模拟考试题库及模拟考试
苹果5G芯片研发失败:继续依赖高通,还要担心被起诉?
Understanding and difference between viewbinding and databinding
常见 content-type对应表
. Net delay queue
2022危险化学品经营单位主要负责人练习题及模拟考试
2022年起重机械指挥考试模拟100题模拟考试平台操作