当前位置:网站首页>吃透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的拓展,所以也大差不差,知识语法上稍微有些区别,下一篇我们共同学习。
边栏推荐
- Huahao Zhongtian sprint Technology Innovation Board: perte annuelle de 280 millions de RMB, projet de collecte de fonds de 1,5 milliard de Beida Pharmaceutical est actionnaire
- C language staff management system
- FS4059C是5V输入升压充电12.6V1.2A给三节锂电池充电芯片 输入小电流不会拉死,温度60°建议1000-1100MA
- XML入门三
- 常见 content-type对应表
- MySQL8版本免安装步骤教程
- Detailed explanation of Fisher information quantity detection countermeasure sample code
- OPPO Find N2产品形态首曝:补齐各项短板
- WS2811 M是三通道LED驱动控制专用电路彩灯带方案开发
- Getting started with the go language is simple: go implements the Caesar password
猜你喜欢

逆向调试入门-PE结构-资源表07/07

OpenHarmony应用开发之如何创建DAYU200预览器

分布式BASE理论

華昊中天沖刺科創板:年虧2.8億擬募資15億 貝達藥業是股東

英视睿达冲刺科创板:年营收4.5亿 拟募资9.79亿

Introduction to reverse debugging PE structure resource table 07/07

Fisher信息量检测对抗样本代码详解

免费、好用、强大的轻量级笔记软件评测:Drafts、Apple 备忘录、Flomo、Keep、FlowUs、Agenda、SideNote、Workflowy

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

Huahao Zhongtian sprint Technology Innovation Board: perte annuelle de 280 millions de RMB, projet de collecte de fonds de 1,5 milliard de Beida Pharmaceutical est actionnaire
随机推荐
Doctoral application | West Lake University Learning and reasoning system laboratory recruits postdoctoral / doctoral / research internship, etc
CVPR 2022 | 大幅减少零样本学习所需的人工标注,提出富含视觉信息的类别语义嵌入(源代码下载)...
remount of the / superblock failed: Permission denied
Flet tutorial 03 basic introduction to filledbutton (tutorial includes source code) (tutorial includes source code)
一次 Keepalived 高可用的事故,让我重学了一遍它
XML入门一
分布式BASE理论
Getting started with the go language is simple: go implements the Caesar password
C语言中学生成绩管理系统
C语言图书租赁管理系统
MySQL 45 lecture - learn the actual combat notes of MySQL in Geek time 45 lecture - 06 | global lock and table lock_ Why are there so many obstacles in adding a field to the table
Openharmony application development how to create dayu200 previewer
Node mongodb installation
Introduction to XML I
中邮科技冲刺科创板:年营收20.58亿 邮政集团是大股东
锐成芯微冲刺科创板:年营收3.67亿拟募资13亿 大唐电信是股东
MySQL8版本免安装步骤教程
C语言程序设计选题参考
易周金融 | Q1保险行业活跃人数8688.67万人 19家支付机构牌照被注销
CommVault cooperates with Oracle to provide metallic data management as a service on Oracle cloud