zoukankan      html  css  js  c++  java
  • vcs和verdi的联合仿真

    环境配置

    首先搭建好vcs和Verdi都能工作的环境,主要有license问题,环境变量的设置。在220实验室的服务器上所有软件的运行环境都是csh。所以,所写的脚本也都是csh的语法。

    生成波形文件

    Testbench的编写

    若想用Verdi观察波形,需要在仿真时生成fsdb文件,而fsdb在vcs或者modelsim中的生成是通过两个系统调用$fsdbDumpfile $fsdbDumpvars来实现的。而这两个系统调用并不是Verilog中规定的,是Verdi以pli(Programming Language Interface)的方式实现的。这就需要让vcs编译时能找到相应的库。

    首先在testbench中需加入以下语句

    `ifdef  DUMP_FSDB

    initialbegin

      $fsdbDumpfile("test.fsdb");

      $fsdbDumpvars;

    end

    `endif

    这个编译开关在用vcs编译时加入+define+DUMP_FSDB选项就可以打开,也可以在define.v文件中定义DUMP_FSDB这个宏。

    我们现在所接触的仿真波形文件主要有

    • Wlf文件: WLF波形日志文件,是modelsim的专用文件。这个wlf文件只能是由modelsim来生成,也只能通过modelsim来显示。在用modelsim做仿真时,仿真结束都会生成一个*.wlf的文件(默认是vsim.wlf)。下次就可以通过通过modelsim直接打开这个保存下来的波形。vsim -view vsim.wlf -do run.do其中run.do中的内容为要查看的波形信号。要强调的是不是一个通用的文件文件格式。
    • VCD文件:VCD 是一个通用的格式。 VCD文件是IEEE1364标准(Verilog HDL语言标准)中定义的一种ASCII文件。可以通过Verilog HDL的系统函数$dumpfile,$dumpvars等来生成。我们可以通过$dumpvars的参数来规定我们抽取仿真中某个特定模块和信号的 VCD数据。它主要包含了头信息,变量的预定义和变量值的变化信息。正是因为它包含了信号的变化信息,就相当于记录了整个仿真的信息。可以用这个文件来再现仿真,也就能够显示波形。另外我们还可以通过这个文件来估计设计的功耗。因为VCD是 Verilog HDL语言标准的一部分,因此所有的verilog的仿真器都要能实现这个功能。因此我们可以在verilog代码中通过系统函数来dump VCD文件。另外,我们可以通过modelsim 命令来dump VCD文件,这样可以扩展到VHDL中。具体的命令: vcd file myfile.vcd vcd add /test/dut/* 这个就生成一个含dut下所有信号的VCD数据信息。我们在使用来进行仿真 vsim -vcdstim myfile.com test;add wave /*;run -all;
    • FSDB文件:fsdb文件是verdi使用一种专用的数据格式,类似于VCD,但是它是只提出了仿真过程中信号的有用信息,除去了VCD中信息冗余,就像对 VCD数据进行了一次huffman编码。因此fsdb数据量小,而且会提高仿真速度。我们知道VCD文件使用verilog内置的系统函数来实现 的,fsdb是通过verilog的PLI接口来实现的。$fsdbDumpfile,$fsdbDumpvars等 另外,在VCS仿真器中还有一种VCD+的数据格式VPD,详细情况参照VCS的使用。 注意:WIF:波形中间格式;WLF:波形日志文件。由于在ModelSim下只能打开WLF文件 使用ModelSim行命令vcd2wlf 将VCD文件转化为WLF文件。

    而在dump fsdb文件需要几个文件,Verdi.tab, pli.a 以及与仿真器相应版本的.so库文件(需要修改LD_LIBRARY_PATH变量)。而这些目录在以往的版本中是比较凌乱的。

    在Verdi200907版本之后它的dumper就做了统一化的处理:

    How to Link the New Unified Dumper?

    Prerequisites:

    • ${NOVAS_INST_DIR} : 

    Verdi/Siloti install directory.

    • ${PLATFORM} :

    LINUX: Linux OS (32-bit)

    LINUX64: Linux OS (64-bit)

    SOL2: SunOS 5.x (32-bit)

    SOL7: SunOS 5.x (64-bit)

    IBM5: IBM 5.1

    • Tab file:

    novas.tab

    • LD_LIBRARY_PATH

    ${NOVAS_INST_DIR}/share/PLI/lib/${PLATFORM} needs to be  added as one of the

    LD_LIBRARY_PATH searching paths all the time.

    • Novas banner:

    *Novas*

    • novas.vhd file:

    For VHDL and mixed language users who transfer from the old FSDB dumper, the first time use of new unified FSDB dumper needs the “novas.vhd” to be re-compiled (or re-analyzed) if the FSDB dumping commands have been specified in the VHDL design.

    The related unified dumper directories are:

    l  ${NOVAS_INST_DIR}/share/PLI/VCS

    l  ${NOVAS_INST_DIR}/share/PLI/MODELSIM

    l  ${NOVAS_INST_DIR}/share/PLI/IUS

    l  ${NOVAS_INST_DIR}/share/PLI/lib

    在我设的vcs环境中(csh)中设计的脚本如下

    #!/bin/tcsh

    if(-esimv)then

       m-rsimv

    endif

     

    if(-esimv.daidir)then

       m-rfsimv.daidir

    endif

     

    if(-ecsrc*)then

       m-rfcsrc

    endif

     

    vcs0809

     

    #verdi env setting

    setPLATFORM=LINUX

    setNOVAS_INST_DIR=/opt/spring/verdi201004

    setenvLD_LIBRARY_PATH${NOVAS_INST_DIR}/share/PLI/lib/${PLATFORM}:${LD_LIBRARY_PATH}

     

    vcs -l vcs.log

        -notice 

        -line -debug_all 

        -P $NOVAS_INST_DIR/share/PLI/VCS/$PLATFORM/novas.tab

           $NOVAS_INST_DIR/share/PLI/VCS/$PLATFORM/pli.a

        -f vcs.args

    ./simv

    需要注意:

    l  Csh中设置环境变量,需把环境变量用{}括起来,这一点我试了很多次,它确实不如bash的解析器更加智能。

    l  在220的服务器上,vcs的版本是201006的,而Verdi的版本时间比较低,编译时会提示,相应的libsscore_vcs201006.so文件找不到。现在我用的Verdi的版本是201004,而vcs的版本是200809

    其中的vcs.args的参考脚本如下(以intra mode decision为例)

    +libext+.v

    +v2k

    +acc

    +define+DUMP_FSDB

    -y http://www.cnblogs.com/rtl

    -work work

    //

    // Testbench files

    //

    +incdir+http://www.cnblogs.com/bench

    http://www.cnblogs.com/bench/tb_ip_mode_decision.v

    // RTL files

    //

    +incdir+http://www.cnblogs.com/rtl

    http://www.cnblogs.com/rtl/ip_mode_decision.v

    http://www.cnblogs.com/rtl/defines.v

    http://www.cnblogs.com/rtl/timescale.v

    在csh中运行

    ./run_vcs

    即可生成Verdi所需要的fsdb文件

    之后运行以下命令启动Verdi

    verdi -2001 -f vcs.args -ssf test.fsdb

    Verdi调试

    Verdi调试主要分为以下几步

    • Load design and testbench into Debussy;
    • 打开nWave,载入对应的FSDB;
    • 在nTrace中将要观察的信号通过鼠标中键Drag&Drop拖放到nWave中;
    • 通常都是在波形上发现问题,找到错误地方并双击鼠标,会自动跳到Real driver statement,也即会跳到源代码所在。
    • nTrace中,Active Annotation(快捷键X)标出仿真结果在source code下;
    • 在先前driver statement中找个driver来使用active trace来追踪有效驱动。

    Verdi就是之前的Debussy,在调试时有着诸多的优点,现在我感觉最基础的几点就是它

    • 只需执行一遍仿真就可以查看所有的波形,而在modelsim中则需要反复运行add wave命令,每一次都要重新仿真。
    • 可以查看设计的原理图schematic,这非常方便查看每一个module和wire的所对应的硬件结构,modelsim现在还没有这个功能。
    • 在仿真时可以很轻易地追踪每个信号所对应的源码。
  • 相关阅读:
    逆序数 POJ 2299 Ultra-QuickSort
    DP URAL 1244 Gentlemen
    找规律 SGU 107 987654321 problem
    找规律 SGU 126 Boxes
    DP VK Cup 2012 Qualification Round D. Palindrome pairs
    模拟 Coder-Strike 2014
    模拟 Codeforces Round #203 (Div. 2) C. Bombs
    DFS HDOJ 2614 Beat
    最短路(Floyd_Warshall) POJ 2240 Arbitrage
    最短路(Floyd_Warshall) POJ 1125 Stockbroker Grapevine
  • 原文地址:https://www.cnblogs.com/leaftime/p/3255444.html
Copyright © 2011-2022 走看看