NCSIM、VCS和QuestaSim后仿真如何屏蔽违例

在进行数字电路后仿真时,经常会遇到很多时序为例,通常这些违例都是由网表中大量的时序检查报出的。这些常见的时序检查系统任务如下表所示:

时序检查系统任务

说明

$setuphold<setup>

检查建立时间和保持时间,当setup违例时,出现此信息

$setuphold<hold>

检查建立时间和保持时间,当hold违例时,出现此信息

$setup

检查建立时间

$hold

检查保持时间

$recovery

检查恢复时间(以复位信号为例,可以理解为rst必须在时钟沿之前的有效的最小时间),一般用于复位、置位等

$removal

检查撤销时间(以复位信号为例,可以理解为rst必须在时钟沿之后的有效的最小时间),一般用于复位、置位等

$recrem

检查恢复和撤销时间,一般常用于复位、置位等

$period

检查周期信号的最小周期,一般常用于时钟

$skew

检查两个信号之间的最大时间差

$width

检查脉冲的最小宽度

因为在仿真的过程中,有些报出的违例我们是不关心的,这些信息的大量出现可能会淹没我们真正需要观测的信息,为此需要在仿真时讲这些冗余的信息屏蔽掉。针对大家经常使用的NCSIMVCSModelSimQuestaSim),下文将说明如何在这两种EDA工具中屏蔽冗余的违例信息。


1 NCSIM

屏蔽使用的命令格式:

% irun -tfile myfile.tfile [other_options] source_files

上述命令中myfile.tfile中包含屏蔽信息,其中主要内容如下表:

参数

说明

-iopath

+iopath

不使能路径延迟

使能路径延迟

-prim

+prim

不使能指定的instance中原语的延迟

使能指定的instance中原语的延迟

-port

+port

删除指定的instanceport延迟

使能指定的instanceport延迟

[SystemTimingTask] -tcheck

[SystemTimingTask] +tcheck

屏蔽掉不关心的违例

【示例】*.tfile中内容格式

PATH top.foo -tcheck                // 屏蔽所有关于foo的时序检查

PATH top.foo $setup $hold -tcheck     // 屏蔽所有关于foosetuphold时序检查

PATH :SOC.lcsoc.syn_reg $setup -tcheck // 屏蔽:SOC.lcsoc.syn_regsetup检查

注意:如果要屏蔽其他检查,只需将示例中的$setup或者$hold换成SystemTimingTask中的任何一个即可。


2 VCS

命令格式如下:

tcheck <instance | port> <SystemTimingTask> <-msg | -xgen> [-disable | -enable] [-r]

tcheck <instance | port> -query instance | port

上述命令使用时需要注意以下几点:

1>simvoption中,即 % ./simv -ucli run.tcl,其中run.tcl中增加需要屏蔽的信号,将tcheck中的内容增加的run.tcl中;

2>该命令仅对Verilog/SystemVerilog使用;

3>该命令使用时,待检测的源代码必须包括时序检查系统任务,否则将会产生warning信息;

上述命令格式中使用的相关参数的说明如下表所示。

参数

说明

instance | port

要被屏蔽的时序检查的实例或者端口的全路径名称

tcheck_type

指定需要进行屏蔽的时序检查类型:HOLD|SETUP|SETUPHOLD|WIDTH|RECOVERY|REMOVAL|RECREM|PERIOD|SKEW|ALL

-disable | -enable

使能或不使能相关时序检查,如果要求屏蔽其中SETUP,则在tcheck_type指定SETUP后,需要在tcheck中使用-disable

-msg | -xgen

A. 指定的实例或者端口违例信息是否被显示

B. 指定的实例或者端口notifier信息是否被显示

-r

指定是否递归式的对所有指定的instance及其以下层次所有的instance进行时序检查

【示例】(可以通过-ucli do.tcl直接添加到simv中)

tcheck {top_tb.C40010001} WIDTH -msg -disable

#top_tb.C40010001不进行WIDTH时序检查,即屏蔽掉top_tb.C40010001WIDTH检查

tcheck {top_tb.C40010001} -query

#显示对top_tb.C40010001的时序检查信息


3 ModelSimQuestaSim

命令格式如下:

tcheck_set [-quiet] <instance> [{-m | -n}] [-r [-v]] <tcheck_type> [<Stat> | <MsgStat><Xstat>]

上述命令格式中使用的相关参数的说明如下表所示。

参数

说明

<instance>

实例(模块或者线网)的全路径名称,该项是必须的

-m | -n

指定屏蔽操作的对象是模块还是线网,该项可选。

-m:此时命令中指定的instancemoduleVerilog)或者entityVHDL),此时的屏蔽操作将作用于指定的模块的所有实例

-n:此时命令中指定的instance指向一个线网,tcheck_set将应用于所有连接该线网的实例

-quiet

用于指定配置信息不显示于Transcript窗口,该参数的指定必须先于<instance>,该项可选

-r [-v]

指定是否递归式的对所有指定的instance及其以下层次所有的instance进行时序检查,默认情况下,递归过程中被改变的instance的信息不会输出到Transcript,可以用-v将这些信息输出至Transcript中,该项可选

tcheck_type

指定需要进行屏蔽的时序检查类型:HOLD|SETUP|SETUPHOLD|WIDTH|RECOVERY|REMOVAL|RECREM|PERIOD|SKEW|ALL

<Stat>

使能或者禁止是否将指定的时序检查违例信息和不定态产生的信息报出,该项可设置的值为“ON”和“OFF”,该项可选

<MsgStat><Xstat>

控制指定时序检查的违例信息和不定态信息,其中<MsgStat>必须先于<Xstat>,其中可设置的值为“ON”和“OFF”,该项可选

【示例】

tcheck_set top_tb.u1.u2 (WIDTH (negedge clk)) OFF

#示例中,top_tb.u1.u2下的(WIDTH (negedge clk))检查产生的所有信息都将被屏蔽掉。如果对于示例中时序检查表达式的写法不了解,可以使用“tcheck_status top_tb.u1.u2”来查看top_tb.u1.u2下所有的时序检查表达式,具体应用如下所示:

% tcheck_status top_tb.u1.u2

% #0 (WIDTH (negedge clk)) MsgOn XOn

% #1 (WIDTH (posedge clk)) MsgOn XOn

% #2 (SETUP (negedge d)(posedge clk)) MsgOn XOFF

% #3 (HOLD (posedge clk)(negedge d)) MsgOn XOFF

最后在使用上述EDA工具时,因为不同的工具提供的路径不同,在具体使用时,一定要使用对应的工具获得该工具可识别的路径信息。

全部评论
厉害啊,佩服,整理的这么好
点赞 回复 分享
发布于 2022-10-04 16:00 山西

相关推荐

04-02 16:49
门头沟学院 Java
_bloodstream_:我也面了科大讯飞,主管面的时候听说急招人优先考虑能尽快实习的,我说忙毕设,后面就一直没消息了
点赞 评论 收藏
分享
04-30 21:35
已编辑
长安大学 C++
晓沐咕咕咕:评论区没被女朋友好好对待过的计小将可真多。觉得可惜可以理解,毕竟一线大厂sp。但是骂楼主糊涂的大可不必,说什么会被社会毒打更是丢人。女朋友体制内生活有保障,读研女朋友还供着,都准备订婚了人家两情相悦,二线本地以后两口子日子美滋滋,哪轮到你一个一线城市房子都买不起的996清高计小将在这说人家傻😅
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务