为功耗分析生成仿真波形文件及RTL文件列表

一、获取RTL文件列表

RTL文件包括vhdl,v,sv三种文件,可以根据后缀获取工程内部所有文件夹,及子文件夹内部的相关文件。

可以通过shell脚本实现该功能。

 1 #!/bin/bash
 2 ######################################################################
 3 ##                                                                  ##
 4 ##   遍历指定目录获取当前目录下指定后缀(如txt和ini)的文件名            ##
 5 ##                                                                  ##
 6 ######################################################################
 7  
 8 ##递归遍历
 9 traverse_dir()
10 {
11     filepath=$1
12     
13     for file in `ls -a $filepath`
14     do
15         if [ -d ${filepath}/$file ]
16         then
17             if [[ $file != '.' && $file != '..' ]]
18             then
19                 #递归
20                 traverse_dir ${filepath}/$file
21             fi
22         else
23             #调用查找指定后缀文件
24             check_suffix ${filepath}/$file
25         fi
26     done
27 }
28  
29  
30 ##获取后缀为txt或ini的文件
31 check_suffix()
32 {
33     file=$1
34     
35     if [ "${file##*.}"x = "vhdl"x ] || [ "${file##*.}"x = "sv"x ] || [ "${file##*.}"x = "v"x ];then
36         echo $file
37     fi    
38 }
39  
40 #测试指定目录  /data_output/ci/history
41 traverse_dir /data_output/ci/history

注意中括号前后的空格注意一定要敲上

 

二、获取fsdb波形文件

在TESTBENCH中添加下列代码

initial
    if($test$plusargs("DUMP_FSDB"))
    begin
        $fsdbDumpfile("testname.fsdb");  //记录波形,波形名字testname.fsdb
        $fsdbDumpvars(0,u_rec_intra_top);   //0表示生成u_rec_intra_top模块及以下所有的仿真数据
        $fsdbDumpSVA();   //将assertion的结果存在fsdb中
        $fsdbDumpMDA(0, top);  //dump memory arrays
        //0: 当前级及其下面所有层级,如top.A, top.A.a,所有在top下面的多维数组均会被dump
        //1: 仅仅dump当前组,也就是说,只dump top这一层的多维数组。
        $vcdpluson;   //下面这两个是保存所有仿真数据
        $vcdplusmemon;
    end
    end
end
    

在Makefile中,编译RTL时,添加 -fsdb 选项

 

三、截取部分fsdb波形

因功耗分析只需要部分波形,故通过分析波形,确定某时间段的波形需求

截取波形需要 fsdbsxtract工具,该工具在安装verdi时会同步安装

对Verilog.fsdb文件使用“-s”命令可以指定自己所需的hierarchy。

Tips:

1)可以指定多个层次结构,

2)要使用斜杠’/‘而不是点’.’
-level命令与$dumpvars命令的参数相似,指定该层次以下导出几层,比如-level1, -level3… 而-level0表示下面的所有层次;
-o命令可以改写你切割出来的波形的名字,取一个容易标记的名字吧,送给将来一定会忘记的你自己;
-bt和-et命令指定begin time和end time,现在你就可以根据时间轴随意切割你想要的波形文件了;

fsdbextract verilog.fsdb -s /top/module1 -o sub.fsdb
fsdbextract verilog.fsdb -s /top/module1 /top/module2/u_sub1 -level0 -o sub.fsdb
fsdbextract verilog.fsdb -s /top/module1 -bt 1ms -et 3ms -o sub.fsdb //bt=begin time, et=end time

 

posted @ 2023-10-07 11:43  yunqing  阅读(141)  评论(0编辑  收藏  举报