1

关于投票
采用Signal Spy增强VHDL的测试能力

    可观测性和可控制性是对testbench的基本要求。与Verilog相比,VHDL语言缺少层次化路径访问的能力;但是在VHDL语言中可以通过全局变量进行entity之间的通讯,这里的全局变量就是在package中定义的signal。在实际应用中,Verilog的层次化路径访问是真正的“无损探测”;VHDL的全局变量更适合用于测试组件之间通信,不适于在DUT组件内部使用(需要在设计中添加测试专用的语句)。 riple

   最初发现Signal Spy这一功能,始于 riple 和“蔡晃悠”大哥的一段讨论。开始使用这一功能还是最近的事。 riple

    Signal Spy给VHDL语言增加了等价于Verilog语言的层次化路径访问能力,再加上VHDL语言的全局变量通信能力,VHDL似乎比Verilog更适合用作HDL测试语言。 riple

    Signal Spy是Modelsim专用的工具,不是VHDL语言内置的特性。添加这一功能对Modelsim来说不是什么难事,因为不论是Verilog,还是VHDL,在Modelsim编译后得到的数据库都是支持层次化路径访问的。 riple

    使用Signal Spy需要: riple

    1. 包含modelsim_lib中的Util Package riple

     library modelsim_lib;
     use modelsim_lib.util.all;

    2. 初始化Signal Spy riple

    init_signal_spy(, , , )

 

    炒一个栗子在此: riple

library ieee;
library modelsim_lib;
use ieee.std_logic_1164.all;
use modelsim_lib.util.all;

entity top is
end;

architecture only of top is
    signal top_sig1 : std_logic;
begin
    ...
    spy_process : process
    begin
        init_signal_spy("/top/uut/inst1/sig1","/top/top_sig1",1,1);
        wait;\
    end process spy_process;
    ...
    spy_enable_disable : process(enable_sig)
    begin
        if (enable_sig = '1') then
            enable_signal_spy("/top/uut/inst1/sig1","/top/top_sig1",0);
        elseif (enable_sig = '0')
            disable_signal_spy("/top/uut/inst1/sig1","/top/top_sig1",0);
        end if;
    end process spy_enable_disable;
    ...
end;

系统分类: CPLD/FPGA
用户分类: Modelsim
标签: Modelsim VHDL SignalSpy
来源: 原创
发表评论 阅读全文(223) | 回复(0)

0

关于投票
采用JobSpy控制Modelsim批处理仿真

    JobSpy可以用来管理Modelsim的批处理仿真过程,具体应用如下: riple

  • 1. Checking the progress of a simulation.
  • 2. Examining internal signal values to check if the design is functioning correctly, without stopping the simulation.
  • 3. Suspending one job to release a license for a more important job, also allowing you to restart the suspended job later.
  • 4. Instructing the running batch job to do a checkpoint of the job and then continue the run. If the workstation that was running a batch job were to fail at sometime in the future, you would could restart the job again from the saved checkpoint file.

 

     riple 做了一些实验,发现在Modelsim的手册中一些没有说清楚的要点: riple

1. JobSpy是针对“批处理仿真”的,只有通过vsim -c启动的仿真才能被JobSpy管理。 riple

2. JobSpy需要JOBSPY_DAEMON环境变量才能运行。在Windows下,可以在“我的电脑”属性中配置,也可以在命令行配置。在命令行配置的好处是,另外的命令行窗口只有设置同样的环境变量值,才能访问同一个JobSpy;在另外的命令行中启动的仿真,只有先行设置JOBSPY_DAEMON环境变量才能被具有相同设置的JobSpy访问,这样一来,这个环境变量值成了不同窗口间通讯的密码。 riple

3. 只有在JobSpy启动之后开始的批处理仿真,并且拥有相同的环境变量值,才可以被JobSpy管理,JOBSPY_DAEMON环境变量取值不同的,或者是在JobSpy之前启动的仿真是无法被JobSpy看到的。 riple

 

    Jobspy在WinXP下的操作流程:

1. 运行jobspy_start.bat点击下载

2. 运行batch_sim.bat点击下载

3. 运行jobspy_gui.bat点击下载

4. 在GUI界面控制simulation_jobs的运行

5. 仿真结束后关闭GUI界面,运行jobspy_kill.bat点击下载

 

JobSpy GUI界面:

点击看大图

系统分类: CPLD/FPGA
用户分类: Modelsim
标签: Modelsim JobSpy 批处理
来源: 原创
发表评论 阅读全文(247) | 回复(0)

0

关于投票
学习Modelsim的命令(二)

 riple 认为,在自动化的测试流程中,获得仿真结果(可观测性)比向测试平台施加激励(可控制性)更重要。 riple

昨天为了通过Tcl脚本把modelsim仿真过程中的变量值读出来, riple 挨个把modelsim的命令读了一遍。还好,才读到e开头的命令,就找到了examine这条命令。采用这条命令,可以读取modelsim仿真过程中所有object的取值。 riple

examine [-delta <delta>] [-env <path>] [-handle] [-in] [-out] [-inout] [-internal] [-maxlen [0 | <integer>]] [-ports] [-expr <expression>] [-name] [-<radix_type>] [-radix <type>] [-time <time>] [-value] <name>…

最好配合上radix -hexadecimal,可以把所有object变成16进制表示,方便Tcl处理。 riple

此外,find命令也不错,可以用来模糊查找signals。 riple

 

应bigyellow朋友的要求,写个简单的例子在此: riple

proc get_value_formated {{radix hex} {node}} {

    examine -$radix -$node

}

puts [get_value_formated hex  /tb_DUT/DUT/counter_q]

系统分类: CPLD/FPGA
用户分类: Modelsim
标签: modelsim Tcl
来源: 原创
发表评论 阅读全文(344) | 回复(6)

1

关于投票
构思中的

仿真调试不能代替硬件调试。

仿真调试可以辅助硬件调试。

典型应用:CPU与FPGA接口的系统调试。

 

1. Trace记录功能。基于SingalTap II的,基于Virtual JTAG的。

2. 测试向量生成功能。基于测试集合的,基于Trace的。

3. 断言功能。检查测试向量输入的,检查测试结果的。

4. 结果自动检查功能。打印信息输出到log文件中,通过外部程序检查测试结果。

 

系统分类: CPLD/FPGA
用户分类: Modelsim
标签: 无标签
来源: 原创