微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > SOS~~~数字后仿流程指导~

SOS~~~数字后仿流程指导~

时间:10-02 整理:3721RD 点击:
RT,想请教一下数字后仿的流程,具体请教的是对于数字后仿需要的文件有哪些?
我打算使用的工具是VCS+Verdi,具体说来就是VCS编译跑仿真,Verdi查看波形修正代码~
因为本人菜鸟,不知道后仿的流程是如何实现的,想问问看大家的想法和做法;
说说自己对前仿的理解,通过编写RTL代码,和testbench来查看波形或者具体输出一些数据查看功能的正确性,但是后仿需要的文件这边我的理解是需要PR后生成的verilog netlist和xxxx.spef和testbench这三个文件,感觉不太对,才问问,望大家不舍指教啊拜谢

后仿流程:需要PR后的netlist and spef 文件,然后用两者来做PT分析, PT生成SDF, 然后仿真的时候读入SDF,添加正确的激励观察输出是否是你的设计结果



    谢谢大侠的回复,想就最后一步请教一下,关于仿真的时候如何将SDF和testbench联合一起加入VCS进行仿真有没有什么指令呢?能简单的举个例子吗?谢谢啦

仿真环境和前仿真一样, 多的一样就是读入SDF,你可以再网上搜索一下语法



    好的,谢谢啦



    是这样的,我现在的工作环境是编译仿真用的VCS,然后查看波形调试代码用的是Verdi;
现在想问问,就是跑VCS有办法产生适合Verdi读取或者说是查看的.fsdb的波形文件吗?如果有具体的指令又是什么?想知道如何运行起VCS输出想要的.fsdb文件,谢谢了

Verdi 能读取的波形格式有几种哈, 我用的都是NC_sim, 你说的VCS 我没有用过。 怎么产生波形我也不大了解的。 你可以再网上搜索看看

用VCS的话,可以直接dump fsdb的文件.
随便搜搜,例子很多的
    Verilog code to dump:
    `ifdef DUMP
    initial
    begin
            $dumpfile("verilog.dump");
            $dumpvars;
    end
    `endif
    `ifdef DUMPFSDB
    initial
    begin
            $fsdbDumpfile("verilog.dump.fsdb");
            $fsdbDumpvars;
    end
    `endif
    Compile using VCS
    vcs -R -V -P $VERDI_HOME/share/PLI/vcs/LINUXAMD64/fsdb_vcs.tab $VERDI_HOME/share/PLI/vcs/LINUXAMD64/fsdb_vcs.a +define+DUMPFSDB verilog.v
    Run Verdi with fsdb
    Verdi -top top -ssf verilog.dump.fsdb &


嗯,但是默认的好像是fsdb,不过还是感谢你的回复,谢谢


首先感谢你的细致回复,不过还是有点儿模糊,就是我这边听说过.fsdb文件但是不知道还有一个dump fsdb;想具体请教一下,这两个的不同,你写的那个ifdef是需要加入到我的testbench里对吧?
你应该看来我之前回复的我的一个工作环境,你的做法跟我的一致,也是用VCS跑仿真编译,然后在verdi里查看波形文件,所以回归到第一个问题,就是这个fsdb和你后面的dumpfsdb有什么区别呢?


dump 是verilog的function 通过dump功能可以导出各种类型的波形文件,vcd  vpd fsdb等等,直接将我发的那些语句加到你设计的任何部分,当然一般都是加到tb里, 即使你走vpd流程,大多也是这样用的,然后稍加修改,比如选择dump的层次 深度什么的. 按照我贴的vcs 命令参数,移位fsdb不是synopsys的标准,必须加载pli后才能正确调用,run 完后就会dump出你要的波形文件.



    你的意思是将你写给我的例子加入testbench就可以在vcs仿真后输出.fsdb的文件了吧?是这个意思吧?
   还有我注意到这个sdf文件并没有谈到,我还想问问这个sdf文件如何加入testbench里?
   这个sdf是有两种情况,一个max一个min,所以这个又需要如何去控制呢?
   可否举例说明一下呢?谢谢



        你的意思是将你写给我的例子加入testbench就可以在vcs仿真后输出.fsdb的文件了吧?是这个意思吧?
   还有我注意到这个sdf文件并没有谈到,我还想问问这个sdf文件如何加入testbench里?
   这个sdf是有两种情况,一个max一个min,所以这个又需要如何去控制呢?
   可否举例说明一下呢?谢谢

顶一下

是的,没错
sdf加载有两种方式,一是vcs命令时直接加参数调sdf,一是在tb里面适应sdf_annote函数加载, min max是指在提取sdf文件是的delay参数包括min max两组值,分别check setup和hold,所以根据你用的sdf corner来决定用max还是min,比如,跑WC,就是为了检查setup,就用max,反之,跑LT就用min了



    嗯,是这样的,我这边才发现工艺厂只给我了一个typ下的captable,所以我抽取spef只抽取了typ下的,然后我导入pt以后得到了一个typ的sdf文件;
现在的问题是我想把这个sdf文件反表进设计里,我想问问这个sdf文件如果按照前辈说的两种方式分别是如何实现的?能举个例子简单说明一下这两种方式吗?谢谢



    嗯,是这样的,我这边才发现工艺厂只给我了一个typ下的captable,所以我抽取spef只抽取了typ下的,然后我导入pt以后得到了一个typ的sdf文件;
现在的问题是我想把这个sdf文件反表进设计里,我想问问这个sdf文件如果按照前辈说的两种方式分别是如何实现的?能举个例子简单说明一下这两种方式吗?谢谢

type也是sdf中delay信息的一个,打开sdf就可以看到,delay信息包括三个值,min max 和type,由于一般后仿速度和规模原因,只写min max去check hold/setup , type一样仿
方法1, vcs -sdf typ:instance_name:filename.sdf  module_name
方法2,直接在tb里加上
initial begin
$sdf_annotate("file.sdf",instance_name,,,TYPICAL)
end
我是这么用的,具体的还可以参考sdf_annotate 任务的具体定义



    谢谢前辈细心的指点,现在回馈一下还有几点不太清楚的地方,还望能一起交流一下;
    对于方法一中里提及的instance和module这两种name有什么区别吗?(这个问题一直以来都有点儿含糊,还望见谅)
    然后就是方法二中,这样的$sdf_annotate(xxxxx),这个写法如果不是跑typ而是跑max和min的话我会像您说的那样写出来,是不是这个需要单独跑呢?每次只能跑一种如果跑typ就得把max和min注释掉,以此类推

来学习学习



    还有,按照前辈给的办法跑VCS的时候报了一个Syntax error ;说是token is $fsdbDumpvars,然后说了一些关于$fsdbDumpvars这个内容,这个是什么问题呢?

贴的只是个示例,你需要根据自己的设计以及需求去处理一下的
fsdbDumpvars任务主要设定dump的参数的,包括层级 深度以及指定信号等等,你可以自己看下这个task的介绍.

hmm ......

Thanks for your sharing.

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top