?? ch14.5.htm
字號:
</A>$hold upper bound event<BR>$setup lower bound event</P></TD></TR><TR><TD ROWSPAN="1" COLSPAN="1"><P CLASS="CellBody"><A NAME="pgfId=799"> </A><CODE CLASS="code">setup_limit</CODE></P></TD><TD ROWSPAN="1" COLSPAN="1"><P CLASS="CellBody"><A NAME="pgfId=1037"> </A>positive constant expression or specparam</P></TD></TR><TR><TD ROWSPAN="1" COLSPAN="1"><P CLASS="CellBody"><A NAME="pgfId=1096"> </A><CODE CLASS="code">hold_limit</CODE></P></TD><TD ROWSPAN="1" COLSPAN="1"><P CLASS="CellBody"><A NAME="pgfId=1099"> </A>positive constant expression or specparam</P></TD></TR><TR><TD ROWSPAN="1" COLSPAN="1"><P CLASS="CellBody"><A NAME="pgfId=1101"> </A>notifier (optional)</P></TD><TD ROWSPAN="1" COLSPAN="1"><P CLASS="CellBody"><A NAME="pgfId=1146"> </A>register</P></TD></TR></TABLE><P CLASS="Body"><A NAME="pgfId=1151"> </A>Besides being a constant expression or a specparam, the setup limit and hold limit must follow an additional restriction. Although individually each limit may be negative, the sum of the limits must be positive. That is,</P><P CLASS="Body"><A NAME="pgfId=1154"> </A> setup_limit + hold_limit > 0</P><P CLASS="Body"><A NAME="pgfId=1155"> </A>The <B CLASS="Keyword">$setuphold</B> timing check is a shorthand way to combine the functionality of <B CLASS="Keyword">$setup</B> and <B CLASS="Keyword">$hold</B> into one system task call. Therefore, the following invocation:</P><PRE CLASS="CodeIndent"><A NAME="pgfId=1156"> </A><B CLASS="Keyword">$setuphold</B>( <B CLASS="Keyword">posedge</B> clk, data, tSU, tHLD );</PRE><P CLASS="Body"><A NAME="pgfId=1157"> </A>is equivalent in functionality to the following, if <CODE CLASS="code">tSU</CODE> and <CODE CLASS="code">tHLD</CODE> are not negative:</P><PRE CLASS="CodeIndent"><A NAME="pgfId=1581"> </A><B CLASS="Keyword">$setup</B>( data, <B CLASS="Keyword">posedge</B> clk, tSU );<B CLASS="Keyword">$hold</B>( <B CLASS="Keyword">posedge</B> clk, data, tHLD );</PRE><P CLASS="SubSection"><A NAME="pgfId=1095"> </A><A NAME="marker=317"> </A><A NAME="marker=318"> </A><A NAME="marker=319"> </A>$width</P></DIV><DIV><H2 CLASS="Syntax"><A NAME="pgfId=1097"> </A></H2><PRE CLASS="BNFDef"><A NAME="pgfId=1098"> </A> <B CLASS="Keyword">$width</B> <B CLASS="Keyword">(</B> reference_event <B CLASS="Keyword">,</B> limit <B CLASS="Keyword">,</B> threshold [<B CLASS="Keyword"> ,</B> notifier ] <B CLASS="Keyword">)</B> <B CLASS="Keyword">;</B></PRE><P CLASS="Body"><A NAME="pgfId=1090"> </A><EM CLASS="DocSetOnly"><A HREF="ch14.5.htm#24399" CLASS="XRef">See : $hold arguments</A></EM> defines the <B CLASS="Keyword">$width</B> system task arguments.</P><TABLE BORDER="1"><CAPTION><P CLASS="TableTitle"><A NAME="pgfId=715"> </A>Table 14-14<A NAME="24399"> </A>: $width arguments</P></CAPTION><TR><TD ROWSPAN="1" COLSPAN="1"><P CLASS="CellBody"><A NAME="pgfId=717"> </A><CODE CLASS="code">reference_event</CODE></P></TD><TD ROWSPAN="1" COLSPAN="1"><P CLASS="CellBody"><A NAME="pgfId=718"> </A>edge triggered event</P></TD></TR><TR><TD ROWSPAN="1" COLSPAN="1"><P CLASS="CellBody"><A NAME="pgfId=1091"> </A><CODE CLASS="code">limit</CODE></P></TD><TD ROWSPAN="1" COLSPAN="1"><P CLASS="CellBody"><A NAME="pgfId=792"> </A>positive constant expression or specparam</P></TD></TR><TR><TD ROWSPAN="1" COLSPAN="1"><P CLASS="CellBody"><A NAME="pgfId=1081"> </A>threshold (optional)</P></TD><TD ROWSPAN="1" COLSPAN="1"><P CLASS="CellBody"><A NAME="pgfId=1040"> </A>positive constant expression or specparam</P></TD></TR><TR><TD ROWSPAN="1" COLSPAN="1"><P CLASS="CellBody"><A NAME="pgfId=1082"> </A>notifier (optional)</P></TD><TD ROWSPAN="1" COLSPAN="1"><P CLASS="CellBody"><A NAME="pgfId=1087"> </A>register</P></TD></TR></TABLE><P CLASS="Body"><A NAME="pgfId=1102"> </A>The <B CLASS="Keyword">$width</B> timing check monitors the width of signal pulses by timing the duration of signal levels from one clock edge to the opposite clock edge. Since a data event is not passed to <B CLASS="Keyword">$width</B>, it is derived from the reference event, as follows:</P><P CLASS="Body"><A NAME="pgfId=1103"> </A> data event = reference event signal with opposite edge</P><P CLASS="Body"><A NAME="pgfId=1104"> </A>Because of the way the data event is derived for <B CLASS="Keyword">$width</B>, an edge triggered event must be passed as the reference event. A compilation error will occur if the reference event is not an edge specification.</P><P CLASS="Body"><A NAME="pgfId=1105"> </A>The <B CLASS="Keyword">$width</B> timing check reports a violation in the following case:</P><P CLASS="Body"><A NAME="pgfId=1106"> </A> threshold < (time of data event) - (time of reference event) < limit</P><P CLASS="Body"><A NAME="pgfId=1107"> </A>In other words, the pulse width must be greater than or equal to limit in order to avoid a timing violation.</P><P CLASS="Body"><A NAME="pgfId=1108"> </A>The data event and the reference event will never occur at the same simulation time because these events are triggered by opposite transitions.</P><P CLASS="Body"><A NAME="pgfId=1109"> </A>The null arguments for <B CLASS="Keyword">$width</B> are not accepted. Therefore, the threshold argument must be passed if notifier argument is required. It is permissible, however, to drop both the threshold and notifier arguments when invoking <B CLASS="Keyword">$width</B>. </P></DIV><DIV><H2 CLASS="Example"><A NAME="pgfId=959"> </A></H2><P CLASS="Body"><A NAME="pgfId=1026"> </A>The following example demonstrates some <A NAME="marker=327"> </A>examples of legal and illegal calls:<A NAME="marker=328"> </A><A NAME="marker=329"> </A><A NAME="marker=330"> </A> </P><DIV><MAP NAME="ch14-17"></MAP><IMG SRC="ch14-17.gif" USEMAP="#ch14-17"></DIV><P CLASS="SubSection"><A NAME="pgfId=1111"> </A><A NAME="marker=269"> </A><A NAME="marker=273"> </A><A NAME="marker=304"> </A>$period</P></DIV><DIV><H2 CLASS="Syntax"><A NAME="pgfId=1113"> </A></H2><PRE CLASS="BNFDef"><A NAME="pgfId=719"> </A> <B CLASS="Keyword">$period</B> <B CLASS="Keyword">(</B> reference_event <B CLASS="Keyword">,</B> limit [ <B CLASS="Keyword">,</B> notifier ] <B CLASS="Keyword">) ;</B></PRE><PRE CLASS="BNFDef"><A NAME="pgfId=720"> </A></PRE><PRE CLASS="BNFDef"><A NAME="pgfId=721"> </A></PRE><P CLASS="Body"><A NAME="pgfId=1041"> </A><A HREF="ch14.5.htm#24399" CLASS="XRef">See : $hold arguments</A> defines the <B CLASS="Keyword">$period</B><B CLASS="boldemphasis"> </B>system task arguments. </P><TABLE BORDER="1"><CAPTION><P CLASS="TableTitle"><A NAME="pgfId=722"> </A>Table 14-15<A NAME="24399"> </A>: $period arguments</P></CAPTION><TR><TD ROWSPAN="1" COLSPAN="1"><P CLASS="CellBody"><A NAME="pgfId=724"> </A><CODE CLASS="code">reference_event</CODE></P></TD><TD ROWSPAN="1" COLSPAN="1"><P CLASS="CellBody"><A NAME="pgfId=794"> </A>edge triggered event</P></TD></TR><TR><TD ROWSPAN="1" COLSPAN="1"><P CLASS="CellBody"><A NAME="pgfId=858"> </A><CODE CLASS="code">limit</CODE></P></TD><TD ROWSPAN="1" COLSPAN="1"><P CLASS="CellBody"><A NAME="pgfId=884"> </A>positive constant expression or specparam</P></TD></TR><TR><TD ROWSPAN="1" COLSPAN="1"><P CLASS="CellBody"><A NAME="pgfId=948"> </A>notifier (optional)</P></TD><TD ROWSPAN="1" COLSPAN="1"><P CLASS="CellBody"><A NAME="pgfId=1039"> </A>register</P></TD></TR></TABLE><P CLASS="Body"><A NAME="pgfId=1115"> </A>Since the data event is not passed as an argument to <B CLASS="Keyword">$period</B>, it is derived from the reference event, as follows:</P><P CLASS="Body"><A NAME="pgfId=1117"> </A> data event = reference event signal with the same edge</P><P CLASS="Body"><A NAME="pgfId=1119"> </A>Because of the way the data event is derived for <B CLASS="Keyword">$period</B>, an edge triggered event must be passed as the reference event. A compilation error will occur if the reference event is not an edge specification.</P><P CLASS="Body"><A NAME="pgfId=1120"> </A>The <B CLASS="Keyword">$period</B> timing check reports a violation in the following case:</P><P CLASS="Body"><A NAME="pgfId=1122"> </A> (time of data event) - (time of reference event) < limit</P><P CLASS="SubSection"><A NAME="pgfId=1123"> </A><A NAME="marker=341"> </A><A NAME="marker=342"> </A><A NAME="marker=343"> </A>$skew</P></DIV><DIV><H2 CLASS="Syntax"><A NAME="pgfId=1125"> </A></H2><PRE CLASS="BNFDef"><A NAME="pgfId=1127"> </A> <B CLASS="Keyword">$skew</B> <B CLASS="Keyword">(</B> reference_event <B CLASS="Keyword">,</B> data_event <B CLASS="Keyword">,</B> limit [ <B CLASS="Keyword">,</B> notifier ] <B CLASS="Keyword">) ;</B></PRE><P CLASS="Body"><A NAME="pgfId=1128"> </A><A HREF="ch14.5.htm#24399" CLASS="XRef">See : $hold arguments</A> defines the <B CLASS="Keyword">$skew</B><B CLASS="boldemphasis"> </B>system task arguments.</P><TABLE BORDER="1"><CAPTION><P CLASS="TableTitle"><A NAME="pgfId=725"> </A>Table 14-16: <A NAME="24399"> </A>$skew arguments</P></CAPTION><TR><TD ROWSPAN="1" COLSPAN="1"><P CLASS="CellBody"><A NAME="pgfId=730"> </A><CODE CLASS="code">reference_event</CODE></P></TD><TD ROWSPAN="1" COLSPAN="1"><P CLASS="CellBody"><A NAME="pgfId=731"> </A>lower bound event</P></TD></TR><TR><TD ROWSPAN="1" COLSPAN="1"><P CLASS="CellBody"><A NAME="pgfId=732"> </A><CODE CLASS="code">data_event</CODE></P></TD><TD ROWSPAN="1" COLSPAN="1"><P CLASS="CellBody"><A NAME="pgfId=733"> </A>upper bound event</P></TD></TR><TR><TD ROWSPAN="1" COLSPAN="1"><P CLASS="CellBody"><A NAME="pgfId=734"> </A><CODE CLASS="code">limit</CODE></P></TD><TD ROWSPAN="1" COLSPAN="1"><P CLASS="CellBody"><A NAME="pgfId=735"> </A>positive constant expression or specparam</P></TD></TR><TR><TD ROWSPAN="1" COLSPAN="1"><P CLASS="CellBody"><A NAME="pgfId=736"> </A>notifier (optional)</P></TD><TD ROWSPAN="1" COLSPAN="1"><P CLASS="CellBody"><A NAME="pgfId=1092"> </A>register</P></TD></TR></TABLE><P CLASS="Body"><A NAME="pgfId=1131"> </A>The <B CLASS="Keyword">$skew</B> timing check reports a violation in the following case:</P><PRE CLASS="BNFDef"><A NAME="pgfId=1132"> </A> (time of data event) - (time of reference event) > limit</PRE><P CLASS="Body"><A NAME="pgfId=1133"> </A>The <B CLASS="Keyword">$skew</B> timing check always records the new time of reference event before it performs the timing check. If the data event and the reference event occur at the same simulation time, <B CLASS="Keyword">$skew</B> does not report a timing violation. </P><P CLASS="SubSection"><A NAME="pgfId=1134"> </A><A NAME="marker=350"> </A><A NAME="marker=351"> </A><A NAME="marker=352"> </A>$recovery</P></DIV><DIV><H2 CLASS="Syntax"><A NAME="pgfId=1136"> </A></H2><PRE CLASS="BNFDef"><A NAME="pgfId=1138"> </A> <B CLASS="Keyword">$recovery</B> <B CLASS="Keyword">(</B> reference_event <B CLASS="Keyword">,</B> data_event <B CLASS="Keyword">,</B> limit <B CLASS="Keyword">,</B> [ notifier ] <B CLASS="Keyword">)</B> <B CLASS="Keyword">;</B></PRE><P CLASS="Body"><A NAME="pgfId=1140"> </A></P><P CLASS="Body"><A NAME="pgfId=888"> </A></P><P CLASS="Body"><A NAME="pgfId=891"> </A></P><P CLASS="Body"><A NAME="pgfId=902"> </A><A HREF="ch14.5.htm#24399" CLASS="XRef">See : $hold arguments</A> defines the <B CLASS="Keyword">$recovery</B><B CLASS="boldemphasis"> </B>system task arguments.</P><TABLE BORDER="1"><CAPTION><P CLASS="TableTitle"><A NAME="pgfId=737"> </A>Table 14-17: <A NAME="24399"> </A>$recovery arguments</P></CAPTION><TR><TD ROWSPAN="1" COLSPAN="1"><P CLASS="CellBody"><A NAME="pgfId=739"> </A><CODE CLASS="code">reference_event</CODE></P></TD><TD ROWSPAN="1" COLSPAN="1"><P CLASS="CellBody"><A NAME="pgfId=740"> </A>edge triggered event</P></TD></TR><TR><TD ROWSPAN="1" COLSPAN="1"><P CLASS="CellBody"><A NAME="pgfId=741"> </A><CODE CLASS="code">data_event</CODE></P></TD><TD ROWSPAN="1" COLSPAN="1"><P CLASS="CellBody"><A NAME="pgfId=742"> </A>upper bound event</P></TD></TR><TR><TD ROWSPAN="1" COLSPAN="1"><P CLASS="CellBody"><A NAME="pgfId=743"> </A><CODE CLASS="code">limit</CODE></P></TD><TD ROWSPAN="1" COLSPAN="1"><P CLASS="CellBody"><A NAME="pgfId=744"> </A>positive constant expression or specparam</P></TD>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -