zoukankan      html  css  js  c++  java
  • Modelsim时序仿真中遇到的三个问题

    问题一:正确的instance层次化名称指定。这一问题,在Modelsim的User's Manual\Standard Delay Format (SDF) Timing Annotation\Troubleshooting\Specifying the Wrong Instance下面有详细的讲解和例子。错误地指定SDF文件对应的例化模块的层次化名称,甚至是忘记指定例化模块,是用户最容易犯的错误。抄一个Modelsim给出的例子在此。 riple
    下面的Verilog代码给出了仿真顶层的testbench模块与被仿真对象myasic的包含关系 。注意,myasic的例化名称是dut,相应的层次化名称是/testbench/dut。与myasic模块对应的SDF文件是myasic_8_1200mv_85c_v_slow.sdo

         module testbench;
            myasic dut();
         endmodule
    如果要对testbench运行Modelsim仿真,并加载myasic.sdf文件到myasic模块中,对应的命令是:
        vsim -sdfmax /testbench/dut=myasic_8_1200mv_85c_v_slow.sdo testbench
    如果不指定SDF文件,对应的命令是:
        
    vsim testbench
     

        问题二:sdo文件的重复加载和存放位置。在QuartusII中可以指定生成布局布线后的网表及对应的SDF文件。生成的网表文件以.vo或.vho为类型,SDF文件以.sdo为类型。在完成对.vo或.vho文件的编译后,就可以按照上面的例子给出的命令格式启动时序仿真。这里,假设SDF文件保存在Modelsim的仿真工作目录下。
     riple
        在加载过程中,会看到如下的打印信息:
        ...
        # Loading instances from myasic_8_1200mv_85c_v_slow.sdo
        # Loading instances from myasic_8_1200mv_85c_v_slow.sdo
        ...
        # Loading timing data from myasic_8_1200mv_85c_v_slow.sdo
        # Loading timing data from myasic_8_1200mv_85c_v_slow.sdo
        ...
        # ** Note: (vsim-3587) SDF Backannotation Successfully Completed.
        #    Time: 0 ps Iteration: 0 Region: /testbench File: testbench.v
        在上述过程中,SDF文件被加载了两次。第一次是按照vsim命令指定的参数进行的,第二次是按照.vo文件中的
        // synopsys translate_off
        initial $sdf_annotate("myasic_8_1200mv_85c_v_slow.sdo");
        // synopsys translate_on
    语句进行的。 riple
        加载两次并不是我们的本意。采用vsim命令或者.vo文件中的$sdf_annotate都可以实现延迟参数的载入。不过,由于vsim命令方式支持更多的配置参数,建议注释掉.vo中的$sdf_annotate语句,按照vsim命令中更具体灵活的参数进行。 riple
        在上述的两种加载方式中,SDF文件的存放位置都是相对于Modelsim当前工作目录的相对路径。如果把myasic_8_1200mv_85c_v_slow.sdo
    文件存放在工作目录下的netlists目录中,上述的vsim命令和$sdf_annotate语句就需要修改为:
        vsim -sdfmax /testbench/dut=netlists/myasic_8_1200mv_85c_v_slow.sdo testbench

        
    // synopsys translate_off
        initial $sdf_annotate("netlists/myasic_8_1200mv_85c_v_slow.sdo");
        // synopsys translate_on
        如果没有注释掉.vo文件中的$sdf_annotate语句,就需要在vsim命令和.vo文件中同步更新SDF文件路径。如果遗忘了修改.vo文件,只修改了vsim命令参数,就会造成$sdf_annotate语句加载失败,产生错误,仿真无法进行下去:
        ...
        # ** Error: (vsim-SDF-3894) myasic_8_1200mv_85c_v_slow.sdo: Compiled SDF file was not found.
        ...
        # ** Error: (vsim-7) Failed to open SDF file "myasic_8_1200mv_85c_v_slow.sdo" in read mode.
        # No such file or directory. (errno = ENOENT)
        # ** Error: (vsim-SDF-3445) Failed to parse SDF file "myasic_8_1200mv_85c_v_slow.sdo".
        #    Time: 0 ps Iteration: 0 Region: /testbench File: testbench.v
        这也是我建议注释掉.vo文件中$sdf_annotate语句的原因。 riple

        问题三:采用编译后的SDF文件加快加载速度。Modelsim中提供一个编译SDF文件的命令:
        
    sdfcom netlists/myasic_8_1200mv_85c_v_slow.sdo netlists/myasic_8_1200mv_85c_v_slow.sdf
        该命令把原始的SDF文件netlists/myasic_8_1200mv_85c_v_slow.sdo编译成了netlists/myasic_8_1200mv_85c_v_slow.sdf,并采用了gzip进行压缩。原有的文件大小为15,100KB,编译和压缩后为2,482KB。 riple
        针对编译后SDF文件的vsim命令为:
        
    vsim -sdfmax /testbench/dut=netlists/myasic_8_1200mv_85c_v_slow.sdf testbench
        编译SDF文件不但减小了文件大小,还能显著加快SDF文件的加载速度。 riple
     
  • 相关阅读:
    生成建表脚本(V2.0)
    QQ抢车位游戏PhysicalDataModel
    自定义工资公式设计
    .NET开发人员必知的八个网站
    MongoDB 学习 error以及解决方法
    lm_sensors 查看硬件信息
    setuid on shell scripts
    SSD寿命状态检测
    SysBench安装使用。
    用rsync对网站进行镜像备份(不靠谱)
  • 原文地址:https://www.cnblogs.com/fpga/p/1570040.html
Copyright © 2011-2022 走看看