• VCS仿真 Dump Memory


    VCS仿真 Dump Memory


    两种方法

    • vcs联合verdi生成fsdb文件
    • vcs生成vpd文件

    VCS联合verdi生成fsdb文件

    1.testbench中加入如下语句:

    initial begin
         $fsdbDumpfile("tb.fsdb");
         $fsdbDumpvars;
    end
    
    always@(posedge clk)
    begin
      $fsdbDumpMDA(R1); //每个时钟dump出mem的值,verdi记录值的变化
      $fsdbDumpMDA(R2);
    end
    

    2.注意调用 vcs -debug_pp 开始仿真

    3.测试使用的verilog代码与仿真脚本

    testbench

    `timescale 1ns/100ps
    
    module Testbench;
    
      reg          clk;
    
      integer      i;
      reg          R1[7:0];
      reg [3:0]    R2[7:0];
    
      initial  begin
        clk = 0;  
    
    	for (i=0; i<8; i=i+1) begin
    	  R1[i] = 1'b0;
    	  R2[i] = 4'h0;
    	end
    
    	#10;
    
    	for (i=0; i<8; i=i+1) begin
    	  R1[i] = $random;
    	  R2[i] = $random;
    	end
    
        repeat(5) @(posedge clk);
    
    	for (i=0; i<8; i=i+1) begin
    	  R1[i] = $random;
    	  R2[i] = $random;
    	end
    
        repeat(60) @(posedge clk);
        $finish;
      end
    
    always #200 clk = ~clk;
    
    initial begin
         $fsdbDumpfile("tb.fsdb");
         $fsdbDumpvars;
    end
    
    always@(posedge clk)
    begin
      $fsdbDumpMDA(R1); //每个时钟dump出mem的值,verdi记录值的变化
      $fsdbDumpMDA(R2);
    end
    
    
    endmodule
    

    注意:此处仅是示范dumpMemory,实际中需要每一个时钟沿都需dump数据

    vcs仿真脚本

    #!/bin/bash -f
    
    export NOVAS_HOME="/EDA/Synopsys/verdi/vJ-2014.12-SP2"
    export NOVAS_PLI="${NOVAS_HOME}/share/PLI/VCS/LINUX64"
    export LD_LIBRARY_PATH="$NOVAS_PLI"
    
    export NOVAS="${NOVAS_HOME}/share/PLI/VCS/LINUX64"
    
    export novas_args="-P $NOVAS/novas.tab   $NOVAS/pli.a "
    
    vcs +v2k -sverilog +vcs+lic+wait -full64 -debug_pp 
           +warn=noCDNYI,noIPDW,noILLGO,noTMR,noPHNE,noIRIID-W 
           -Mupdate +notimingcheck +nospecify 
           ${novas_args}
           -f file.f 
    
    ./simv
    

    4.使用Verdi查看结果

    verdi 打开波形文件,选择>>Tool>>Memory/MDA

    5.截图(verdi)


    vcs生成vpd文件

    1.lab文件

    testbench

    `timescale 1ns/100ps
    
    module Testbench;
    
      reg          clk;
    
      integer      i;
      reg          R1[7:0];
      reg [3:0]    R2[7:0];
    
      initial  begin
        clk = 0;  
    
    	for (i=0; i<8; i=i+1) begin
    	  R1[i] = 1'b0;
    	  R2[i] = 4'h0;
    	end
    
    	#10;
    
    	for (i=0; i<8; i=i+1) begin
    	  R1[i] = $random;
    	  R2[i] = $random;
    	end
    
        repeat(5) @(posedge clk);
    
    	for (i=0; i<8; i=i+1) begin
    	  R1[i] = $random;
    	  R2[i] = $random;
    	end
    
        repeat(60) @(posedge clk);
        $finish;
      end
    
    always #200 clk = ~clk;
    
    initial begin
      $vcdpluson();
    end
    
    always@(posedge clk)
    begin
        $vcdplusmemon();
    end
    
    endmodule
    

    vcs脚本

    vcs -full64 Testbench.v  -debug_pp +vcd+vcdpluson
    
    ./simv
    

    2.截图(dve)

    参考文献

    http://www.edaboard.com/thread59624.html

    verdi3手册

  • 相关阅读:
    未来中国最热门的十大职业排行榜
    中国金融牌照18种(内附各牌照注册条件)
    现有的一些人脸数据库
    广信科教集团
    省部级干部list
    解读Google分布式锁服务
    数学算法那些事
    细数二十世纪最伟大的十大算法
    链接分析算法之:HillTop算法
    Regex Failure
  • 原文地址:https://www.cnblogs.com/OneFri/p/5989033.html
Copyright © 2020-2023  润新知