Fast RTL-level Verification
- General Coding Guidlines
- Lab --- simprofile
- $display() 输出彩色内容
前面的内容都是在说怎样进行仿真和验证,即如何使用 VCS 。
但是,仿真和验证是不是也有所讲究? 有没有一些标准来衡量设计代码和验证代码的质量?代码写不好导致仿真时间慢、占用资源多?
对于大规模SoC而言,如果代码写的不好的时候,会对仿真的性能影响很大。
为了提升 RTL仿真的性能,可以从两个角度出发:
① 良好的编码风格 (主导)
② 编译的时候,使用+rad
选项 (辅助)
此外,就是要合理的控制编译和仿真的开关选项,以及减少重新编译的次数(一次修改尽可能多的源代码问题)。
General Coding Guidlines
(这里用不好用行数来限制,反正就是尽可能写的小一些就好。)
(这个好像用的不多)
(+prof
统计分析代码各部分内容的的仿真时间和占用的内存大小,可以帮助找出仿真的瓶颈,优化代码。)
现在的 VCS 使用的统计分析命令是 -simprofile
(+prof
已经完全不能使用了)
Lab — simprofile
这里还是用了前面使用的 fsm 的例子。
首选需要在Makefile的编译指令中添加 -simprofile
选项
因为该选项是用于大规模设计的仿真的,但是当前的设计规模太小了,可能统计不到内容,所以首先要扩大设计。
① 在testbench中实例化 1000个模块。
(这里必须使用 genenrate + for 循环来实现,也要用 genvar
来定义变量 index。)
② 对 DPI 也进行适当的修改
(因为只输出一次的时候,统计不到信息,所以后面就改为10000次,增加 C 程序的执行时间。)
完成上述修改之后,执行编译仿真。
仿真结束之后,增加了如下内容:
profileReport.txt
的内容如下:
$display() 输出彩色内容
基本语法格式:
$display("\033[31;41m Hello error!\033[0m");
\033
: Esc 键的ACSII 码
[31
: 字体颜色
41
: 底色
除了字体颜色和底色,还可以设置其他参数,如加粗、下划线等。多个参数之间以 ;
隔开
m
: 结束表示符,终端以设定的格式输出内容后面的内容
\033[0m
: [0m
表示后面的内容以终端默认的方式显示
这个其实是终端的功能,在 display 里面也可以使用。同样的 echo 也可以使用。
可以看出:
① 不同格式参数之间没有顺序要求,也就是说每一种各种对应了一种代码
② \033[30m
这个整体是格式化输出的起止标志