Skip to main content

chisel测试框架探索….

起因是数电实验课用vivado用verilog写testbench,但是我想用chisel来完成一系列任务,但是我竟然没有什么思路,ysyx的flow是chisel->verilog,然后再用c++编写testbench,而verilator本身会把你的设计变成一个cpp的class,所以在你的testbench中通过对这个class中的某些值做赋值从而达到对整个电路的激励,但是在ysyx群里认为这种方式并不好,不能依赖verilator生成的文件来写testbench,相当于是你的testbench中对于这个类的引用先于verilator这个类的生成,在实际使用时也发现移植性过差,每次对于信号的改变都需要打开这个黑盒来抓信号,所以生出了使用chisel写testbench的想法,其实就是chiseltest,但是据我了解,chiseltest好像已经寄了,具体参考这篇文档https://www.chisel-lang.org/docs/appendix/migrating-from-chiseltest

所以导致我不知道chisel该怎么编写testbench,所以想在网络上探索一下,看看各位大佬们有没有什么解决的办法

现在从文档中得知,chiseltest变成了chiselsim

首先需要了解一下scalatest,因为chiseltest就是这个风格的,scalatest似乎是由很多不同的风格,比如FlatSpec风格就是我需要学习的https://www.scalatest.org/scaladoc/3.2.19/org/scalatest/flatspec/AnyFlatSpec.html稍微有点多,看了一部分了解了一下

然后我去了解了一下chiseltest,这个已经过时的测试框架,主要通过看他的readme,他的readme有一部分给了一些栗子,可以去看一下https://github.com/ucb-bar/chiseltest?tab=readme-ov-file

似乎除了用chisel写testbench,还有其他很多种方式,比如c++,python(cocotb),sv(uvm框架)

其实本质上是因为chisel生成的verilog太丑了,比如说我今天数电实验课想用verilog写一个简单的testbench就觉得特别的别扭,哎

所以最好的期望就是可以用chisel写tb但是仿真速度不会因此变慢,不过….看到一位佬的ppthttps://eminblog.cc/slides/chisel/#21

还是得回归verilog吗呜呜呜

引用sequencer大佬的一句话:验证框架的本质就是如何高效的定义coverage以及如何保证仿真性能的同时 让验证api尽可能简洁 还有就是减少runtime快速的收满coverage (然后之后还有一些话我就听不懂了…

然后他推荐chisel-nix的验证框架,让我去康康

嘶…没了解过nix,打算先去了解一下nix,麻了,里面怎么还有rust啊,感觉门槛有点高呀

我真有点学不明白这个nix呀,感觉看教程都明白,但是教程又感觉很乱,然后一看这个chisel-nix感觉复杂度还挺高的,想放弃了,但忽然想到jyy说的,你觉得难肯定是因为没有找对正确的办法,要学会做减法,当我开始思考什么是正确的方法的时候,我突然就又有信心了,确实,我甚至都没有看过nix的文档….比如我运行nix build的时候我能不能呢个看到他的trace,其实源码是用来了解所有细节的,从源码入手可太蠢了