NVDLA UVM验证环境搭建
来源:验证工程师的自我修养发布时间:2022-04-064735浏览
询问 AI一 、NVDLA 介绍
1.1 nvdla介绍
NVDLA 是英伟达开源的一套深度学习加速器的IP,软硬件全开源,对于软硬件工程师来说都是一套非常好的学习资源。里面的UVM testbench也写的非常精彩,很值得学习。
1.2 下载
https://github.com/nvdla/hw.git注意,默认clone下来的分支是nvdlav1分支,里面的东西不太全,我们需要切到master分支
git checkout master1.3 安装依赖的库文件
$ sudo yum update
$ sudo yum install g++ cmake libboost-dev python-dev libglib2.0-dev libpixman-1-dev liblua5.2-dev swig libcap-dev libattr1-de
1.4 安装systemc
$ wget -O systemc-2.3.0a.tar.gz http://www.accellera.org/images/downloads/standards/systemc/systemc-2.3.0a.tar.gz
$ tar -xzvf systemc-2.3.0a.tar.gz
$ cd systemc-2.3.0a
$ sudo mkdir -p /usr/local/systemc-2.3.0/
$ mkdir objdir
$ cd objdir
$ ../configure --prefix=/usr/local/systemc-2.3.0
$ make
$ sudo make install
1.5 安装 Perl相关的包
$ wget -O YAML-1.24.tar.gz http://search.cpan.org/CPAN/authors/id/T/TI/TINITA/YAML-1.24.tar.gz
$ tar -xzvf YAML-1.24.tar.gz
$ cd YAML-1.24
$ perl Makefile.PL
$ make
$ sudo make install
$ wget -O IO-Tee-0.65.tar.gz http://search.cpan.org/CPAN/authors/id/N/NE/NEILB/IO-Tee-0.65.tar.gz
$ tar -xzvf IO-Tee-0.65.tar.gz
$ cd IO-Tee-0.65
$ perl Makefile.PL
$ make
$ sudo make install
二、环境变量修改
2.1 配置eda工具路径
修改顶层的Makefile文件,主要是NV_打头的一些环境变量,将他们指向自己的路径。同时建议修改USE_NV_ENV变量,将它置为1,这样后面make的时候,就可以跳过询问环节。下图为我修改过后的,以供参考。

2.2 生成tree.make文件
NVDLA的flow包含了很多makefile文件,他们都会去include顶层的tree.make文件。这个文件需要在第一次运行时生成下:
make
三、编译工程
3.1 编译RTL
nvdla的rtl代码是脚本生成的,第一步就是要生成verilog的一些model和nvdla的rtl code。
运行命令:
./tools/bin/tmake -build vmod
如果一切顺利的话,我们可以看到PASS的语句打印出来

生成的文件位于outdir/nv_small/vmod目录下,有兴趣的同学可以去查看下。
3.2 编译testbench
与RTL类似,nvdla的testbench也有很多代码是靠脚本生成。
为了更方便后面对testbench的debug,我们修改makefile文件,加入一些自己的编译参数, 文件路径位于:
verif/testbench/trace_generator/Makefile
verif/testbench/trace_player/Makefile

此处加入了debug_acces,以及-lca -kdb等编译参数,方便后面开启Verdi GUI 模式进行debug。运行命令:
./tools/bin/tmake -build ready_for_test这里很不幸发生了点错误,如下图所示

nvdla的flow不会将log都打印到控制台上,需要我们自己去查看相应的log,log都位于outdir/目录下,一般来说我们找最新的log文件就可以,因为错误发生后整个flow就停下来了。通过下述命令,找到最顶端的log文件,搜Error等字样。我这里是Makefile修改的时候引入了一些编码的错误,vim命令窗口输入set list可以比较清晰地发现问题。
ls -lt outdir/*.log | less另外,由于我本地采用的是vcs 2018的版本,里面没有systemc 2.3.0,与nvdla指定的版本不一致,需要修改部分文件以匹配,涉及的代码可以参考我的github:
https://github.com/troyguo/nvdla_patch_vcs20183.3 编译Cmodel
最后,还需要编译下systemc的model,与上述两步骤类似的,不再赘述
./tools/bin/tmake -build cmod_top四、跑test
编译整个工程后,我们就可以跑nvdla的test了。nvdla的testlist存在于./verif/regression/testplans/路径下。我们在makefile指定的配置为nv_small,入口即为nv_small.py文件,这个文件又包含了其他的一些testlist文件。我们找个test跑跑看:
phython3 verif/tools/run_test.py -P nv_small dc_24x33x55_5x5x55x25_int8_0 -outdir
dc_24x33x55_5x5x55x25_int8_output -wave -v nvdla_utb
一切顺利的话,我们将看到一个很风骚的pass 语句

五、Debug
我们可以修改verif/testbench/trace_player/Makefile里面的run选项,加上-gui -verdi在跑test时候就启动图形界面对testbench debug。另外,nvdla会保存run的command到test目录, 即run_trace_player.sh。另一个run_verdi.sh文件可以启动verdi,加载filelist,查看波形。

,我们可以在里面run_trace_play.sh中追加-gui -verdi来启动verdi对nvdla的uvm testbench进行交互式debug,下断点查看运行状况。
六、总结
优秀的开源代码是一座宝库,nvdla里面有很多值得学习的代码和技巧,后续将继续分享代码分析,敬请关注。也欢迎大家私信加我好友,一起来探讨各类验证技术。
新闻来源:验证工程师的自我修养,文中所述为作者独立观点,不代表icspec立场。更多精彩资讯请下载icspec App。如对本稿件有异议,请联系微信客服specltkj。

