zoukankan      html  css  js  c++  java
  • modelsim(2)

    二 vcd dump

    由于VCD可以用于做功耗分析,所以需要把其dump出来。另外VCD可以作为结果,也可以作为激励,但是实际看到的少啊!

    VCD是verilog的标准,所以有系统函数$dumpvars,$dumpfile(),$dumpon,$dumpoff,$dumpflush.

    但是VHDL没有相关函数,所以要使用modelsim的脚本 :

    vcd file, vcd add, vcd flush

    注意:

    a)以上前两句要加在vsim后面,见sample,

    b)注意在仿真结束前调用 vcd flush,把buffer中的数据输出给文件,估算buffer可能是2kB大小。如果文件很小且没有运行vcd flush,会看到文件没有内容!

       另外如果不运行vcd flush,则最后的约2KB数据不会写进vcd中!

    c)另外vcd add只能添加bit, bit_vector,std_logic, and std_logic_vector
    vcd add
    This command adds the specified objects to a VCD file.
    The allowed objects are Verilog nets and variables and VHDL signals of type bit, bit_vector,
    std_logic, and std_logic_vector (other types are silently ignored). The command works with
    mixed HDL designs.

     d) 如果想子模块一起存储VCD,添加-r,但是参数是有顺序的

      vcd add /top/* -r 这个是错的

    改为

       vcd add -r /top/*

    e) -----------VCD script sample-------

    #    vcd file test.vcd
    #    vcd add /top/*

        vsim -L work -t ns -novopt -c -pli ./pslse-master/pslse/afu_driver/src/afu_driver.sl +nowarnTSCALE work.top
    #注意 -novopt很重要,否则会被优化层次结构,甚至有些模块会不见了!(比如做了D触发器以及其testbench,就能看到这个问题)
        vcd file test.vcd
    #  vcd add /top/* -r   这句话是错误的,参数有顺序
        vcd add -r /top/*
    为了只计算power,只需要dut的功耗,可以如下

        vcd add -r /top/dut/*

    f) vcd flush,解释见后

    如果在仿真结束后,没有运行vcd flush,会有部分内容,甚至全部内容没有写到vcd的file中,碰到如下问题

    在verilog的代码中使用了$stop。

    而在do文件中,最后是

    run all

    这样得到的vcd file是空文件,因为没有flush进去吧?!

    即使改为

    run all

    vcd flush

    仍然出错,因为script会pause在run all。

    修改的原则,保证确实flush到文件中了!

    .)取消$stop,修改run all为run 具体时间(如1ms),添加vcd flush。

    .)此法不适合VHDL而适合verilog,在$stop前添加,$dumpflush。仍然run -all

        但是不建议脚本和verilog的vcd相关task混合使用,要不全部用脚本,或者全部用task

    1) ---------------  如下来自modelsim OEM产生的script

    vmap presynth presynth
    vmap SmartFusion2 "D:/Microsemi/Libero_SoC_v11.7/Designer/lib/modelsim/precompiled/vlog/SmartFusion2"

    vlog -vlog01compat -work presynth "${PROJECT_DIR}/hdl/top.v"
    vlog "+incdir+${PROJECT_DIR}/stimulus" -vlog01compat -work presynth "${PROJECT_DIR}/stimulus/tb.v"

    vsim -L SmartFusion2 -L presynth  -t 1ps -novopt presynth.tb
    add wave /tb/*
    add log -r /*
    vcd file power.vcd
    vcd add -r /tb/top_0/*
    run 500ns
    vcd flush
    echo "VCD file power.vcd was successfully exported under the project simulation/ direct

    2) ----------sample 采用verilog函数 dump (注意最后用了和vcd flush一样的作用的function $dumpflush)-------

    http://verilog.renerta.com/mobile/source/vrg00056.htm

    initial begin
      $dumpfile("test.txt");
      $dumpvars(1,a,y);
      #200;
      $dumpoff;
      #200;
      $dumpon;
      #20;
      $dumpall;
      #10;
      $dumpflush;
    end
    endmodule

    The dumpfile will contain only changes of 'a' and 'y' variables. After 200 time units, dumping will be suspended for 200 time units. Next, dumping will start again and after 20 time units, all variables will be dumped.

    问题:实在不知道$dumpall和$dumpflush的区别,如下是查找modelsim的ug得到解释以及相对应的vcd命令

    vcd checkpoint
    This command dumps the current values of all VCD variables to the specified VCD file. While
    simulating, only value changes are dumped.
    Related Verilog tasks: $dumpall, $fdumpall

    vcd on
    This command turns on VCD dumping to the specified file and records the current values of all
    VCD variables.
    By default, vcd on is automatically performed at the end of the simulation time that the vcd add
    command performed.
    Related Verilog tasks: $dumpon, $fdumpon
    Syntax
    vcd on [<filename>]
    Arguments
    • <filename>
    (optional) Specifies the name of the VCD file. If omitted the command is executed on the
    file designated by the vcd file command or dump.vcd if vcd file was not invoked.
     
    vcd flush
    This command flushes the contents of the VCD file buffer to the specified VCD file. This
    command is useful if you want to create a complete VCD file without ending your current
    simulation.
    Related Verilog tasks: $dumpflush, $fdumpflush

    -----------------------

    三) 要查看以前的仿真,需要先将VCD转为wlf

    vcd2wlf xx.vcd xx.wlf

    然后用-view参数查看,导入wav.do显示需要看的波形!

    vsim -do wav.do(波形文件) -view test=xx.wlf(test是dataset名,可以不要)

    四)VCD 格式理解

    $date
        Fri Aug 26 15:48:49 2016
    $end
    $version
        QuestaSim Version 10.3_1
    $end
    $timescale
        1ps
    $end

    $scope module dff_tb $end

    $scope module dut $end
    $var wire 1 ! clk $end    --- shannon:这句话表示用!符号表示clk网络
    $var wire 1 " rst $end    --- shannon:这句话表示用"符号表示rst网络
    $var wire 1 # d $end
    $var reg 1 $ q $end
    $upscope $end
    $upscope $end
    $enddefinitions $end
    #0
    $dumpvars                --- shannon: dump值
    0$          
    0#
    0!
    1"
    $end
    #5000                         --- shannon :网络clk 值在5000是为1
    1!
    #10000
    0!
    #15000
    1!
    #16000
    0"                                     ---shannon:网络rst 值在16000ps时变为0  (1ps 是 vsim -t 1ps -novopt work.dff_tb 定义的单位)
    #20000
    0!
    #25000
    1!
    #30000
    0!
    #35000
    1!
    #40000
    0!

  • 相关阅读:
    jQuery 属性操作
    Codeforces Round #679 (Div. 2, based on Technocup 2021 Elimination Round 1) (个人题解)
    (模板)graham扫描法、andrew算法求凸包
    POJ
    Codeforces Round #677 (Div. 3) (A
    第十三场训练赛
    [kuangbin] 专题13 基础计算几何 题解 + 总结
    特殊的数据结构:主席树
    【计算几何03】距离计算
    Java实现 LeetCode 803 打砖块 (DFS)
  • 原文地址:https://www.cnblogs.com/e-shannon/p/5810435.html
Copyright © 2011-2022 走看看