精华内容
下载资源
问答
  • 波形文件(.wav)读写操作

    热门讨论 2011-06-07 16:26:23
    对wav文件控制函数的说明(常用mmio函数:  mmioOpen( ) 打开一个RIFF文件  mmioDescend ( ) 进入块  mmioRead( ); 该取RIFF文件  mmioAscend ( ); 跳出块  mmioClose( ); 关闭PIFF文件  对于块来说,...
  • 但是往往会根据各个公司和各个平台工具的不同,会产生不同的波形文件,那么不同的波形文件,有什么不同?接下来会分别进行描述。并且对主要用到两种波形文件,如何生成及语法做简要介绍。 通常不同的仿真工具产生的...

    在verilog和systemverilog等逻辑仿真的过程中,最关心的就是最后生成的波形是如何,我们才能根据波形去具体分析。但是往往会根据各个公司和各个平台工具的不同,会产生不同的波形文件,那么不同的波形文件,有什么不同?接下来会分别进行描述。并且对主要用到两种波形文件,如何生成及语法做简要介绍。

    通常不同的仿真工具产生的不同波形文件主要有这些,WLF(Wave Log File)、VCD(Value Change Dump)文件,fsdb(Fast Signal DataBase)、shmvpd

    1.WLF (Wave Log File)

    Mentor Graphics 公司Modelsim支持的波形文件。

    在modelsim波形窗口观察波形时,仿真结束时都会生成一个*.wlf的文件(默认是vsim.wlf),可以用modelsim直接打开,命令如下: 

    vsim -view vsim.wlf -do run.do

    其中,run.do中的内容为要查看的波形信号。

    这个wlf文件只能由modelsim来生成,也只能通过modelsim来显示。不是一个通用的文件格式。

    2.VCD(Value Change Dump)

    IEEE1364标准(Verilog HDL语言标准)中定义的一种ASCII文件,是通用的文件格式。

    它主要包含了头信息,变量的预定义和变量值的变化信息。正是因为它包含了信号的变化信息,就相当于记录了整个仿真的信息,我们可以用这个文件来再现仿真,也就能够显示波形,但是波形文件会很大。因为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  #  使用VCD来进行仿真 )
    test;add wave /*;run -all;

     特别说明的一点是,正是因为VCD记录了信号的完整变化信息,我们还可以通过VCD文件来估计设计的功耗,而这一点也是其他波形文件所不具备的。Encounter 和 PrimeTime PX (Prime Power)都可以通过输入网表文件,带功耗信息的库文件以及仿真后产生的VCD文件来实现功耗分析。

    3.FSDB (Fast Signal DataBase)

    Spring Soft (Novas)公司 Debussy / Verdi 支持的波形文件,一般较小,使用较为广泛,其余仿真工具如ncsim,modlesim 等可以通过加载Verdi 的PLI (一般位于安装目录下的share/pli 目录下) 而直接dump fsdb文件。

    fsdb文件是verdi使用一种专用的数据格式,类似于VCD,但是它是只提出了仿真过程中信号的有用信息,除去了VCD中信息冗余,就像对VCD数据进行了一次huffman编码。因此fsdb数据量小,而且会提高仿真速度。我们知道VCD文件使用verilog内置的系统函数来实现 的,fsdb是通过verilog的PLI接口来实现的,例fsdbDumpfile, fsdbDumpvars等。示例如下:

    //testbench中加入内容:

    initial
    begin
    $fsdbDumpfile("*.fsdb");  //*代表生成的fsdb的文件名
    $fsdbDumpvars(0,**);    //**代表测试文件名
    end

    4.shm

     Cadence公司 NC verilog 和Simvision支持的波形文件,实际上 .shm是一个目录,其中包含了.dsn和.trn两个文件。使用NC Verilog 对同一testcase和相同dump波形条件的比较,产生shm文件的时间最短(废话,本来就是一个公司的),产生vcd文件的时间数倍于产生shm和 fsdb的时间。在笔者测试的例子中,产生的fsdb文件为十几MB,shm文件为几十MB,而vcd文件则要几个GB的大小。

    5.vpd

    Synopsys公司 VCS DVE支持的波形文件,可以用$vcdpluson产生。

    6. 其余波形文件

    就是各家不同的仿真或调试工具支持的文件类型,互不通用,但基本都可以由VCD文件转换而来(其实就是VCD文件的压缩版,因为只取仿真调试需要的数据,所以文件大小要远小于原始VCD文件),有的还提供与VCD文件的互转换功能。

     

    --------------------------------------强迫症分割线--------------------------------------

    Verilog提供一系列系统任务用于记录信号值变化,常见的格式有vcd,fsdb等。 

    接下来对这两种波形文件的生成及语法做一个简要介绍:

    1.VCD

    Dump VCD格式

    $dumpfile("file.dump"); 打开一个VCD数据库用于记录
    $dumpvars(level,start_module); 要记录的信号,level=0表示记录所有
    $dumpflush; 将VCD数据保存到磁盘(不明白)
    $dumpoff; 停止记录
    $dumpon; 重新开始记录
    $dumplimit(); 限制VCD文件的大小(以字节为单位)
    $dumpall; 记录所有指定的信号值

     用法:

    initial
    begin
    $dumpfile (“verilog. dump”);
    $dumpvars (0, testfixture);
    end

    关于 VCD $dumpvars 的用法:

    $dumpvars; // Dump所有层次的信号
    $dumpvars(1, top); // Dump top模块中的所有信号
    $dumpvars(2, top.u1); // Dump实例top. u1及其下一层的信号
    $dumpvars(0, top.u2, top.u1.u13.q); // Dump top.u2及其以下所有信号,以及信号top.u1.u13.q。
    $dumpvars(3, top.u2, top.u1); // Dump top.u1和top.u2及其下两层中的所有信号。

    2.fsdb

     

    fsdbDumplimit - 限制FSDB 文件size 
    $fsdbDumpvars([<level>], <scope | signal>*)
    
    fsdbDumpfile - 指定FSDB 文件名
    $fsdbDumpfile(“<FSDB name>”)
    
    fsdbSwitchDumpFile - 将dumping 切换到另一个FSDB 文件
    $fsdbSwitchDumpFile(“<new FSDB name>”)
    
    fsdbAutoSwitchDumpfile - 限制文件大小并在数据量过大时自动创建新的FSDB 文件
    $fsdbAutoSwitchDumpfile(<file size>, “<FSDB name>”,< number of file>)
    
    fsdbDumpMem - Dump 指定的memory 的内容
    $fsdbDumpMem(<reg name>, [<start addr>, [<size>]])
    
    $fsdbDumpon - 打开 FSDB dumping
    $fsdbDumpoff - 关闭 FSDB dumping

    1). 一个自由开关FSDB 的方法有时候要运行很长时间的仿真,但是关心的波形却只是其中一小段。这个时候怎么来开关波形,使文件不至于太过庞大呢?这里介绍一个方法。示例仅供参考,大家可以结合实际应用创造出更加多样的变化来。

    $fsdbAutoSwitchDumpfile,<file size>表示文件大小,单位MB;<FSDB name>表示文件前缀名,生成dump文件后,会在后面自动加001,002,一直到最大<number of file>,即<number of file>表示文件个数,就会返回到开始覆盖000开始的文件,一直循环。

    $fsdbDumpfile,<FSDB name>表示文件前缀名字,不约束文件大小,只会生成一个文件,知道运行结束为止。

    $fsdbDumpvars,<level>表示仿真深度,<scope | signal>*表示具体dumo的模块,具体可以参考VCD $dumpvars 的用法,如果有更多的模块,可以在后面继续加。

    initial begin
    $fsdbAutoSwitchDumpfile(<file size>, “<FSDB name>”,<number of file>);
    //$fsdbDumpfile(“<FSDB name>”)
    $fsdbDumpvars([<level>], <scope | signal>*);
    $fsdbDumpvars([<level>], <scope | signal>*);
    // 条件表达式1
    $fsdbDumpoff;
    // 条件表达式2
    $fsdbDumpon;
    End

    2). 我们比较常用的一般还有$value$plusargs 这个task,在test_top 中:

    通过脚本在run的时候把casename传递进去(给vcs/nc SIM_ARG:+casename=$Testcase_name.fsdb)

    如果同时跑多个testcase 的时候可以同时dumpfsdb,另外就是跳过一些时间开始。

    具体解析可以跳转链接<详解$test$plusargs和$value$plusargs>

    $value$plusargs("casename=%s",casename)
    dump(SIM_ARG: +time=$start_time)
    $value$plusargs("time=%d",skip)
    #skip

    3). project 中每个人关注的module 不同,为了频繁去修改test_top 的dump,一般也会把需要dump 的内容用dumplist的file 来实现。

    $fsdbDumpvarsToFile("dump.list");
    比如dump.list 内容 #用于注释)
    0 test_top
    #1 test_top
    #0 test_top.dut
    #0 test_top.dut.m1
    #0 test_top.dut.m2

    用的时候一般是在test_top.v 添加相关的语句:

    reg [100:0] casename;
    integer skip, i;
    initial begin
    if( $test$plusargs("dumpfsdb") ) begin
    if( $value$plusargs("time=%d", skip) )
    #skip;
    if( $value$plusargs ("casename=%s",casename) )
    $fsdbAutoSwitchDumpfile(300, casename, 30);
    else
    $fsdbAutoSwitchDumpfile(300,"./test_top.fsdb",40);
    $fsdbDumpvarsToFile("dump.list");
    end
    end

     2.其他文件生成参考

    1、VCS仿真生成fsdb文件(verilog)

    2、VCS仿真生成VPD文件(verilog)

    3、VSIM生成fsdb波形文件(verilog)

    4、Vsim(ModelSim)生成VCD波形文件(verilog)

    5、vsim(modelsim)仿真VHDL输出fsdb格式文件

    6、ncsim仿真VHDL

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • 仿真是IC设计不可或缺的重要步骤,仿真后一般需要记录下波形文件,用于做详细分析和研究。说一下几种波形文件WLF(Wave Log File)、VCD(Value Change Dump)文件,fsdb(Fast Signal DataBase)文件、shm、vpd: 对于...

          仿真是IC设计不可或缺的重要步骤,仿真后一般需要记录下波形文件,用于做详细分析和研究。说一下几种波形文件WLF(Wave Log File)、VCD(Value Change Dump)文件,fsdb(Fast Signal DataBase)文件、shm、vpd:

          对于WLF波形日志文件,只要我们使用过modelsim,应该都很熟。WLF(Wave Log File) 是Mentor Graphics 公司Modelsim支持的波形文件。但我们在波形窗口观察波形时,仿真结束时都会生成一个*.wlf的文件(默认是vsim.wlf)。我们下次就可以通过通过modelsim直接打开这个保存下来的波形。vsim -view vsim.wlf -do run.do 其中run.do中的内容为要查看的波形信号。要强调的是这个wlf文件只能是由modelsim来生成,也只能通过modelsim来显示。不是一个通用的文件文件格式。

          VCD (Value Change Dump)是一个通用的格式。 VCD文件是IEEE1364标准(Verilog HDL语言标准)中定义的一种ASCII文件。它主要包含了头信息,变量的预定义和变量值的变化信息。正是因为它包含了信号的变化信息,就相当于记录了整个仿真的信息,我们可以用这个文件来再现仿真,也就能够显示波形。因为VCD是 Verilog HDL语言标准的一部分,因此所有的verilog的仿真器都要能够实现这个功能,也要允许用户在verilog代码中通过系统函数来dump VCD文件。我们可以通过Verilog HDL的系统函数dumpfile来生成波形,通过dumpfile来生成波形,通过dumpvars的参数来规定我们抽取仿真中某些特定模块和信号的数据。

          特别说明的一点是,正是因为VCD记录了信号的完整变化信息,我们还可以通过VCD文件来估计设计的功耗,而这一点也是其他波形文件所不具备的。Encounter 和 PrimeTime PX (Prime Power)都可以通过输入网表文件,带功耗信息的库文件以及仿真后产生的VCD文件来实现功耗分析。

          因为VCD是Verilog HDL语言标准的一部分,因此所有的verilog的仿真器都要能实现这个功能。因此我们可以在verilog代码中通过系统函数来dumpVCD文件。另外,我们可以通过modelsim 命令来dump VCD文件,这样可以扩展到VHDL中。具体的命令: vcd file myfile.vcd

          vcd add /test/dut/* 这个就生成一个含dut下所有信号的VCD数据信息。

          我们在使用来进行仿真 vsim -vcdstim myfile.com

          test;add wave /*;run -all;

    或在testbench中加入:

    initial

    begin

    $dumpfile("*.vcd");

    $dumpvars(0,**);

    end

          fsdb(Fast Signal DataBase) 是Spring Soft (Novas)公司 Debussy / Verdi 支持的波形文件,一般较小,使用较为广泛,其余仿真工具如ncsim,modlesim等等可以通过加载Verdi 的PLI (一般位于安装目录下的share/pli 目录下) 而直接dump fsdb文件。fsdb文件是verdi使用一种专用的数据格式,类似于VCD,但是它是只提出了仿真过程中信号的有用信息,除去了VCD中信息冗余,就 像对VCD数据进行了一次huffman编码。因此fsdb数据量小,而且会提高仿真速度。我们知道VCD文件使用verilog内置的系统函数来实现 的,fsdb是通过verilog的PLI接口来实现的。fsdbDumpfile,fsdbDumpfile,fsdbDumpvars等

      Testbench中加入:

      initial

     begin

     $fsdbDumpfile("*.fsdb");

     $fsdbDumpvars(0,**);

     end

           其余波形文件就是各家不同的仿真或调试工具支持的文件类型,互不通用,但基本都可以由VCD文件转换而来(其实就是VCD文件的压缩版,因为只取仿真调试需要的数据,所以文件大小要远小于原始VCD文件),有的还提供与VCD文件的互转换功能。

           shm 是Cadence公司 NC verilog 和Simvision支持的波形文件,实际上 .shm是一个目录,其中包含了.dsn和.trn两个文件。

           vpd 是Synopsys公司 VCS DVE支持的波形文件,可以用$vcdpluson产生。

           通过使用Cadence NC Verilog 对同一testcase和相同dump波形条件的比较,产生shm文件的时间最短(废话,本来就是一个公司的),产生vcd文件的时间数倍于产生shm和 fsdb的时间。在笔者测试的例子中,产生的fsdb文件为十几MB,shm文件为几十MB,而vcd文件则要几个GB的大小。

      ********************************************************************************

     fsdb的一些用法:

     (1)下面是一个列表,提示了fsdb 的各种可能用法,具体的内容大家可以Google 一把,就都出来了。

    fsdbDumplimit - 限制FSDB 文件size 如何使用?

    $fsdbDumpvars([<level>], <scope | signal>*)

    fsdbDumpfile - 指定FSDB 文件名

    $fsdbDumpfile(“<FSDB name>”)

    fsdbDumpvars - Dump 指定的变量

    fsdbDumpSingle - Dump 指定的信号

    fsdbDumpvariable - Dump 指定的VHDL 变量

    fsdbSwitchDumpFile - 将dumping 切换到另一个FSDB 文件

    $fsdbSwitchDumpFile(“<new FSDB name>”)

    fsdbAutoSwitchDumpfile - 限制文件大小并在数据量过大时自动创建新的FSDB 文件

    $fsdbAutoSwitchDumpfile(<file size>, “<FSDB name>”,< number of file>)

    fsdbDumpflush - Force to Dump Result to FSDB file

    fsdbDumpMem - Dump 指定的memory 的内容

    $fsdbDumpMem(<reg name>, [<start addr>, [<size>]])

    $fsdbDumpon - 打开 FSDB dumping

    $fsdbDumpoff - 关闭 FSDB dumping

    (1)一个自由开关FSDB 的方法

    有时候要运行很长时间的仿真,但是关心的波形却只是其中一小段。这个时候怎么来开关波形,使文件不至于太过庞大呢?这里介绍一个方法。示例仅供参考,大家可以结合实际应用创造出更加多样的变化来。

     initial begin

    $timeformat(...);

    $fsdbAutoSwitchDumpfile(...);

    $fsdbDumpvars(...);

    // 条件表达式1

    $fsdbDumpoff;

    // 条件表达式2

    $fsdbDumpon;

    End

    ( 2 )、我们比较常用的一般还有valuevalueplusargs 这个task,在test_top 中:

    valuevalueplusargs("casename=%s",casename)

    通过脚本在run 的时候把casename 传递进去(给vcs/nc SIM_ARG: +casename=$Testcase_name.fsdb)

    便于如果同时跑多个testcase 的时候可以同时dumpfsdb,另外就是跳过一些时间开始

    dump(SIM_ARG: +time=$start_time)

    valuevalueplusargs("time=%d",skip)

    #skip

    (3)、project 中每个人关注的module 不同,为了频繁去修改test_top 的dump,一般也会把需要dump 的内容用dumplist

    的file 来实现

    $fsdbDumpvarsToFile("dump.list");

    比如dump.list 内容 #用于注释)

    0 test_top

    #1 test_top

    #0 test_top.dut

    #0 test_top.dut.m1

    #0 test_top.dut.m2

    用的时候一般是在test_top.v 添加相关的语句:

    reg [100:0] casename;

    integer skip, i;

    initial begin

    if( testtestplusargs("dumpfsdb") ) begin

    if( valuevalueplusargs("time=%d", skip) )

    #skip;

    if( valuevalueplusargs ("casename=%s",casename) )

    $fsdbAutoSwitchDumpfile(300, casename, 30);

    else

    $fsdbAutoSwitchDumpfile(300,"./test_top.fsdb",40);

    $fsdbDumpvarsToFile("dump.list");

    end

    end

     跑仿真的时候,对应的如果要从5000ns(时间单位根timescale 有关)处开始dump 波形,给vcs/nc 的参数

    +dumpfsdb +time= 5000 +casename= testcase1.fsdb

    其中的testcase1 一般我们都会在脚本处理后跟case 名字关联起来,这样子跑完之后就会从5000 开始dump

    testcase1_000.fsdb, testcase1_001.fsdb 这样子,

    2. 另外那个dump.list(名字可以随便取)里面的设定就跟平常的设定dump 的层次设置一样了

    层次 路径名

    0 test_top.dut.m1

    例子:

    //=================

    // dump FSDB wave

    interger start_dump;

    integer stop_dump;

    integer finish_time;

    integer result;

    reg [8*30*-1 : 0] waveform_name;

    initial begin:fsdb_dump

    start_dump = 0;

    finish_time = 0;

    waveform_name = "debussy.fsdb";

    if (testtestplusargs("FSDB"))

        begin

          if(testtestplusargs("DUMP_FILE"))

             result = valuevalueplusargs("DUMP_FILE=%s",waveform_name);

             $fsdbAutoSwitchDumpfile(150,waveform_name,100);

             $fsdbDumpflush;

             #start_dump;

    //select dump signals

    $fsdbDumpvars(0,xx_tb);

        end

    end

    展开全文
  • 各种波形文件 fsdb生成方法

    万次阅读 2017-09-21 12:26:18
    仿真是IC设计不可或缺的重要步骤,仿真后一般需要记录下波形文件,用于做详细分析和研究。说一下几种波形文件WLF(Wave Log File)、VCD(Value Change Dump)文件,fsdb(Fast Signal DataBase)文件、shm、vpd:   ...

    仿真是IC设计不可或缺的重要步骤,仿真后一般需要记录下波形文件,用于做详细分析和研究。说一下几种波形文件WLF(Wave Log File)、VCD(Value Change Dump)文件,fsdb(Fast Signal DataBase)文件、shm、vpd:

     

    对于WLF波形日志文件,只要我们使用过modelsim,应该都很熟。WLF(Wave Log File) 是Mentor Graphics 公司Modelsim支持的波形文件。但我们在波形窗口观察波形时,仿真结束时都会生成一个*.wlf的文件(默认是vsim.wlf)。我们下次就可以通过通过modelsim直接打开这个保存下来的波形。vsim -view vsim.wlf -do run.do 其中run.do中的内容为要查看的波形信号。要强调的是这个wlf文件只能是由modelsim来生成,也只能通过modelsim来显示。不是一个通用的文件文件格式。

     

     

     

    VCD (Value Change Dump)是一个通用的格式。 VCD文件是IEEE1364标准(Verilog HDL语言标准)中定义的一种ASCII文件。它主要包含了头信息,变量的预定义和变量值的变化信息。正是因为它包含了信号的变化信息,就相当于记录了整个仿真的信息,我们可以用这个文件来再现仿真,也就能够显示波形。因为VCD是 Verilog HDL语言标准的一部分,因此所有的verilog的仿真器都要能够实现这个功能,也要允许用户在verilog代码中通过系统函数来dump VCD文件。我们可以通过Verilog HDL的系统函数$dumpfile 来生成波形,通过$dumpvars的参数来规定我们抽取仿真中某些特定模块和信号的数据。

     

    特别说明的一点是,正是因为VCD记录了信号的完整变化信息,我们还可以通过VCD文件来估计设计的功耗,而这一点也是其他波形文件所不具备的。Encounter 和 PrimeTime PX (Prime Power)都可以通过输入网表文件,带功耗信息的库文件以及仿真后产生的VCD文件来实现功耗分析。

     

    因为VCD是Verilog HDL语言标准的一部分,因此所有的verilog的仿真器都要能实现这个功能。因此我们可以在verilog代码中通过系统函数来dumpVCD文件。另外,我们可以通过modelsim 命令来dump VCD文件,这样可以扩展到VHDL中。具体的命令: vcd file myfile.vcd

     

    vcd add /test/dut/* 这个就生成一个含dut下所有信号的VCD数据信息。

     

    我们在使用来进行仿真 vsim -vcdstim myfile.com

     

    test;add wave /*;run -all;

     

    或在testbench中加入:

     

    initial

     

    begin

     

    $dumpfile("*.vcd");

     

    $dumpvars(0,**);

     

    end

     

     

     

    fsdb(Fast Signal DataBase) 是Spring Soft (Novas)公司 Debussy / Verdi 支持的波形文件,一般较小,使用较为广泛,其余仿真工具如ncsim,modlesim等等可以通过加载Verdi 的PLI (一般位于安装目录下的share/pli 目录下) 而直接dump fsdb文件。fsdb文件是verdi使用一种专用的数据格式,类似于VCD,但是它是只提出了仿真过程中信号的有用信息,除去了VCD中信息冗余,就像对VCD数据进行了一次huffman编码。因此fsdb数据量小,而且会提高仿真速度。我们知道VCD文件使用verilog内置的系统函数来实现的,fsdb是通过verilog的PLI接口来实现的。$fsdbDumpfile,$fsdbDumpvars等

     

     Testbench中加入:

     

     initial

     

    begin

     

    $fsdbDumpfile("*.fsdb");

     

    $fsdbDumpvars(0,**);

     

    end

     

    其余波形文件就是各家不同的仿真或调试工具支持的文件类型,互不通用,但基本都可以由VCD文件转换而来(其实就是VCD文件的压缩版,因为只取仿真调试需要的数据,所以文件大小要远小于原始VCD文件),有的还提供与VCD文件的互转换功能。

     

     

     

    shm 是Cadence公司 NC verilog 和Simvision支持的波形文件,实际上 .shm是一个目录,其中包含了.dsn和.trn两个文件。

     

    vpd 是Synopsys公司 VCS DVE支持的波形文件,可以用$vcdpluson产生。

     

    通过使用Cadence NC Verilog 对同一testcase和相同dump波形条件的比较,产生shm文件的时间最短(废话,本来就是一个公司的),产生vcd文件的时间数倍于产生shm和fsdb的时间。在笔者测试的例子中,产生的fsdb文件为十几MB,shm文件为几十MB,而vcd文件则要几个GB的大小。

     

     ********************************************************************************

     

    fsdb的一些用法:

     

    (1)下面是一个列表,提示了fsdb 的各种可能用法,具体的内容大家可以Google 一把,就都出来了。

    fsdbDumplimit - 限制FSDB 文件size  如何使用?

    $fsdbDumpvars([<level>], <scope | signal>*)

    fsdbDumpfile - 指定FSDB 文件名

    $fsdbDumpfile(“<FSDB name>”)

    fsdbDumpvars - Dump 指定的变量

    fsdbDumpSingle - Dump 指定的信号

    fsdbDumpvariable - Dump 指定的VHDL 变量

    fsdbSwitchDumpFile - 将dumping 切换到另一个FSDB 文件

    $fsdbSwitchDumpFile(“<new FSDB name>”)

    fsdbAutoSwitchDumpfile - 限制文件大小并在数据量过大时自动创建新的FSDB 文件

    $fsdbAutoSwitchDumpfile(<file size>, “<FSDB name>”,< number of file>)

    fsdbDumpflush - Force to Dump Result to FSDB file

    fsdbDumpMem - Dump 指定的memory 的内容

    $fsdbDumpMem(<reg name>, [<start addr>, [<size>]])

    $fsdbDumpon - 打开 FSDB dumping

    $fsdbDumpoff - 关闭 FSDB dumping

    (1)一个自由开关FSDB 的方法

    有时候要运行很长时间的仿真,但是关心的波形却只是其中一小段。这个时候怎么来开关波形,使文件不至于太过庞大呢?这里介绍一个方法。示例仅供参考,大家可以结合实际应用创造出更加多样的变化来。

     

    initial begin

    $timeformat(...);

    $fsdbAutoSwitchDumpfile(...);

    $fsdbDumpvars(...);

    // 条件表达式1

    $fsdbDumpoff;

    // 条件表达式2

    $fsdbDumpon;

    End

    ( 2 )、我们比较常用的一般还有$value$plusargs 这个task,在test_top 中:

    $value$plusargs("casename=%s",casename)

    通过脚本在run 的时候把casename 传递进去(给vcs/nc SIM_ARG: +casename=$Testcase_name.fsdb)

    便于如果同时跑多个testcase 的时候可以同时dumpfsdb,另外就是跳过一些时间开始

    dump(SIM_ARG: +time=$start_time)

    $value$plusargs("time=%d",skip)

    #skip

    (3)、project 中每个人关注的module 不同,为了频繁去修改test_top 的dump,一般也会把需要dump 的内容用dumplist

    的file 来实现

    $fsdbDumpvarsToFile("dump.list");

    比如dump.list 内容 #用于注释)

    0 test_top

    #1 test_top

    #0 test_top.dut

    #0 test_top.dut.m1

    #0 test_top.dut.m2

    用的时候一般是在test_top.v 添加相关的语句:

    reg [100:0] casename;

    integer skip, i;

    initial begin

    if( $test$plusargs("dumpfsdb") ) begin

    if( $value$plusargs("time=%d", skip) )

    #skip;

    if( $value$plusargs ("casename=%s",casename) )

    $fsdbAutoSwitchDumpfile(300, casename, 30);

    else

    $fsdbAutoSwitchDumpfile(300,"./test_top.fsdb",40);

    $fsdbDumpvarsToFile("dump.list");

    end

    end

     

    跑仿真的时候,对应的如果要从5000ns(时间单位根timescale 有关)处开始dump 波形,给vcs/nc 的参数

    +dumpfsdb +time= 5000 +casename= testcase1.fsdb

    其中的testcase1 一般我们都会在脚本处理后跟case 名字关联起来,这样子跑完之后就会从5000 开始dump

    testcase1_000.fsdb, testcase1_001.fsdb 这样子,

    2. 另外那个dump.list(名字可以随便取)里面的设定就跟平常的设定dump 的层次设置一样了

    层次 路径名

    0 test_top.dut.m1

     

     

     

     

     

    例子:

     

    //=================

     

    // dump FSDB wave

     

    interger start_dump;

     

    integer stop_dump;

     

    integer finish_time;

     

     

     

    integer result;

     

    reg [8*30*-1 : 0] waveform_name;

     

     

     

    initial begin:fsdb_dump

     

       start_dump = 0;

     

       finish_time  = 0;

     

    waveform_name = "debussy.fsdb";

     

    if ($test$plusargs("FSDB"))

     

         begin

     

           if($test$plusargs("DUMP_FILE"))

     

              result  = $value$plusargs("DUMP_FILE=%s",waveform_name);

     

              $fsdbAutoSwitchDumpfile(150,waveform_name,100);

     

              $fsdbDumpflush;

     

              #start_dump;

     

    //select dump signals

     

    $fsdbDumpvars(0,xx_tb);

     

         end

     

    end

    展开全文
  • 计数器常用在分频、定时等处。计数器的种类很多,按照计数方式的不同可以分为二进制计数器、十进制计数器以及任意进制计数器,按照触发器的时钟脉冲信号来源可分为同步计数器与异步计数器。按照计数增减可分为加法...

    一、计数器简介

    计数器的核心元件是触发器,基本功能是对脉冲进行计数,其所能记忆脉冲最大的数目称为该计数器的模/值。计数器常用在分频定时等处。计数器的种类很多,按照计数方式的不同可以分为二进制计数器十进制计数器以及任意进制计数器,按照触发器的时钟脉冲信号来源可分为同步计数器异步计数器。按照计数增减可分为加法计数器减法计数器以及可逆计数器

    下图为一个基本的计数器:
    基于D触发器的计数器

    二、代码

    全部代码如下:

    module counter #(
    	parameter M = 100	//计数器模长
    )(
    	input wire						clk,//时钟
    	input wire 						rst,//复位
    	input wire 						en,	//使能信号
    	output reg	[$clog2(M) - 1 : 0]	cnt,//计数输出
    	output wire 					co	//记满信号
    );
    	assign co = en&(cnt == M-1);				//给线网型变量CO赋值
    	
    	always@(posedge clk or negedge rst) begin
    	if(!rst) cnt <= 1'b0;						//复位
    		else if(en) begin
    			if(cnt < M - 1) cnt <= cnt + 1'b1;	//计数
    			else cnt <= 1'b0;					//记满归零
    		end
    	end
    endmodule
    
    

    这是一个简单的带有复位和使能信号的循环计数器,模长为100。可以在例化时通过修改参数M的值来更改模长,从而实现不同频率的分频输出。

    三、简单说一说

    module counter #(
    	parameter M = 100	//计数器模长
    )(
    	input wire								clk,//时钟
    	input wire 								rst,//复位
    	input wire 								en,	//使能信号
    	output reg		[$clog2(M) - 1 : 0] 	cnt,//计数输出
    	output wire 							co	//记满信号
    );
    

    总共有三个输入端口和两个输出端口:输入端口有时钟clk、复位rst、使能en,均为线网类型的变量。时钟端口用于接收时钟脉冲进行计数,复位信号可以给计数器异步置零,使能信号控制计数器是否能进行计数。输出端口有计数cnt,记满信号co,其中cnt为寄存器类型的变量,co为线网类型的变量。其中$clog2(M) - 1为取M以2为底的对数,即针对模长求寄存器的位宽。当寄存器计满后,cnt清零,co拉高。随即co会被拉低,留下一个半周期长的高电平。

    四、仿真

    由于模块比较简单,可以不使用Modelsim进行仿真,改用波形矢量文件进行观察。在这里插入图片描述
    点击"New"或按Ctrl+N
    在这里插入图片描述
    选择"University Program VWF",出现如下窗口:在这里插入图片描述
    双击左侧栏空白处,弹出如下小对话框:在这里插入图片描述
    点击"Node Finder",如下在这里插入图片描述
    单击"List"后点击双箭头>>将变量全部添加到观察窗口中,再点击OK,可以看到左侧栏中已有信号,下面介绍几个按键。在这里插入图片描述
    从左到右依次为:设为未知、拉低、拉高、设为高阻态、设为弱低电平、设为弱高电平、翻转、计数、设置时钟脉冲、任意值、随机数值、功能仿真、时序仿真、产生Modelsim的testbench和脚本。设置好各输入端口的信号后点击功能仿真,得到如图波形:在这里插入图片描述
    右键cnt可以更改数据进制,例如更改为无符号十进制数Unsigned Decimal:在这里插入图片描述

    五、小结

    计数器是最基本的时序逻辑电路之一,希望能够通过计数器加深对时序逻辑电路描述方式的印象。另外,波形矢量文件只能看一些比较简单的模块,如果用到了比较复杂的模块,还得靠Modelsim。

    展开全文
  • Matlab 生成任意波形wav文件

    千次阅读 2020-04-10 22:37:51
    1、背景   测试DAC/功放的性能指标的...  曾经一开始接触这部分调试的时候,从网上找了些音频文件,发现怎么测参数都不对,后来从别人那里考来了一份常用的1K文件,才得出像样点的结果,由于此文件需要的精度...
  • 波形文件一般用于仿真后记录波形文件,用于做详细分析和研究。 说一下几种波形文件WLF(Wave Log File)、VCD(Value Change Dump)文件,fsdb(Fast Signal DataBase)文件、shm、vpd。 1.WLF (Wave Log F
  • 这里我们来讲解一下如何用MATLAB产生四种常用波形(方波、正弦波、三角波、锯齿波)。下面列出相应代码和相应波形图供大家学习和参考!!! 1.方波 n=0:31; y=31*square(2*pi*n/32,50)+32; k=round(y); stem(k); 2....
  • 对fsdb波形文件的操作 经常的,我们需要导出特定hierarchy的波形而不需要其他的部分,一般有几个应用场景: 只关心自己模块的部分,减小波形文件的大小. 需要给团队外的人提供波形,不希望别人看到指定hierarchy之外...
  • 波形发生器,函数发生器,RF信号源,以及基本的模拟输出模块。信号源中采用DDS技术在当前的测试测量行业已经逐渐称为一种主流的做法。DDS是直接数字式频率合成器(Direct Digital Synthesizer)的英文缩写。 今天给...
  • 仿真是IC设计不可或缺的重要步骤,仿真后一般需要记录下波形文件,用于做详细分析和研究。说一下几种波形文件WLF(Wave Log File)、VCD(Value Change Dump)文件,fsdb(Fast Signal DataBase)文件、shm、vpd: 对于...
  • 本文对.do文件进行整理介绍,并在后文引用 “ bitrocco ” 的一篇博文做补充介绍。 补充介绍 下文转载自博文: https://www.cnblogs.com/bitrocco/p/9576505.html # 退出当前仿真 quit -sim ...
  • 用系统api播放波形文件(wav)例子

    热门讨论 2011-06-07 16:33:13
    常用mmio函数:  mmioOpen( ) 打开一个RIFF文件  mmioDescend ( ) 进入块  mmioRead( ); 该取RIFF文件  mmioAscend ( ); 跳出块  mmioClose( ); 关闭PIFF文件  对于块来说,进入块和跳出块是配对的。 ...
  • 在testbench中常用的保存波形命令如下: initial begin $fsdbDumpfile("tb.fsdb"); $fsdbDumpvars(); #1000 $finish; end $fsdbDumpvars(depth,instance,options); 其中各个选项的意思: depth 0:all ...
  •  仿真是IC设计不可或缺的重要步骤,仿真后一般需要记录下波形文件,用于做详细分析和研究。说一下几种波形文件WLF(Wave Log File)、VCD(Value Change Dump)文件,fsdb(Fast Signal DataBase)文...
  • -- 常用文件扩展名解释 A 对象代码库文件 AAM Authorware shocked文件 AAS Authorware shocked包 ABF Adobe二进制屏幕字体 ABK CorelDRAW自动备份文件 ABS 该类文件有时用于指示一个摘要(就像在一篇有关科学方面的...
  • Python解析Wav文件并绘制波形的方法 #本文代码下载 Wav波形绘图代码 #本文实例音频文件night.wav下载 音频文件下载(石进-夜的钢琴曲) 前言 在现在繁忙的生活中,我们经常会听些歌来放松一下自己,我们经常会...
  • 波形文件一般用于仿真后记录波形文件,用于做详细分析和研究。说一下几种波形文件WLF(Wave Log File)、VCD(Value Change Dump)文件,fsdb(Fast Signal DataBase)文件、shm、vpd。 1.WLF (Wave Log File) Me...
  • 读取bin文件 并且用16进制显示 bin文件是二进制文件,是...虚拟光驱文件常用bin作为后缀,但这并不意味着所有bin文件都是虚拟光驱文件。工程应用中,从flash读取的输出,经常保存成bin文件,有时里面的数据是十六进制;
  • 仿真是IC设计不可或缺的重要步骤,仿真后一般需要记录下波形文件,用于做详细分析和研究。说一下几种波形文件WLF(Wave Log File)、VCD(Value Change Dump)文件,fsdb(Fast Signal DataBase)文件、shm、vpd: 对于...
  • 所以我把常用的特征值指标: 有量纲特征值8个——最大值、最小值、峰峰值、均值、方差、标准差、均方值、均方根值(RMS) 无量纲特征值6个——峭度、偏度、波形因子、峰值因子、脉冲因子、裕度因子 频域特征值5个...
  • VCS常用参数及编译仿真实例dump波形

    千次阅读 2018-12-26 16:36:12
    1.10 dump波形 可参考[Tool] Verdi 用法(dump waveform) 可以dump fsdb波形也可以dump vpd波形 如下两种参数二选其一 1.10.1 -fsdb: 加上这个参数才能使用以下fsdb的系统任务dump波形 Dump波形文件 initial ...
  • fsdb和vpd格式波形生成并查看fsdb格式 fsdb格式 tb文件里添加
  • 常用文件扩展名

    千次阅读 2016-12-19 15:06:53
    BWV 商业波形文件 常用文件扩展名 C开头 扩展名 说明 C C代码文件 CAB Microsoft压缩文件 CAD Softdek的Drafix CAD文件 CAL CALS压缩位图;日历计划表数据 CAP 压缩音乐文件格式 ...
  • Simulink三相异步电机仿真

    万次阅读 多人点赞 2019-03-01 16:31:22
    前些时,利用CADe_SIMu V1.0仿真了一些常见常用的电机控制电路,但是CADe_SIMu V1.0软件只能仿真出电路的控制效果,而不能体现出元器件的相关参数、电路中电压、电流量的变化过程等。因此,本小学生利用这一周时间,...
  • 画出wav文件声音数据的波形曲线

    千次阅读 2013-03-25 17:34:47
    波形音频文件(*.WAV)是Microsoft为Windows设计的多媒体文件格式RIFF(The Resource Interchange File Format,资源交换文件格式)中的一种(另一种常用的为AVI)。RIFF由文件头、数据类型标识及若干块(chunk)组成。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,344
精华内容 3,337
关键字:

常用的波形文件