Verilog中的specify block和timing check

Posted _9_8

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Verilog中的specify block和timing check相关的知识,希望对你有一定的参考价值。

在ASIC设计中,有两种HDL construct来描述delay信息:

1)Distributed delays:通过specify event经过gates和nets的time,来描述delay;

对于net和gate都有三种delay信息: 1)rise delay   2)fall delay    3)transition to high-impedance value

每一种delay信息又分为:min:typical:max三种。

gate和net的model例子:

技术分享

技术分享

但是trireg类型的变量一般建模cap的信号:第三个delay信息表示他storage的信号值不再保证的时间;

技术分享技术分享

2)Module path delays:通过描述event从source(input/inout port)到destination(output/inout port)的time,来描述delay;

使用specify......endspecify来进行描述。

 

在specify block中一般有三种信息:

1)various paths across the module;

2)Assign delays to those paths;

3)Perform timing check;

技术分享

 

path的declaration包括三类:

1)simple path declaration;

技术分享

2)edge sensitive path declaration;   加 posedge/negedge

技术分享

3)state dependent path declaration;  加if/ifnone

技术分享

4)Edge-sensitive state-dependent paths

技术分享

 

“ *>”表示 full conection,   “ =>”表示parallel conection

技术分享

 

对于会改变polarity的 path,可以通过+/-来进行描述,否则按unknown polarity分析(rise edge可能引起fall edge/rise/edge/no transition)。

"+"表示positive polarity, rise 可能引起rise edge或no transition

技术分享

"-"表示positive polarity, rise 可能引起fall edge或no transition

技术分享

 

Specifying transiiton delay on module path

按rise---fall---to-z的三种来区分,每一种delay信息可以再细分min/typ/max

前三者用","区分,后三者用":"区分

 

在delay path中,有一些是到同一个output的,这是选择最近有效的一路来计算,如果还是有多条

同时有效,选择delay较小的那一条path。

技术分享

当Y从0变为1时,如果A transition more recently,那么选择6的delay,否则选择5的delay;

如果A和B都有效,那么选择5的delay; 

 

对于module path delay和distributed delay都存在的情况,选择两者之间大的那一个值。 

技术分享

 

对于path的distination必须是的单一driver的,所以一些wire类型的信号,必须变为gate输出的signal

技术分享

 

TIming Check,在给定的timing limit内,保证critical event occur;

可以分为两大类:

1)检查stability time window----------$setup, $hold, $setuphold, $recovery, $removal, $recrem

2)检查two event之间的time----------$skew, $width, $period, $nochange

注意这些timing check并不是task,specify内也不允许有task;

所有的这些timing check都有两个基准时间点:reference event和data event;

                                      两个时间评估点:timestamp event和timecheck event;

不报violation,必须保证data event在正确的time window下发生

 

$setup check: $setup(data_event, reference_event, time_check_limit,notifier)

技术分享

保证timestamp的时间在time window之内,否则会报violation

技术分享

当limit设置为0时,表示这个检查永远不会报violation

 

$hold check: $hold(reference_event, data_event, time_check_limit,notifier)

技术分享

当limit设置为0时,表示这个检查永远不会报violation

 

$setuphold check: $setuphold(reference_event, data_event, setup_time_check_limit,hold_time_check_limit,notifier)

 

$skew(reference_event, data_event, time_check_limit, notifier)

技术分享

技术分享

 

$width(reference_event, time_check_limit, threshold)

reference必须是一个trigger的event,另一个edge作为data event,两者时间间隔大于threshold(防止glitch),小于limit。

以上是关于Verilog中的specify block和timing check的主要内容,如果未能解决你的问题,请参考以下文章

生成块中的系统 Verilog 参数

NX二次开发-Block UI C++界面Specify Point(指定点)控件的获取(持续补充)

Code::Blocks无法调试 Starting the debuggee failed: No executable specified, use `target exec'

Code::Blocks无法调试 Starting the debuggee failed: No executable specified, use `target exec'

匿名函数 lambda

__ block