三防平板设计-时钟和控制信号的时序检查
时间:2024-08-09 作者:乐凡信息 浏览:147

三防平板设计中的时钟和控制信号的时序检查接受一个或者两个信号,并且验证它们的跳变永远不会被多个限制分割。对于只指定一个信号的检查,从该信号得到参考事件和数据事件。通常,这些检查执行下面的步骤:

(1)确定两个事件之间经过的时间;

(2)将经过的时间和指定的限制进行比较;

(3)如果经过时间和指定的限制冲突,则报告时序冲突。

偏斜(skew)检查有两个不同的冲突检测机制,即基于事件和基于定时器。

(1)基于事件的偏斜检查,只有在信号跳变时执行检查。

(2)基于定时器的偏斜检查,只要仿真时间等于经过的偏斜限制值时,就执行检查。

$nochange检查包含三个事件,而不是两个。1.$skew

语法格式为

其中,reference_event为时间戳事件;data_event为时间检查事件;limit为非负常数表达式;notifier(可选)为Reg。

在下面情况下,$skew时序检查报告一个冲突,即

三防平板设计中参考信号和数据信号的同时跳变不会引起$skew报告冲突,甚至抖动限制值为0的时候。

$skew时序检查是基于事件的,只有在一个数据事件后,才进行评估。如果没有一个数据事件(如数据事件无限延迟),将不会评估$skew时序检查,且不会报告时序冲突。相反,$timeskew和$fullskew默认基于定时器,如果绝对要求冲突报告且数据事件很晚出现或甚至于完全不出现时,就会使用它们。

一旦检测到参考事件,$skew将无限等待一个数据事件。在没有发生数据事件以前,不会报告时序冲突。第二个连续的参考事件将取消前面所等待的数据事件,开始新的数据事件。

在一个参考事件后,$skew时序检查不会停止对用于一个时序冲突的数据事件进行检查。当一个发生在参考事件后的数据事件超过了限制,则$skew报告时序冲突。2.$timeskew

语法格式为

其中,data_event为时间检查事件;reference_event为时间戳事件;limit为非负常数表达式;notifier(可选)为Reg;event_based_flag(可选)为常数表达式;remain_active_flag(可选)为常数表达式。

在出现下面情况时,$timeskew时序检查报告一个时序冲突:

三防平板设计中参考信号和数据信号的同时跳变不会引起$timeskew报告冲突,甚至抖动限制值为0。如果一个新的时间戳事件准确地发生在时间限制超时时,$timeskew也不会报告一个冲突。

$timeskew的默认行为是基于定时器的。在一个参考事件后经过的时间等于限制值时,立即报告一个冲突,且检查将变成静止的,不会报告更多的冲突(甚至是响应数据事件),直到下一个参考事件为止。然而,如果在限制内发生了一个数据事件,则不会报告一个冲突,检查将立即变成静止的。当它的条件为假并且没有设置remain_active_flag时,如果检测到一个有条件的参考事件时,该检查也将变成静止的。

三防平板设计中使用event_based_flag可以将基于时间的行为改为基于事件的行为。当同时设置event_based_flag和remain_active_flag时,它的行为像$skew检查。当只设置event_based_flag时,它的行为像$skew,下面情况例外:

(1)当报告第一个冲突后,变成静态的;

(2)当它的条件为假时,检测到一个有条件的参考事件。【例1.35】$timeskew检查的Verilog HDL描述的例子。

图1.16给出采样$timeskew的波形。图中:

(1)没有设置event_based_flag和remain_active_flag。

CP上的第一个参考事件(A点标记)后,在50个时间单位后,在B点报告一个冲突。将$timeskew检查改为静止的,并且不会报告更多的冲突。

(2)设置event_based_flag,但未设置remain_active_flag。

CP上第一个参考事件(A点标记)后,在CPN有一个负跳变(C点标记)时将产生一个时序冲突,将$timeskew检查改为静止的,且不会报告更多的冲突。当MODE为假时,在CP上产生第二个参考事件(F点标记),因此$timeskew检查保持静止。

(3)设置event_based_flag和remain_active_flag。

CP上第一个参考事件(A点标记)后,在CPN上若有3个负跳变(用C、D和E点标记),则将产生时序冲突。当MODE为假时,在CP上产生第二个参考事件(F点标记),但由于设置了remain_active_flag,$timeskew保持活动。因此,在CPN上的G、H、I和J点报告额外的冲突。换句话说,CPN上的所有负跳变将产生冲突,与$skew行为相同。


(4)没有设置event_based_flag,但设置remain_active_flag。

对于图1.16给出的波形,$timeskew在情况(4)下,与情况(1)有相同的行为。两个情况的不同之处如图1所示。 采样$timeskew



图1 设置remain_active_flag时采样$timeskew

三防平板设计中尽管MODE的条件为假,在CP产生参考事件(以F点标记),但由于设置了remain_active_ flag,所以$timeskew检查不会变为静止。因此,在B点报告冲突。然而对于情况(1),由于没有设置remain_active_flag,在F点,$timeskew检查将变为静止,且不会报告冲突。3.$fullskew

语法格式为

其中,data_event为时间戳或时间检查事件;reference_event为时间戳或时间检查事件;limit 1为非负常数表达式;limit 2为非负常数表达式;notifier(可选)为Reg;event_based_flag(可选)为常数表达式;remain_active_flag(可选)为常数表达式。

三防平板设计中除参考事件和数据事件可以以任何顺序跳变外,$fullskew类似于$timeskew。第一个限制是数据事件跟随参考事件的最大时间;第二个限制是参考事件跟随数据事件的最大时间。

当参考事件在数据事件之前时,参考事件是时间戳事件,数据事件是时间检查事件;当数据事件在参考事件之前时,数据事件是时间戳事件,参考事件是时间检查事件。

在下面情况下,$fullskew时序检查报告一个冲突。此处,当参考事件先出现跳变时,将限制设置为limit 1;当数据事件先出现跳变时,将限制设置为limit 2。

在参考信号和数据信号出现同时跳变时不会引起$fullskew报告一个时序冲突,甚至于抖动限制值为0时。三防平板设计中如果一个新的时间戳事件准确发生在到达时间限制时,$fullskew也不会报告一个冲突。

$fullskew默认的行为是基于定时器(没有设置event_based_flag)。在一个时间戳时间后,如果一个时间检查事件没有出现在到达时间限制时,将立即报告一个冲突,且时序检查将变成静止的。然而,如果在时间限制内发生了一个时间检查事件,则不会报告冲突,且时序检查立即变成静止的。

三防平板设计中一个参考事件或数据事件是一个时间戳事件,并且启动一个新的时序窗口。如果在前面的一个时间戳时间后,在时间限制范围内发生了一个时间检查事件,则时序检查将变成静止的,和上面描述的相同。

三防平板设计中在基于定时器的模式下,在一个时间限制范围内发生的第二个时间戳事件将启动一个新的时序窗口用于取代第一个窗口,除非第二个时间戳事件有一个关联条件,该条件的值为假,在这种情况下,$fullskew的行为取决于remain_active_flag。如果设置该标志,则将简单地忽略第二个时间戳事件。如果没有设置该标志,且时间检查是活动的,则时序检查将转为静止的。

通过event_based_flag,可以将$fullskew检查所默认的行为从基于定时器改为基于事件。在这个模式下,$fullskew类似于$skew,这是因为它不是在时间戳事件后到达时间限制时报告冲突(基于定时器模式),而是在时间限制值后发生时间检查事件才报告冲突。这样一个事件将结束第一个时序窗口,并且立即启动一个新的时序窗口,它充当新窗口的时间戳事件。在限制值范围内的一个时间检查事件将结束时序窗口,时序检查将变为静止的,且不报告时序冲突。

三防平板设计中在基于事件的模式下,发生在时间检查事件之前的第二个时间戳事件将开启一个新的时序窗口来取代第一个时序窗口,除非第二个时间戳时间所关联的条件值为假。在这种情况下,$fullskew的行为取决于remain_active_flag。如果设置标志,则简单忽略第二个时间戳事件;如果没有设置标志,且时间检查是活动的,则时序检查变为静止的。

在基于定时器和基于事件的模式中,如果时间戳事件没有条件或具有“真”条件,并且如果时序检查处于休眠状态,则激活时序检查。