Chisel芯片开发入门系列 -- 9. 波形文件生成及时序分析
接续上一篇,本篇继续使用前一篇chisel-examples的例子,继续在Linux下,继续基于chiseltest框架,但本篇会介绍如何生成波形文件,如何使用开源的波形图查看工具对波形进行分析。
在Chisel-examples的例子中,有一个Makefile,其中有如下一段:

如果使用make fifo来构建,则会依次执行make fifo-test和make fifo-view,这个make fifo-view就会调用gtkwave这个波形图查看工具,对波形文件BubbleFifo.vcd进行查看和时序分析。而这个BubbleFifo.vcd则是make fifo-test时生成的波形文件!这个波形文件的生成,是在src/test/scala/fifo//FifoSpec.scala文件中指定的,如下:

其中的WriteVcdAnnotation就是用来指示生成.vcd的波形文件的。其中4条println()是临时调试是所加,以便于确认这一段代码的执行。可以单独地make fifo-test来看一下效果,如下图所示,既有println的那4条语句的输出,还生成了两个.vcd的文件,而其中的第1个便是make fifo-view会使用的文件!

接下来自然是使用make fifo-view来看实际效果了,这个make命令会调用gtkwave程序并以.vcd波形文件为参数,gtkwave程序则会打开图形化的波形显示和分析界面,可以对其中的Buffer(实际可理解为Buffer_0)模块进行分析,也可以对其他模块进行分析。
图中显示的是Buffer模块的,包括输入管脚io_enq_xxx等、输出管脚io_deq_xxx、内部寄存器状态dataReg、随着时间的变化而变化的情况,就是所谓的时序。

耐心一点看,这个时序图重要的其实不是图,而是时序变化,这个变化可以通过工具栏中的【<】和【>】进行“走步”,在Signals列表中选中clock以后,每按一次【>】按钮时序就往后走一个时钟跳变步,相应地可查看输入输出及内部寄存器的值。如果在Signals列表中选中dataReq以后再用【>】,则会按照dataReq的跳变步进行走步,比如dataReq的跳变步可能经过几十个clock周期才会跳变,那么这样一个方式便可以重点关注dataReq的变化情况。
从右往左看,最右边的Wave部分波形图体现的是时序特征,这个时序特征是在TestBench(也就是src/test/scala/fifo/下的test文件)生成的触发条件,比如TestBench可以定义最初reset信号=1,clock信号翻转几个轮次,然后间隔一定的时间比如100ns以后再进行clock翻转。虽然实际电路上的clock信号都是稳定的周期性翻转的,但TestBench并不受这样的约束,可以自行定义。
中间的Signals部分,是从“电路”的特征,即一个待测的电路模块有那些输入管脚、输出管脚、内部寄存器。
左边的SST则体现的是一个更大的、层次化的“电路”模块。图中的BubbleFifo是一个顶层模块(top Module),其下有4个Buffer模块,这4个Buffer模块从“电路”上来说是一样的,但会“串联”在一起!也就是说,Buffer的deq管脚连Buffer_1的enq管脚,Buffer_1的deq管脚连Buffer_2的enq管脚,等等。这一点,体现在BubbleFifo的电路代码中,如下:

稍微细化读一下这个“电路/芯片”的代码文件BubbleFifo.scala,可以看出它非常强大的地方是“模板化“和“参数化”,所谓”模板化“是说它的输入输出管脚的位数是参数化的,可以是8bit,也可以是16bit甚至32bit或64bit,我们看到的波形图来自于TestBench程序,而TestBench使用的是16bit,直接就将电路模块的”位宽“实例化为16bit了,而BubbleFifo.scala的代码无需根据8bit/16bit进行修改。对于Fifo的”深度“也就是有多少个Buffer模块串接而成,同样是由depth这个参数定义的,在Testbench中使用的是4,因此整个顶层电路模块就有4个Buffer模块,也就是在波形图中看到的Buffer、Buffer_1、Buffer_2、Buffer_3,其中的Buffer可以理解为Buffer_0。
这个模板化、参数化,构成了Chisel语言的“生成式”特征,也就是说Chisel语言的程序,不是一个固定的电路,而是可以通过参数的变化生成8bit/16bit/32bit/64bit以及depth=1/2/4/5等不同宽度和深度的电路。
最后,是Buffer的enq管脚+Buffer_3的deq管脚,作为BufferFifo这个顶层模块的输入输出管脚,连TestBench的相应管脚。这就是Chiseltest框架所作的事情了。
这个gtkwave是一个开源的波形查看工具,在Ubuntu Linux下使用sudo apt-get install gtkwave既可安装,我们看一下这个软件包的情况:

同样注意的是,这个gtkwave工具在Linux下通过包管理器如apt-get可以很容易获取到并使用,在Windows上如何下载使用本文就不做讨论了。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)