<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Learn Static Timing Analysis - Learn VLSI</title>
	<atom:link href="https://learnvlsi.com/category/sta/feed/" rel="self" type="application/rss+xml" />
	<link>https://learnvlsi.com/category/sta/</link>
	<description></description>
	<lastBuildDate>Thu, 24 Oct 2024 17:14:28 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8</generator>

<image>
	<url>https://i0.wp.com/learnvlsi.com/wp-content/uploads/2025/03/cropped-Untitled-design-8.png?fit=32%2C32&#038;ssl=1</url>
	<title>Learn Static Timing Analysis - Learn VLSI</title>
	<link>https://learnvlsi.com/category/sta/</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">236112051</site>	<item>
		<title>DMSA STA</title>
		<link>https://learnvlsi.com/pd/dmsa-sta/631/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=dmsa-sta</link>
					<comments>https://learnvlsi.com/pd/dmsa-sta/631/#respond</comments>
		
		<dc:creator><![CDATA[learnvlsiadmin]]></dc:creator>
		<pubDate>Sun, 22 Sep 2024 16:43:15 +0000</pubDate>
				<category><![CDATA[PD]]></category>
		<category><![CDATA[STA]]></category>
		<guid isPermaLink="false">https://learnvlsi.com/?p=631</guid>

					<description><![CDATA[<p>Primetime provides an efficient way to analyze timing at different corners and different operating modes. MMMC (multi-mode multi corner) refers [&#8230;]</p>
<p>The post <a href="https://learnvlsi.com/pd/dmsa-sta/631/">DMSA STA</a> appeared first on <a href="https://learnvlsi.com">Learn VLSI</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Primetime provides an efficient way to analyze timing at different corners and different operating modes. MMMC (multi-mode multi corner) refers to performing timing analysis at various modes and corner.</p>



<h3 class="wp-block-heading">What is DMSA in STA?</h3>



<ul class="wp-block-list">
<li><strong>Distributed Multi-Scenario Analysis (DMSA)</strong> refers to timing analysis at different scenarios in a distributed manner. Scenarios are combination of various operating corners(process, voltage, temperature, RC corners) and different operating modes (functional mode, test mode, sleep mode, read mode, write mode etc).</li>



<li>Scenarios can be different for timing and power analysis. Some significant scenarios for timing and power are mentioned below,
<ul class="wp-block-list">
<li><strong>RC_worst_slowProcess_HighTemp_LowVoltage:</strong> This scenario is generally used for checking setup time. RC_worst indicates the worst values of Resistance and worst values for coupling and ground capacitance on interconnects are taken into the account. </li>



<li>Slow process indicates variation across the chip that can slow down the performance like slow operation of both pmos and nmos in a CMOS configuration. </li>



<li>High temperature increases the resistance and low voltage (VDD) increases the charging time of output capacitance; both reducing the performance. Hence this slow corner is used for checking setup time along with any operating mode of the chip. </li>



<li>Hold timing is also checked at this corner but most of the time it will be clean as hold is getting checked at slow corner.</li>



<li><strong>RC_best_fastProcess_LowTemp_HighVoltage:</strong> This scenario is generally used for checking hold time. RC_best indicates the best values of Resistance and best values for coupling and ground capacitance on interconnects are taken into the account ; fast process indicates variation across the chip that can speed up the process like fast operation of both pmos and nmos in a CMOS configuration. </li>



<li>Low temperature reduces the resistance and high voltage (VDD) decreases the charging time of output capacitance; both speeding up the performance. Hence this fast corner is used for checking hold time along with any operating mode of the chip. </li>



<li>Setup timing is also checked at this corner but most of the time it will be clean as setup is getting checked at fast corner.</li>



<li><strong>RC_worst_fastProcess_LowTemp_HighVoltage:</strong> This scenario is worst case check for power analysis. RC worst parasitic corner results in high power dissipation in interconnects, whereas fast process, low temperature and high voltage result in fast transition of the signal. </li>



<li>Again, this corner can be used to analyze power at any functional mode.</li>
</ul>
</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">DMSA</h2>



<ul class="wp-block-list">
<li>Distributed Multi-Scenario Analysis (DMSA) can analyze timing and power in multi-scenario environment in parallel. To invoke prime time in DMSA, use multi_scenario option,<br><strong>                                            pt_shell ‘-multi_scenario’</strong></li>
</ul>



<ul class="wp-block-list">
<li>A single session gets open (called as master), along with different hosts(worker processes) which will be managed by master. </li>



<li>User only communicates with master. Master allocates task to slaves, each one of which is dedicated to only one scenario. Number of worker processes (pt sessions) will be most of the time equal to the number of scenario. </li>



<li>A scenario is a combination of operating condition (process, voltage, temperature) and operating mode (like functional mode, test mode). So, if there are 8 scenarios defined, then 8 worker processes will be launched which will be managed by single master.</li>



<li>Dividing the data needed for multi-scenario timing analysis into common data and specific data, will speed up the process as certain data is common among all the scenarios like netlist and hence didn’t need to be defined separately for each scenario, and some data will be very specific for each scenario which will not be used by any other scenario like spefs.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">DMSA ECO Fixes</h2>



<p><strong>1. Transition Time Fixing:</strong> Transition time can be fixed in 3 ways, i) swapping the cell to lower vts, ii) up-sizing the cell, iii) inserting buffer. </p>



<p>To avoid any area penalty i.e. to avoid up-sizing of cell or adding any buffer; swapping to lower vts is a safe option to fix transition time on the paths which are violated by less margin. Moreover, inserting a buffer may hamper the setup timing of that particular path. Following is the command used for fixing transition time,</p>



<p><strong>fix_eco_drc -type max_transition -methods size_cell -setup_margin value<br>–</strong><strong>hold_margin value</strong></p>



<ul class="wp-block-list">
<li>The size_cell option in above command may up-size the driver cell also. In order to avoid this up-sizing, set PT variable eco_alternative_area_ratio_threshold to 1.0; as setting it to 1.0 will ensure that area of cell will remain same. Other method for fixing transition time is insert_buffer. </li>



<li>If insert_buffer method is used to fix the transition time, then the list of buffers should also need to be mentioned that should be used during buffer insertion. We can also specify setup and hold margin so as to preserve both the timing parameter when fixing transition time.</li>
</ul>



<p><strong>2.&nbsp;Setup Time Fixing:&nbsp;</strong>The very basic step in fixing setup timing is to swaps higher vts to lower vts. Other fixes like up-sizing, cross-talk analysis can be done afterwards if the timing is not getting improved by swapping of the cell. Following is the command used for fixing setup time,</p>



<p><strong>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;fix_eco_timing -methods size_cell -type setup -hold_margin value&nbsp;</strong><strong>-slack_lesser_than value</strong></p>



<ul class="wp-block-list">
<li>Setting PT variable eco_alternative_area_ratio_threshold to 1.0 will ensure that size_cell option in above command will prevent any area changes of a cell. If it is set to 2.0, it will allow to increase the cell area by 2 times the original area. Setting it to 0 will impose no restriction on area and tool may size it to any driver strength which is not recommendable.</li>
</ul>



<p><strong>3.&nbsp;Power Optimization:&nbsp;</strong>Cells in the timing path that have higher setup margin can be converted to higher vts, their driver strength can be reduced (downsizing) to optimize leakage and dynamic power, or extra redundant buffers can also be removed if it has enough setup and hold slack. Following is the command that is used for fixing power,</p>



<p><strong>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;fix_eco_power -setup_margin value -pattern_priority [list …]</strong></p>



<ul class="wp-block-list">
<li>When -pattern_priority is specified, tool will only swaps the lower vts to higher vts depending upon the priority given to VT cells, and will not do any downsizing. If -pattern_priority option is not specified than tool will downsize the cells to optimize the dynamic power.</li>
</ul>



<p><strong>4.&nbsp;Hold Time Fixing:&nbsp;</strong>Hold fixing can be done by either swapping lower vts to higher vts or by inserting buffers. For fixing hold using swapping, set the PT variable&nbsp;eco_alternative_area_ratio_threshold&nbsp;to 1.0. Following is the command for fixing the hold timing through swaps,</p>



<p><strong>fix_eco_timing -type hold -methods size_cell -setup_margin value<br></strong><strong>-slack_lesser_than value</strong></p>



<ul class="wp-block-list">
<li>-setup_margin option in the above command will make sure that the setup timing will be preserved by the value specified. If hold fix is to be done by buffer insertion than list of buffer need to be specified that are to be used during buffer insertion. Option -physical_mode will insert buffers by extracting cell placement information from lef and def. Following command for hold fixing is used,</li>
</ul>



<p><strong>fix_eco_timing -type hold -methods insert_buffer -setup_margin value&nbsp;</strong><strong>-physical_mode mode -slack_lesser_than value</strong></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>
<p><a class="a2a_button_whatsapp" href="https://www.addtoany.com/add_to/whatsapp?linkurl=https%3A%2F%2Flearnvlsi.com%2Fpd%2Fdmsa-sta%2F631%2F&amp;linkname=DMSA%20STA" title="WhatsApp" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_linkedin" href="https://www.addtoany.com/add_to/linkedin?linkurl=https%3A%2F%2Flearnvlsi.com%2Fpd%2Fdmsa-sta%2F631%2F&amp;linkname=DMSA%20STA" title="LinkedIn" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_microsoft_teams" href="https://www.addtoany.com/add_to/microsoft_teams?linkurl=https%3A%2F%2Flearnvlsi.com%2Fpd%2Fdmsa-sta%2F631%2F&amp;linkname=DMSA%20STA" title="Teams" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Flearnvlsi.com%2Fpd%2Fdmsa-sta%2F631%2F&#038;title=DMSA%20STA" data-a2a-url="https://learnvlsi.com/pd/dmsa-sta/631/" data-a2a-title="DMSA STA"></a></p><p>The post <a href="https://learnvlsi.com/pd/dmsa-sta/631/">DMSA STA</a> appeared first on <a href="https://learnvlsi.com">Learn VLSI</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://learnvlsi.com/pd/dmsa-sta/631/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">631</post-id>	</item>
		<item>
		<title>How to fix setup timing violation?</title>
		<link>https://learnvlsi.com/pd/how-to-fix-setup-timing-violation/524/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=how-to-fix-setup-timing-violation</link>
					<comments>https://learnvlsi.com/pd/how-to-fix-setup-timing-violation/524/#respond</comments>
		
		<dc:creator><![CDATA[learnvlsiadmin]]></dc:creator>
		<pubDate>Sun, 01 Sep 2024 13:00:10 +0000</pubDate>
				<category><![CDATA[PD]]></category>
		<category><![CDATA[STA]]></category>
		<guid isPermaLink="false">https://learnvlsi.com/?p=524</guid>

					<description><![CDATA[<p>13 ways to fix setup timing violation 2. Pipelining𝑇𝑙𝑎𝑢𝑛𝑐ℎ𝑒𝑑𝑔𝑒 + 𝑇𝑙𝑎𝑢𝑛𝑐ℎ𝑙𝑎𝑡𝑒𝑛𝑐𝑦 + 𝑇𝑐𝑜𝑚𝑏 &#60; 𝑇𝑐𝑎𝑝𝑡𝑢𝑟𝑒𝑒𝑑𝑔𝑒 − 𝑇𝑠𝑒𝑡𝑢𝑝 + 𝑇𝑐𝑎𝑝𝑡𝑢𝑟𝑒𝑙𝑎𝑡𝑒𝑛𝑐𝑦 What [&#8230;]</p>
<p>The post <a href="https://learnvlsi.com/pd/how-to-fix-setup-timing-violation/524/">How to fix setup timing violation?</a> appeared first on <a href="https://learnvlsi.com">Learn VLSI</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h3 class="wp-block-heading">13 ways to fix setup timing violation</h3>



<ol class="wp-block-list">
<li><strong>Reducing the Clock Frequency</strong> <strong>(not preferrable)</strong><br>𝑇𝑙𝑎𝑢𝑛𝑐ℎ<em>𝑒𝑑𝑔𝑒 + 𝑇𝑙𝑎𝑢𝑛𝑐ℎ</em>𝑙𝑎𝑡𝑒𝑛𝑐𝑦 + 𝑇𝑐𝑜𝑚𝑏 &lt; 𝑇𝑐𝑎𝑝𝑡𝑢𝑟𝑒<em>𝑒𝑑𝑔𝑒 − 𝑇𝑠𝑒𝑡𝑢𝑝 + 𝑇𝑐𝑎𝑝𝑡𝑢𝑟𝑒</em>𝑙𝑎𝑡𝑒𝑛𝑐𝑦<br>• The easiest and simplest solution is to reduce the frequency (increase the period) of the clock to add time to the capture time<br>• Doing this degrade the performance (Data rate / CPU speed / Operations per second / etc)<br>• The decision to reduce the clock frequency is left to the architecture team and can’t be modified individually by RTL or PNR engineers<br>• Sometimes this solution is not acceptable because the product standard requires specific data rate that needs to be met</li>
</ol>



<p>2. <strong>Pipelining</strong><br>𝑇𝑙𝑎𝑢𝑛𝑐ℎ<em>𝑒𝑑𝑔𝑒 + 𝑇𝑙𝑎𝑢𝑛𝑐ℎ</em>𝑙𝑎𝑡𝑒𝑛𝑐𝑦 + 𝑇𝑐𝑜𝑚𝑏 &lt; 𝑇𝑐𝑎𝑝𝑡𝑢𝑟𝑒<em>𝑒𝑑𝑔𝑒 − 𝑇𝑠𝑒𝑡𝑢𝑝 + 𝑇𝑐𝑎𝑝𝑡𝑢𝑟𝑒</em>𝑙𝑎𝑡𝑒𝑛𝑐𝑦</p>



<h4 class="wp-block-heading">What is Piepelining?</h4>



<p><br>• The most common way to fix setup in RTL design is to add pipeline registers.<br>• The idea of pipelining is to split a large 𝑇𝑐𝑜𝑚𝑏 into multiple clock cycles.<br>• For example, to implement the equation 𝐴 + 𝐵 ∗𝐶, one can do all the operations in one cycle or do the multiplication in one cycle then the addition in the next<br>cycle as shown in the diagram</p>



<p><br>• The disadvantage of pipelining is:<br>o <strong>More area</strong> due to the pipeline registers<br>o <strong>More latency</strong>: Instead of finishing the operation in one cycle we finish it in multiple cycles.<br>o <strong>Synchronization</strong><br>. Since the data is delayed by the pipeline registers, the downstream logic that will receive the data have to account for this delay. Notice also how we needed to add pipeline on A as well to synchronize 𝐴1 with 𝐵1 ∗𝐶1 otherwise we would have added 𝐴2 from next sample to 𝐵1 ∗𝐶1</p>



<figure class="wp-block-image size-full is-resized"><img data-recalc-dims="1" fetchpriority="high" decoding="async" width="484" height="351" src="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image.png?resize=484%2C351&#038;ssl=1" alt="" class="wp-image-525" style="width:411px;height:auto" srcset="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image.png?w=484&amp;ssl=1 484w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image.png?resize=300%2C218&amp;ssl=1 300w" sizes="(max-width: 484px) 100vw, 484px" /></figure>



<h4 class="wp-block-heading"></h4>



<figure class="wp-block-image size-full is-resized"><img data-recalc-dims="1" decoding="async" width="421" height="342" src="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-1.png?resize=421%2C342&#038;ssl=1" alt="" class="wp-image-526" style="width:413px;height:auto" srcset="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-1.png?w=421&amp;ssl=1 421w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-1.png?resize=300%2C244&amp;ssl=1 300w" sizes="(max-width: 421px) 100vw, 421px" /></figure>



<p>3. Multicycle Path</p>



<h4 class="wp-block-heading">What is Multicycle Path?</h4>



<p>• This method has some similarity to pipelining. Similarly, we will let the combinational path finish in multiple cycles.<br>• The difference is we won’t add pipeline registers. Instead, we will capture the data at another capture clock edge<br>• This can be done in 2 ways1:<br>o Use a control circuit to mask the 1st capture edge and allow another one.<br>o Use a divided clock for the capture FF as shown in the diagram below</p>



<p>𝑇𝑙𝑎𝑢𝑛𝑐ℎ<em>𝑒𝑑𝑔𝑒 + 𝑇𝑙𝑎𝑢𝑛𝑐ℎ</em>𝑙𝑎𝑡𝑒𝑛𝑐𝑦 + 𝑇𝑐𝑜𝑚𝑏 &lt; 𝑇𝑐𝑎𝑝𝑡𝑢𝑟𝑒<em>𝑒𝑑𝑔𝑒 − 𝑇𝑠𝑒𝑡𝑢𝑝 + 𝑇𝑐𝑎𝑝𝑡𝑢𝑟𝑒</em>𝑙𝑎𝑡𝑒𝑛𝑐�</p>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" decoding="async" width="1024" height="265" src="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-2.png?resize=1024%2C265&#038;ssl=1" alt="" class="wp-image-527" srcset="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-2.png?resize=1024%2C265&amp;ssl=1 1024w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-2.png?resize=300%2C78&amp;ssl=1 300w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-2.png?resize=768%2C199&amp;ssl=1 768w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-2.png?resize=1536%2C398&amp;ssl=1 1536w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-2.png?w=1655&amp;ssl=1 1655w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p><strong>Multi Cycle Path vs Pipelining</strong><br>𝑇𝑙𝑎𝑢𝑛𝑐ℎ<em>𝑒𝑑𝑔𝑒 + 𝑇𝑙𝑎𝑢𝑛𝑐ℎ</em>𝑙𝑎𝑡𝑒𝑛𝑐𝑦 + 𝑇𝑐𝑜𝑚𝑏 &lt; 𝑇𝑐𝑎𝑝𝑡𝑢𝑟𝑒<em>𝑒𝑑𝑔𝑒 − 𝑇𝑠𝑒𝑡𝑢𝑝 + 𝑇𝑐𝑎𝑝𝑡𝑢𝑟𝑒</em>𝑙𝑎𝑡𝑒𝑛𝑐𝑦<br>• At first it might appear that multi cycle path and pipelining are the same. But a deep look shows the big difference</p>



<p><br>• In the case of pipelining:<br>o In the 1st cycle A,B,C enters the 1st stage of the pipeline. In the 2nd cycle A,B,C enters the 2nd stage while a new sample enters 1st stage of the pipeline<br>o We receive an output every clock cycle and the added latency due to the pipeline registers affects us at the beginning only</p>



<p><br>• In the case of MCP:<br>o In the 1st cycle A,B,C enters the circuit. In the 2nd cycle, the circuit is still busy and we can’t insert a new sample until it finishes.<br>o We receive an output every 2 clock cycles<br>• This shows that pipelining fix setup and have high processing speed while MCP slows down the processing speed<br>• You can think of MCP as reducing the clock frequency but selectively in parts of the circuit and not on the entire circuit</p>



<figure class="wp-block-image size-full is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="759" height="306" src="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-3.png?resize=759%2C306&#038;ssl=1" alt="" class="wp-image-528" style="width:541px;height:auto" srcset="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-3.png?w=759&amp;ssl=1 759w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-3.png?resize=300%2C121&amp;ssl=1 300w" sizes="(max-width: 759px) 100vw, 759px" /></figure>



<figure class="wp-block-image size-full is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="898" height="306" src="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-4.png?resize=898%2C306&#038;ssl=1" alt="" class="wp-image-529" style="width:587px;height:auto" srcset="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-4.png?w=898&amp;ssl=1 898w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-4.png?resize=300%2C102&amp;ssl=1 300w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-4.png?resize=768%2C262&amp;ssl=1 768w" sizes="(max-width: 898px) 100vw, 898px" /></figure>



<h4 class="wp-block-heading">4. Retiming</h4>



<h4 class="wp-block-heading"><strong>What is Retiming in VLSI</strong></h4>



<p>• In this method if 𝑇𝑐𝑜𝑚𝑏 is large to fit in the clock cycle, we split the logic and move part of it to another cycle.</p>



<p><br>• Consider the example below:<br>o The red and green logic combined make a 𝑇𝑐𝑜𝑚𝑏=𝟕𝟎𝟎𝑝𝑠 which causes a setup violation.<br>o We move the green logic to the next clock cycle to be combined with the blue logic.<br>o This reduces 𝑇𝑐𝑜𝑚𝑏 between FF1 and FF2 to 𝟓𝟎𝟎𝑝𝑠 instead of 𝟕𝟎𝟎𝑝𝑠 which passes setup.<br>o But increases 𝑇𝑐𝑜𝑚𝑏 between FF2 and FF3 to 𝟑𝟎𝟎𝑝𝑠 instead of 𝟏𝟎𝟎𝑝𝑠 but this is okay because it also passes setup. If the blue logic was big this method won’t.</p>



<figure class="wp-block-image size-full is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="835" height="410" src="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-5.png?resize=835%2C410&#038;ssl=1" alt="" class="wp-image-530" style="width:520px;height:auto" srcset="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-5.png?w=835&amp;ssl=1 835w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-5.png?resize=300%2C147&amp;ssl=1 300w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-5.png?resize=768%2C377&amp;ssl=1 768w" sizes="(max-width: 835px) 100vw, 835px" /></figure>



<p>• <strong>Retiming can be done manually by the RTL designer or automatically by the synthesis tools</strong></p>



<p><br>o In the example below, the purple logic takes as input A and B. If we move the green logic to the next cycle, we get B one cycle later than what was<br>expected. When we wait for this one cycle, 𝑨𝟏 will be gone and a new 𝑨𝟐 will arrive which will get computed with sample 𝑩𝟏. This will break the<br>functionality of the circuit</p>



<p><br>o Synthesis tools will avoid any retiming that breaks the functionality as this example did.<br>o The RTL designer has full control over the code so he can fix this issue by, for example, adding a pipeline register before the purple logic to delay it one<br>cycle and handle any new issues that will appear due to this added register<br>o Hence, the RTL designer can do more aggressive retiming compared to the synthesis tools but with extra effort.<br></p>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="215" src="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-6.png?resize=1024%2C215&#038;ssl=1" alt="" class="wp-image-531" srcset="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-6.png?resize=1024%2C215&amp;ssl=1 1024w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-6.png?resize=300%2C63&amp;ssl=1 300w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-6.png?resize=768%2C161&amp;ssl=1 768w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-6.png?w=1463&amp;ssl=1 1463w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p><strong>Retiming + Pipelining</strong><br>𝑇𝑙𝑎𝑢𝑛𝑐ℎ<em>𝑒𝑑𝑔𝑒 + 𝑇𝑙𝑎𝑢𝑛𝑐ℎ</em>𝑙𝑎𝑡𝑒𝑛𝑐𝑦 + 𝑇𝑐𝑜𝑚𝑏 &lt; 𝑇𝑐𝑎𝑝𝑡𝑢𝑟𝑒<em>𝑒𝑑𝑔𝑒 − 𝑇𝑠𝑒𝑡𝑢𝑝 + 𝑇𝑐𝑎𝑝𝑡𝑢𝑟𝑒</em>𝑙𝑎𝑡𝑒𝑛𝑐𝑦</p>



<p><br>• The previous example shows how retiming can be combined with pipelining.<br>• Lets Consider the same example of 𝑨 + 𝑩 ∗𝑪<br>o We can move the adder to the next clock cycle if there is margin there.<br>o However, we get the same issue in the previous slide that A is not synchronized with B*C. So we add a pipeline register.<br>o This way we fixed the setup violation and saved the area of the 𝐵 ∗ 𝐶 pipeline registers</p>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="248" src="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-7.png?resize=1024%2C248&#038;ssl=1" alt="" class="wp-image-532" srcset="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-7.png?resize=1024%2C248&amp;ssl=1 1024w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-7.png?resize=300%2C73&amp;ssl=1 300w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-7.png?resize=768%2C186&amp;ssl=1 768w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-7.png?resize=1536%2C372&amp;ssl=1 1536w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-7.png?w=1646&amp;ssl=1 1646w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p><strong>6. Optimizing Synthesis</strong></p>



<p>• Synthesis tools have lots of features and switches that the engineer can use to enhance the timing and control the trade-offs between the PPA metrics.<br>• This topic is very large and needs a tutorial on its own, so we will demonstrate just a few of what can be done.</p>



<p><br>o Increase the timing effort<br>: Most synthesis tools have switches that controls the effort the tool will put to fix a certain PPA metric or to do a certain optimization. Higher effort leads to better optimization but higher runtime while a lower effort leads to less optimization but better runtime.</p>



<p><br>o Decrease or disable area and power efforts : Area and power optimizations usually degrade the timing of the circuit. Reducing the effort of these optimizations or disabling them all together may enhance the timing but worsen the area and power of your chip</p>



<p><br>o Enable Flattening: The RTL code consists of several modules connected to each other. By default, synthesis tools will synthesize each module separately and then connect them together in the top module, thus preserve the hierarchy and boundaries between the modules. </p>



<p>Another approach is to remove the module boundaries and make all cells in one hierarchy. This is called flattening and generally produce better timing result.</p>



<figure class="wp-block-image size-full is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="971" height="354" src="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-8.png?resize=971%2C354&#038;ssl=1" alt="" class="wp-image-533" style="width:635px;height:auto" srcset="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-8.png?w=971&amp;ssl=1 971w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-8.png?resize=300%2C109&amp;ssl=1 300w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-8.png?resize=768%2C280&amp;ssl=1 768w" sizes="(max-width: 971px) 100vw, 971px" /></figure>



<p><strong>7. False Path</strong></p>



<p>Applying False Paths in the Constraints<br>𝑇𝑙𝑎𝑢𝑛𝑐ℎ<em>𝑒𝑑𝑔𝑒 + 𝑇𝑙𝑎𝑢𝑛𝑐ℎ</em>𝑙𝑎𝑡𝑒𝑛𝑐𝑦 + 𝑇𝑐𝑜𝑚𝑏 &lt; 𝑇𝑐𝑎𝑝𝑡𝑢𝑟𝑒<em>𝑒𝑑𝑔𝑒 − 𝑇𝑠𝑒𝑡𝑢𝑝 + 𝑇𝑐𝑎𝑝𝑡𝑢𝑟𝑒</em>𝑙𝑎𝑡𝑒𝑛𝑐𝑦</p>



<p><br>• False paths are timing paths that can’t possibly occur due to the logic of the circuit<br>• Consider the example below:<br>• Both muxes have the same select signal. This means we have 2 possible timing paths. The one going through both red logics (200 + 300 = 500𝑝𝑠) and the one going through both blue logics (100 +500 = 600𝑝𝑠)<br>• The paths going through a red logic then a blue logic (200+ 500 = 700𝑝𝑠) or blue logic then red logic (100 +300 = 400𝑝𝑠) is impossible to happen.</p>



<p><br>• If we don’t apply correct constraints on these paths, not only do we get fake setup<br>violations, but we hinder the synthesis and<br>violating timing paths<br>• Unless we instruct the tool to ignore these false paths, they will be considered for timing analysis leading to the large 𝑇𝑐𝑜𝑚𝑏 of the red to blue path which will violate setup.<br><strong>𝑝𝑜𝑠𝑠𝑖𝑏𝑙𝑒 𝑝𝑎𝑡ℎ𝑠</strong><br>PnR tools ability to optimize the other real because the tools apply extreme optimizations only on the  critical and worst paths and it won’t consider the less critical paths for these optimizations unless<br>they solve the most critical ones.</p>



<figure class="wp-block-image size-full is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="709" height="418" src="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-9.png?resize=709%2C418&#038;ssl=1" alt="" class="wp-image-534" style="width:490px;height:auto" srcset="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-9.png?w=709&amp;ssl=1 709w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-9.png?resize=300%2C177&amp;ssl=1 300w" sizes="(max-width: 709px) 100vw, 709px" /></figure>



<p><strong>8. Optimizing the Floorplan</strong></p>



<p>• Floorplaning is the 1st step in the PNR flow and involves things like creating the chip size and boundaries, manually placing the major blocks (analog, SRAM, etc) in the chip, and placing the chip ports<br>• Here are some of the things that affects the setup in the circuit<br>o A small chip area might cause the cells to get closer to each other and closer to the ports which in turn will reduce the wire delays. However, if the size is too small several issues will appear such as big voltage drop, cell congestion, routing detours, crosstalk, etc1.</p>



<p><br>o The placement of the major blocks in the chip affects the timing. The example on the left shows how the placement of the SRAMs near the IO ports might block the standard cells from being placed near their relevant ports. Not only that but they will block the routing resulting in longer wire delays to go<br>around them.</p>



<p><br>o The placement of the ports also affects the timing. The example on the right shows how a bad placement of the ports can lead to long wire delays and buffering which will worsen 𝑇𝑐𝑜𝑚b</p>



<figure class="wp-block-image size-full is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="679" height="327" src="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-10.png?resize=679%2C327&#038;ssl=1" alt="" class="wp-image-535" style="width:520px;height:auto" srcset="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-10.png?w=679&amp;ssl=1 679w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-10.png?resize=300%2C144&amp;ssl=1 300w" sizes="(max-width: 679px) 100vw, 679px" /></figure>



<figure class="wp-block-image size-full is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="689" height="307" src="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-11.png?resize=689%2C307&#038;ssl=1" alt="" class="wp-image-536" style="width:540px;height:auto" srcset="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-11.png?w=689&amp;ssl=1 689w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-11.png?resize=300%2C134&amp;ssl=1 300w" sizes="(max-width: 689px) 100vw, 689px" /></figure>



<p><strong>9. Optimizing the wire delay</strong></p>



<p>• In part 1 we showed how a signal propagating through an RC circuit will have a delay proportional to the resistance and the capacitance. Hence, to reduce this delay we need to reduce the resistance and capacitance of the wire.</p>



<p><br>• This will also decrease the load cap of the cell that drives the wire which will speed up the cell too.</p>



<p>Reducing the resistance 𝑹 =𝝆𝑳/<strong>A</strong></p>



<ol class="wp-block-list">
<li>Reducing the length 𝑳 of the wire will reduce the delay. We showed some examples on how to reduce it using a better floorplan.<br>Increasing the width will decrease the delay. Higher metal layers have higher default width and also bigger thickness<br>hence larger area 𝑨. PNR tools will use these higher layers for long and critical nets to reduce their delay. The PNR engineer can manually move the wires to higher layers during ECO or apply non-default routing rules (NDR) on these nets to make the router route them in higher layers.</li>
</ol>



<figure class="wp-block-image size-full is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="545" height="241" src="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-12.png?resize=545%2C241&#038;ssl=1" alt="" class="wp-image-537" style="width:457px;height:auto" srcset="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-12.png?w=545&amp;ssl=1 545w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-12.png?resize=300%2C133&amp;ssl=1 300w" sizes="(max-width: 545px) 100vw, 545px" /></figure>



<p>Reducing the capacitance 𝑪 =𝝐𝑨<strong>/d</strong><br></p>



<p>Increasing the spacing 𝒅 by moving the two wires aways from each other will reduce the capacitance between them.<br>We can apply NDR on specific nets to tell the router that we want no nets to get routed very close to these nets<br>Reducing the common distance. When two wires move along each other for a long distance the common area 𝑨 will be big leading to bigger capacitance. We can move one of the two wires to another layer to reduce the delay.</p>



<figure class="wp-block-image size-full is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="791" height="158" src="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-13.png?resize=791%2C158&#038;ssl=1" alt="" class="wp-image-538" style="width:553px;height:auto" srcset="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-13.png?w=791&amp;ssl=1 791w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-13.png?resize=300%2C60&amp;ssl=1 300w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-13.png?resize=768%2C153&amp;ssl=1 768w" sizes="(max-width: 791px) 100vw, 791px" /></figure>



<figure class="wp-block-image size-full is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="947" height="156" src="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-14.png?resize=947%2C156&#038;ssl=1" alt="" class="wp-image-539" style="width:563px;height:auto" srcset="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-14.png?w=947&amp;ssl=1 947w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-14.png?resize=300%2C49&amp;ssl=1 300w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-14.png?resize=768%2C127&amp;ssl=1 768w" sizes="(max-width: 947px) 100vw, 947px" /></figure>



<p><strong>10. Relaxing the Power Grid</strong><br>𝑇𝑙𝑎𝑢𝑛𝑐ℎ<em>𝑒𝑑𝑔𝑒 + 𝑇𝑙𝑎𝑢𝑛𝑐ℎ</em>𝑙𝑎𝑡𝑒𝑛𝑐𝑦 + 𝑇𝑐𝑜𝑚𝑏 &lt; 𝑇𝑐𝑎𝑝𝑡𝑢𝑟𝑒<em>𝑒𝑑𝑔𝑒 − 𝑇𝑠𝑒𝑡𝑢𝑝 + 𝑇𝑐𝑎𝑝𝑡𝑢𝑟𝑒</em>𝑙𝑎𝑡𝑒𝑛𝑐𝑦</p>



<p><br>• The power grid is the metal connection that delivers the power from higher metal layers down to the standard cells<br>• We showed how the wire delay is affected by things like spacing and width, etc. A wide and compact power grid will leave few routing resource for the signal nets leaving no option for increasing spacing or width.<br>• However, relaxing the power grid will increase the resistance of the power network causing bigger voltage to drop. So, the PNR designer has to trade-off between enhancing timing and fixing voltage drop.</p>



<figure class="wp-block-image size-large is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="365" src="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-15.png?resize=1024%2C365&#038;ssl=1" alt="" class="wp-image-540" style="width:665px;height:auto" srcset="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-15.png?resize=1024%2C365&amp;ssl=1 1024w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-15.png?resize=300%2C107&amp;ssl=1 300w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-15.png?resize=768%2C274&amp;ssl=1 768w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-15.png?w=1323&amp;ssl=1 1323w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p><strong>11. Upsizing</strong></p>



<h3 class="wp-block-heading">What is Upsizing in VLSI?</h3>



<p>We showed in part 1 how the MOSFET size affects the propagation delay of the cell. So to fix setup we can use larger cells that has less propagation delay</p>



<p><strong>There are several considerations when doing this method:</strong></p>



<p>Bigger cells means more area and power consumption</p>



<p>Bigger cells has larger gate capacitance. This will slow down the cell that drives them because it now has<br>larger load capacitance. The enhancement of upsizing the cell should overcome the slow down of the<br>driving cell.</p>



<p>Since big cells consume more power they are likely to cause big voltage drop on the cells around them.</p>



<p>During ECO flow there might not be enough area to accommodate the bigger cell which require you to<br>move the cells around it and then reroute the nets to their pins. The moving of the cells and the reroute<br>could worsen the timing for these cells</p>



<figure class="wp-block-image size-full is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="478" height="484" src="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-17.png?resize=478%2C484&#038;ssl=1" alt="" class="wp-image-542" style="width:387px;height:auto" srcset="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-17.png?w=478&amp;ssl=1 478w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-17.png?resize=296%2C300&amp;ssl=1 296w" sizes="(max-width: 478px) 100vw, 478px" /></figure>



<p><strong>12. Increasing the Driving Strength</strong><br>𝑇𝑙𝑎𝑢𝑛𝑐ℎ<em>𝑒𝑑𝑔𝑒 + 𝑇𝑙𝑎𝑢𝑛𝑐ℎ</em>𝑙𝑎𝑡𝑒𝑛𝑐𝑦 + 𝑇𝑐𝑜𝑚𝑏 &lt; 𝑇𝑐𝑎𝑝𝑡𝑢𝑟𝑒<em>𝑒𝑑𝑔𝑒 − 𝑇𝑠𝑒𝑡𝑢𝑝 + 𝑇𝑐𝑎𝑝𝑡𝑢𝑟𝑒</em>𝑙𝑎𝑡𝑒𝑛𝑐𝑦</p>



<p><br>• When we discussed upsizing we showed that when a cell drives a large load capacitance its output transition time gets slower which in turn will slow down the load cells.<br>Increasing the driver strength will enhance the transition time which in turn will enhance the load cells delay</p>



<p><br>• There are several ways to enhance the driving strength<br><strong>o Upsizing the driver cell:</strong><br>Bigger cells produce larger current and hence charge the load capacitance faster. This method combine the benefit of speeding up the driver by upsizing and the benefit of speeding up the load cells because they see a better input transition time.</p>



<p><br><strong>o Downsizing the load cells:</strong><br>this will decrease the load capacitance of the driver which will speed up the propagation and transition time which in turn will speed up the load cells. However, smaller cells has larger delay, so for this method to work the gain from enhancing the driving strength should overcome the increase in delay due to downsizing</p>



<p><br><strong>o Fanout splitting :</strong><br>Instead of one cell driving all the fanout we can duplicate the driver and split the fanout among them as shown in the diagram. But note that the driver of the driver is now seeing double the load cap which increases its delay. So, you have to balance things to make the overall gain overcome the increase in delay</p>



<p><br><strong>o Side load isolation:</strong><br>Add a small buffer that isolates a large load from the driver. In the example shown, the driver now sees the small cap of the buffer instead of the large cap of the large NAND. This will fix the green paths but will worsen the red path because the small buffer will add a delay that increases the overall delay of the red path. </p>



<p>For this method to work, the red path should be passing setup check and have good a margin to accommodate the increase in delay.</p>



<figure class="wp-block-image size-full is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="677" height="290" src="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-18.png?resize=677%2C290&#038;ssl=1" alt="" class="wp-image-543" style="width:520px;height:auto" srcset="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-18.png?w=677&amp;ssl=1 677w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-18.png?resize=300%2C129&amp;ssl=1 300w" sizes="(max-width: 677px) 100vw, 677px" /></figure>



<figure class="wp-block-image size-large is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="290" src="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-19.png?resize=1024%2C290&#038;ssl=1" alt="" class="wp-image-544" style="width:691px;height:auto" srcset="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-19.png?resize=1024%2C290&amp;ssl=1 1024w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-19.png?resize=300%2C85&amp;ssl=1 300w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-19.png?resize=768%2C218&amp;ssl=1 768w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-19.png?w=1030&amp;ssl=1 1030w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p><strong>13. Breaking up Long Nets</strong></p>



<p>• When a cell drives a very long wire with big capacitance it will have bad propagation and transition times. By breaking the long wire with buffers, the overall enhancement could overcome the delay of the added buffers<br>• If the wire is very long, we can split it with an inverter pair instead of a buffer. This is better because the delay of an inverter is less than that of a buffer of the same size1. This way we get more cuts in the wire (less load cap for each cell) with roughly the same delay of the added buffer.</p>



<figure class="wp-block-image size-large is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="367" src="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-20.png?resize=1024%2C367&#038;ssl=1" alt="" class="wp-image-545" style="width:666px;height:auto" srcset="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-20.png?resize=1024%2C367&amp;ssl=1 1024w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-20.png?resize=300%2C107&amp;ssl=1 300w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-20.png?resize=768%2C275&amp;ssl=1 768w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/09/image-20.png?w=1337&amp;ssl=1 1337w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
<p><a class="a2a_button_whatsapp" href="https://www.addtoany.com/add_to/whatsapp?linkurl=https%3A%2F%2Flearnvlsi.com%2Fpd%2Fhow-to-fix-setup-timing-violation%2F524%2F&amp;linkname=How%20to%20fix%20setup%20timing%20violation%3F" title="WhatsApp" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_linkedin" href="https://www.addtoany.com/add_to/linkedin?linkurl=https%3A%2F%2Flearnvlsi.com%2Fpd%2Fhow-to-fix-setup-timing-violation%2F524%2F&amp;linkname=How%20to%20fix%20setup%20timing%20violation%3F" title="LinkedIn" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_microsoft_teams" href="https://www.addtoany.com/add_to/microsoft_teams?linkurl=https%3A%2F%2Flearnvlsi.com%2Fpd%2Fhow-to-fix-setup-timing-violation%2F524%2F&amp;linkname=How%20to%20fix%20setup%20timing%20violation%3F" title="Teams" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Flearnvlsi.com%2Fpd%2Fhow-to-fix-setup-timing-violation%2F524%2F&#038;title=How%20to%20fix%20setup%20timing%20violation%3F" data-a2a-url="https://learnvlsi.com/pd/how-to-fix-setup-timing-violation/524/" data-a2a-title="How to fix setup timing violation?"></a></p><p>The post <a href="https://learnvlsi.com/pd/how-to-fix-setup-timing-violation/524/">How to fix setup timing violation?</a> appeared first on <a href="https://learnvlsi.com">Learn VLSI</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://learnvlsi.com/pd/how-to-fix-setup-timing-violation/524/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">524</post-id>	</item>
		<item>
		<title>7 Simple points to understand Setup Time in VLSI</title>
		<link>https://learnvlsi.com/pd/7-simple-points-to-understand-setup-time-in-vlsi/501/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=7-simple-points-to-understand-setup-time-in-vlsi</link>
					<comments>https://learnvlsi.com/pd/7-simple-points-to-understand-setup-time-in-vlsi/501/#respond</comments>
		
		<dc:creator><![CDATA[learnvlsiadmin]]></dc:creator>
		<pubDate>Sat, 31 Aug 2024 19:18:12 +0000</pubDate>
				<category><![CDATA[PD]]></category>
		<category><![CDATA[STA]]></category>
		<guid isPermaLink="false">https://learnvlsi.com/?p=501</guid>

					<description><![CDATA[<p>𝐿𝑎𝑢𝑛𝑐ℎ = 𝑇𝑙𝑎𝑢𝑛𝑐ℎ𝑒𝑑𝑔𝑒 𝐶𝑎𝑝𝑡𝑢𝑟𝑒 = 𝑇𝑐𝑎𝑝𝑡𝑢𝑟𝑒𝑒𝑑𝑔e 2. The clock takes some time to reach FF1 due to the buffers. The [&#8230;]</p>
<p>The post <a href="https://learnvlsi.com/pd/7-simple-points-to-understand-setup-time-in-vlsi/501/">7 Simple points to understand Setup Time in VLSI</a> appeared first on <a href="https://learnvlsi.com">Learn VLSI</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<ol class="wp-block-list">
<li>At time T=𝑇𝑙𝑎𝑢𝑛𝑐ℎ<em>𝑒𝑑𝑔𝑒, Data A is launched from FF1 to FF2. The data needs to make it to FF2 before the next clock edge arrives at FF2 at time 𝑇𝑐𝑎𝑝𝑡𝑢𝑟𝑒</em>𝑒𝑑𝑔𝑒. The next clock edge will arrive after a clock period</li>
</ol>



<p>𝐿𝑎𝑢𝑛𝑐ℎ = 𝑇𝑙𝑎𝑢𝑛𝑐ℎ<em>𝑒𝑑𝑔𝑒 </em></p>



<p><em>𝐶𝑎𝑝𝑡𝑢𝑟𝑒 = 𝑇𝑐𝑎𝑝𝑡𝑢𝑟𝑒</em>𝑒𝑑𝑔e</p>



<figure class="wp-block-image size-full is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="400" height="231" src="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-82.png?resize=400%2C231&#038;ssl=1" alt="" class="wp-image-507" style="width:276px;height:auto" srcset="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-82.png?w=400&amp;ssl=1 400w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-82.png?resize=300%2C173&amp;ssl=1 300w" sizes="(max-width: 400px) 100vw, 400px" /></figure>



<figure class="wp-block-image size-full is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="454" height="165" src="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-81.png?resize=454%2C165&#038;ssl=1" alt="" class="wp-image-506" style="width:461px;height:auto" srcset="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-81.png?w=454&amp;ssl=1 454w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-81.png?resize=300%2C109&amp;ssl=1 300w" sizes="(max-width: 454px) 100vw, 454px" /></figure>



<p>2. The clock takes some time to reach FF1 due to the buffers. The launch won’t happen<br>exactly at T=𝑇𝑙𝑎𝑢𝑛𝑐ℎ_𝑒𝑑𝑔𝑒 but after the delay/latency of the clock buffers.</p>



<figure class="wp-block-image size-full is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="530" height="223" src="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-83.png?resize=530%2C223&#038;ssl=1" alt="" class="wp-image-508" style="width:502px;height:auto" srcset="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-83.png?w=530&amp;ssl=1 530w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-83.png?resize=300%2C126&amp;ssl=1 300w" sizes="(max-width: 530px) 100vw, 530px" /></figure>



<p>𝐿𝑎𝑢𝑛𝑐ℎ = 𝑇𝑙𝑎𝑢𝑛𝑐ℎ<em>𝑒𝑑𝑔𝑒 + 𝑻𝒍𝒂𝒖𝒏𝒄𝒉</em>𝒍𝒂𝒕𝒆𝒏𝒄𝒚<br>𝐶𝑎𝑝𝑡𝑢𝑟𝑒 = 𝑇𝑐𝑎𝑝𝑡𝑢𝑟𝑒_𝑒𝑑𝑔e</p>



<figure class="wp-block-image size-full is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="468" height="247" src="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-84.png?resize=468%2C247&#038;ssl=1" alt="" class="wp-image-509" style="width:430px;height:auto" srcset="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-84.png?w=468&amp;ssl=1 468w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-84.png?resize=300%2C158&amp;ssl=1 300w" sizes="(max-width: 468px) 100vw, 468px" /></figure>



<p>3. As we saw in part 1, once the clock reaches the FF it takes some time to push the data out to the Q pin. We called this time 𝑇𝑐𝑞. This is the 1st delay data A encounters to reach FF2.</p>



<figure class="wp-block-image size-full is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="538" height="218" src="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-85.png?resize=538%2C218&#038;ssl=1" alt="" class="wp-image-510" style="width:510px;height:auto" srcset="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-85.png?w=538&amp;ssl=1 538w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-85.png?resize=300%2C122&amp;ssl=1 300w" sizes="(max-width: 538px) 100vw, 538px" /></figure>



<p>𝐿𝑎𝑢𝑛𝑐ℎ = 𝑇𝑙𝑎𝑢𝑛𝑐ℎ<em>𝑒𝑑𝑔𝑒 + 𝑇𝑙𝑎𝑢𝑛𝑐ℎ</em>𝑙𝑎𝑡𝑒𝑛𝑐𝑦<br>𝐷𝑒𝑙𝑎𝑦 =𝑻𝒄𝒒<br>𝐶𝑎𝑝𝑡𝑢𝑟𝑒 = 𝑇𝑐𝑎𝑝𝑡𝑢𝑟𝑒_𝑒𝑑𝑔e</p>



<figure class="wp-block-image size-full is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="450" height="251" src="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-86.png?resize=450%2C251&#038;ssl=1" alt="" class="wp-image-511" style="width:432px;height:auto" srcset="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-86.png?w=450&amp;ssl=1 450w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-86.png?resize=300%2C167&amp;ssl=1 300w" sizes="(max-width: 450px) 100vw, 450px" /></figure>



<p>4. Data A will propagate through the combinational path to reach FF2. This is the<br>2nd delay it encounters.</p>



<figure class="wp-block-image size-full is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="531" height="259" src="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-87.png?resize=531%2C259&#038;ssl=1" alt="" class="wp-image-512" style="width:499px;height:auto" srcset="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-87.png?w=531&amp;ssl=1 531w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-87.png?resize=300%2C146&amp;ssl=1 300w" sizes="(max-width: 531px) 100vw, 531px" /></figure>



<p>l𝑎𝑢𝑛𝑐ℎ =𝑇𝑙𝑎𝑢𝑛𝑐ℎ<em>𝑒𝑑𝑔𝑒+𝑇𝑙𝑎𝑢𝑛𝑐ℎ</em>𝑙𝑎𝑡𝑒𝑛𝑐𝑦<br>𝐷𝑒𝑙𝑎𝑦=𝑇𝑐𝑞+𝑻𝒄𝒐𝒎𝒃<br>𝐶𝑎𝑝𝑡𝑢𝑟𝑒=𝑇𝑐𝑎𝑝𝑡𝑢𝑟𝑒_𝑒𝑑𝑔e</p>



<figure class="wp-block-image size-full is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="475" height="224" src="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-88.png?resize=475%2C224&#038;ssl=1" alt="" class="wp-image-513" style="width:426px;height:auto" srcset="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-88.png?w=475&amp;ssl=1 475w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-88.png?resize=300%2C141&amp;ssl=1 300w" sizes="(max-width: 475px) 100vw, 475px" /></figure>



<p>5. As we saw in part 1, the FF requires the data to arrive some time before the clock edge in order to avoid metastability. We called this time 𝑇𝑠𝑒𝑡𝑢𝑝. Hence, we shouldn’t capture data at 𝑇𝑐𝑎𝑝𝑡𝑢𝑟𝑒<em>𝑒𝑑𝑔𝑒 but at 𝑇𝑐𝑎𝑝𝑡𝑢𝑟𝑒</em>𝑒𝑑𝑔𝑒−𝑇𝑠𝑒𝑡𝑢p</p>



<figure class="wp-block-image size-full is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="523" height="223" src="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-89.png?resize=523%2C223&#038;ssl=1" alt="" class="wp-image-514" style="width:488px;height:auto" srcset="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-89.png?w=523&amp;ssl=1 523w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-89.png?resize=300%2C128&amp;ssl=1 300w" sizes="(max-width: 523px) 100vw, 523px" /></figure>



<p>𝐿𝑎𝑢𝑛𝑐ℎ =𝑇𝑙𝑎𝑢𝑛𝑐ℎ<em>𝑒𝑑𝑔𝑒+𝑇𝑙𝑎𝑢𝑛𝑐ℎ</em>𝑙𝑎𝑡𝑒𝑛𝑐𝑦<br>𝐷𝑒𝑙𝑎𝑦=𝑇𝑐𝑞+𝑇𝑐𝑜𝑚𝑏<br>𝐶𝑎𝑝𝑡𝑢𝑟𝑒=𝑇𝑐𝑎𝑝𝑡𝑢𝑟𝑒_𝑒𝑑𝑔𝑒−𝑻𝒔𝒆𝒕𝒖p</p>



<figure class="wp-block-image size-full is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="444" height="231" src="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-90.png?resize=444%2C231&#038;ssl=1" alt="" class="wp-image-515" style="width:445px;height:auto" srcset="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-90.png?w=444&amp;ssl=1 444w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-90.png?resize=300%2C156&amp;ssl=1 300w" sizes="(max-width: 444px) 100vw, 444px" /></figure>



<p>6. The clock takes some time to reach FF2 due to the buffers. The capture won’t happen<br>exactly at 𝑇𝑐𝑎𝑝𝑡𝑢𝑟𝑒_𝑒𝑑𝑔𝑒−𝑇𝑠𝑒𝑡𝑢𝑝 but after the delay/latency of the clock buffers.</p>



<figure class="wp-block-image size-full is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="529" height="249" src="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-91.png?resize=529%2C249&#038;ssl=1" alt="" class="wp-image-516" style="width:485px;height:auto" srcset="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-91.png?w=529&amp;ssl=1 529w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-91.png?resize=300%2C141&amp;ssl=1 300w" sizes="(max-width: 529px) 100vw, 529px" /></figure>



<p>𝐿𝑎𝑢𝑛𝑐ℎ =𝑇𝑙𝑎𝑢𝑛𝑐ℎ<em>𝑒𝑑𝑔𝑒+𝑇𝑙𝑎𝑢𝑛𝑐ℎ</em>𝑙𝑎𝑡𝑒𝑛𝑐𝑦<br>𝐷𝑒𝑙𝑎𝑦=𝑇𝑐𝑞+𝑇𝑐𝑜𝑚𝑏<br>𝐶𝑎𝑝𝑡𝑢𝑟𝑒=𝑇𝑐𝑎𝑝𝑡𝑢𝑟𝑒<em>𝑒𝑑𝑔𝑒−𝑇𝑠𝑒𝑡𝑢𝑝+𝑻𝒄𝒂𝒑𝒕𝒖𝒓𝒆</em>𝒍𝒂𝒕𝒆𝒏𝒄y</p>



<figure class="wp-block-image size-full is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="460" height="231" src="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-92.png?resize=460%2C231&#038;ssl=1" alt="" class="wp-image-517" style="width:458px;height:auto" srcset="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-92.png?w=460&amp;ssl=1 460w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-92.png?resize=300%2C151&amp;ssl=1 300w" sizes="(max-width: 460px) 100vw, 460px" /></figure>



<p>7. To make sure a setup violation doesn’t happen, we need to make sure data A arrives<br>at FF2 before the required capture time.<br>The difference between the required and arrival time is called the slack. If the slack is positive, we pass setup and if negative, we fail. The launch FF is called the start point of the timing path and the capture FF is called the endpoint.</p>



<p>𝐿𝑎𝑢𝑛𝑐ℎ +𝐷𝑒𝑙𝑎𝑦 ≤ 𝐶𝑎𝑝𝑡𝑢𝑟𝑒<br>𝐴𝑟𝑟𝑖𝑣𝑎𝑙 ≤ 𝑅𝑒𝑞𝑢𝑖𝑟𝑒𝑑<br>𝑇𝑙𝑎𝑢𝑛𝑐ℎ<em>𝑒𝑑𝑔𝑒 + 𝑇𝑙𝑎𝑢𝑛𝑐ℎ</em>𝑙𝑎𝑡𝑒𝑛𝑐𝑦 + 𝑇𝑐𝑜𝑚𝑏 &lt; 𝑇𝑐𝑎𝑝𝑡𝑢𝑟𝑒<em>𝑒𝑑𝑔𝑒 − 𝑇𝑠𝑒𝑡𝑢𝑝 + 𝑇𝑐𝑎𝑝𝑡𝑢𝑟𝑒</em>𝑙𝑎𝑡𝑒𝑛𝑐y</p>



<figure class="wp-block-image size-full is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="706" height="421" src="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-93.png?resize=706%2C421&#038;ssl=1" alt="" class="wp-image-518" style="width:550px;height:auto" srcset="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-93.png?w=706&amp;ssl=1 706w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-93.png?resize=300%2C179&amp;ssl=1 300w" sizes="(max-width: 706px) 100vw, 706px" /></figure>



<h4 class="wp-block-heading">Setup Timing Report</h4>



<figure class="wp-block-image size-large is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="558" src="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-94.png?resize=1024%2C558&#038;ssl=1" alt="" class="wp-image-519" style="width:677px;height:auto" srcset="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-94.png?resize=1024%2C558&amp;ssl=1 1024w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-94.png?resize=300%2C164&amp;ssl=1 300w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-94.png?resize=768%2C419&amp;ssl=1 768w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-94.png?w=1337&amp;ssl=1 1337w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<ul class="wp-block-list">
<li>The example we have shown is for a full cycle path where the 𝑇𝑐𝑎𝑝𝑡𝑢𝑟𝑒<em>𝑒𝑑𝑔𝑒 comes one clock cycle after 𝑇𝑙𝑎𝑢𝑛𝑐ℎ</em>𝑒𝑑𝑔𝑒.<br>• This is not always the case. The capture edge could come half cycle later, multiple cycles later or from another clock.<br>o <strong>Half cycle paths</strong> occur when the launch and capture FFs use different clock edges<br>o <strong>Multi cycle paths</strong> occur when the first capture edge is masked by a control circuit and another edge is used<br><strong>Multi clock paths</strong> occurs when the launch and capture FFs use different clocks from each other.<br> The diagram shows that there could be more than one launch/capture edges combination. The STA tools will consider the worst case (The purple one)1<br>• All what we learned still apply and nothing changes. We will just plug different values for the clock edges into the setup equation</li>
</ul>



<p>𝑻𝒍𝒂𝒖𝒏𝒄𝒉<em>𝒆𝒅𝒈𝒆 + 𝑻𝒍𝒂𝒖𝒏𝒄𝒉</em>𝒍𝒂𝒕𝒆𝒏𝒄𝒚 + 𝑻𝒄𝒐𝒎𝒃 &lt; 𝑻𝒄𝒂𝒑𝒕𝒖𝒓𝒆<em>𝒆𝒅𝒈𝒆 − 𝑻𝒔𝒆𝒕𝒖𝒑 + 𝑻𝒄𝒂𝒑𝒕𝒖𝒓𝒆</em>𝒍𝒂𝒕𝒆𝒏𝒄y</p>



<figure class="wp-block-image size-large is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="221" src="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-95.png?resize=1024%2C221&#038;ssl=1" alt="" class="wp-image-520" style="width:744px;height:auto" srcset="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-95.png?resize=1024%2C221&amp;ssl=1 1024w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-95.png?resize=300%2C65&amp;ssl=1 300w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-95.png?resize=768%2C165&amp;ssl=1 768w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-95.png?resize=1536%2C331&amp;ssl=1 1536w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-95.png?w=1602&amp;ssl=1 1602w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p></p>



<ol class="wp-block-list"></ol>
<p><a class="a2a_button_whatsapp" href="https://www.addtoany.com/add_to/whatsapp?linkurl=https%3A%2F%2Flearnvlsi.com%2Fpd%2F7-simple-points-to-understand-setup-time-in-vlsi%2F501%2F&amp;linkname=7%20Simple%20points%20to%20understand%20Setup%20Time%20in%20VLSI" title="WhatsApp" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_linkedin" href="https://www.addtoany.com/add_to/linkedin?linkurl=https%3A%2F%2Flearnvlsi.com%2Fpd%2F7-simple-points-to-understand-setup-time-in-vlsi%2F501%2F&amp;linkname=7%20Simple%20points%20to%20understand%20Setup%20Time%20in%20VLSI" title="LinkedIn" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_microsoft_teams" href="https://www.addtoany.com/add_to/microsoft_teams?linkurl=https%3A%2F%2Flearnvlsi.com%2Fpd%2F7-simple-points-to-understand-setup-time-in-vlsi%2F501%2F&amp;linkname=7%20Simple%20points%20to%20understand%20Setup%20Time%20in%20VLSI" title="Teams" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Flearnvlsi.com%2Fpd%2F7-simple-points-to-understand-setup-time-in-vlsi%2F501%2F&#038;title=7%20Simple%20points%20to%20understand%20Setup%20Time%20in%20VLSI" data-a2a-url="https://learnvlsi.com/pd/7-simple-points-to-understand-setup-time-in-vlsi/501/" data-a2a-title="7 Simple points to understand Setup Time in VLSI"></a></p><p>The post <a href="https://learnvlsi.com/pd/7-simple-points-to-understand-setup-time-in-vlsi/501/">7 Simple points to understand Setup Time in VLSI</a> appeared first on <a href="https://learnvlsi.com">Learn VLSI</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://learnvlsi.com/pd/7-simple-points-to-understand-setup-time-in-vlsi/501/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">501</post-id>	</item>
		<item>
		<title>Types of Delays in VLSI</title>
		<link>https://learnvlsi.com/pd/types-of-delays-in-vlsi/411/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=types-of-delays-in-vlsi</link>
					<comments>https://learnvlsi.com/pd/types-of-delays-in-vlsi/411/#respond</comments>
		
		<dc:creator><![CDATA[learnvlsiadmin]]></dc:creator>
		<pubDate>Thu, 29 Aug 2024 06:57:18 +0000</pubDate>
				<category><![CDATA[PD]]></category>
		<category><![CDATA[STA]]></category>
		<guid isPermaLink="false">https://learnvlsi.com/?p=411</guid>

					<description><![CDATA[<p>Source Delay (or Source Latency) Network Delay(latency) Insertion delay The delay from the clock definition point to the clock pin [&#8230;]</p>
<p>The post <a href="https://learnvlsi.com/pd/types-of-delays-in-vlsi/411/">Types of Delays in VLSI</a> appeared first on <a href="https://learnvlsi.com">Learn VLSI</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h3 class="wp-block-heading">Source Delay (or Source Latency)</h3>



<ul class="wp-block-list">
<li>It is known as source latency also. It is defined as &#8220;the delay from the clock origin point<br>to the clock definition point in the design&#8221;.</li>



<li>Delay from clock source to beginning of clock tree (i.e. clock definition point).</li>



<li>The time a clock signal takes to propagate from its ideal waveform origin point to the<br>clock definition point in the design.</li>
</ul>



<h3 class="wp-block-heading">Network Delay(latency)</h3>



<ul class="wp-block-list">
<li>It is also known as Insertion delay or Network latency. It is defined as &#8220;the delay from the<br>clock definition point to the clock pin of the register&#8221;.</li>



<li>The time clock signal (rise or fall) takes to propagate from the clock definition point to a<br>register clock pin.</li>
</ul>



<h3 class="wp-block-heading">Insertion delay</h3>



<p>The delay from the clock definition point to the clock pin of the register.</p>



<h3 class="wp-block-heading">Transition delay</h3>



<p>It is also known as &#8220;Slew&#8221;. It is defined as the time taken to change the state of the signal.<br>Time taken for the transition from logic 0 to logic 1 and vice versa . or Time taken by the<br>input signal to rise from 10%(20%) to the 90%(80%) and vice versa.</p>



<p>Transition is the time it takes for the pin to change state</p>



<h3 class="wp-block-heading">Slew</h3>



<p>Rate of change of logic. See Transition delay.</p>



<p>Slew rate is the speed of transition measured in volt / ns.</p>



<h3 class="wp-block-heading">Rise Time</h3>



<ul class="wp-block-list">
<li>Rise time is the difference between the time when the signal crosses a low threshold to<br>the time when the signal crosses the high threshold. It can be absolute or percent.</li>



<li>Low and high thresholds are fixed voltage levels around the mid voltage level or it can be<br>either 10% and 90% respectively or 20% and 80% respectively. The percent levels are<br>converted to absolute voltage levels at the time of measurement by calculating<br>percentages from the difference between the starting voltage level and the final settled<br>voltage level.</li>
</ul>



<h3 class="wp-block-heading">Fall Time</h3>



<ul class="wp-block-list">
<li>Fall time is the difference between the time when the signal crosses a high threshold to<br>the time when the signal crosses the low threshold.</li>



<li>The low and high thresholds are fixed voltage levels around the mid voltage level or it<br>can be either 10% and 90% respectively or 20% and 80% respectively. The percent levels<br>are converted to absolute voltage levels at the time of measurement by calculating<br>percentages from the difference between the starting voltage level and the final settled<br>voltage level.</li>



<li>For an ideal square wave with 50% duty cycle, the rise time will be 0.For a symmetric<br>triangular wave, this is reduced to just 50%.</li>
</ul>



<h3 class="wp-block-heading">Absolute Rise Time</h3>



<p>In absolute rise time, the low and high thresholds are fixed voltage levels around the mid<br>voltage level.</p>



<h3 class="wp-block-heading">Percent Rise Time</h3>



<p>In percent rise time, the low and high thresholds are percent levels, and are usually either<br>10% and 90% respectively or 20% and 80% respectively. The percent levels are<br>converted to absolute voltage levels at the time of measurement by calculating<br>percentages from the difference between the starting voltage level and the final settled<br>voltage level.</p>



<h3 class="wp-block-heading">Definition of Fall Time</h3>



<p>Fall time is the difference between the time when the signal crosses a high threshold to<br>the time when the signal crosses the low threshold. It can be absolute or percent.</p>



<h3 class="wp-block-heading">Absolute Fall Time</h3>



<p>In absolute fall time, the low and high thresholds are fixed voltage levels around the mid<br>voltage level.</p>



<h3 class="wp-block-heading">Percent Fall Time</h3>



<p>In percent fall time, the low and high thresholds are percent levels, and are usually either<br>10% and 90% respectively or 20% and 80% respectively. The percent levels are<br>converted to absolute voltage levels at the time of measurement by calculating<br>percentages from the difference between the starting voltage level and the final settled<br>voltage level.</p>



<h3 class="wp-block-heading">Significance of Rise Time &amp; Fall Time</h3>



<p>This is best explained by comparing a square wave with a triangular wave. In an ideal<br>square wave with 50% duty cycle, the rise time will be 0 and the signal will be above<br>threshold for 100% of the half period time. </p>



<p>In a symmetric triangular wave, this is reduced to just 50%. More severely affected is the total area above the threshold, which is reduced to 25% of that of square waves. </p>



<p>Though the information about loss of time above threshold is conveyed by many other parameters, the information about loss of area above threshold is only conveyed by rise and fall times.</p>



<h3 class="wp-block-heading">Rise Time &amp; Fall Time Requirements</h3>



<p>The rise time &amp; fall time should be small compared to the clock period. A factor of 10 is<br>considered good. Very large rise or fall times have the risk of the cycles going undetected. </p>



<p>Also, large rise or fall times mean that the signal will be hovering around mid level for too long, making the system highly susceptible to noise and multiple triggering if there is not enough hysteresis.</p>



<p><br>This might make you think that the faster rise &amp; fall times are, the better the system is.<br>Not really. Very fast rise or fall times are not free from trouble. </p>



<p>They might cause severe ringing at the receiver resulting in reduction in voltage &amp; timing margins or even double triggering. Or the fast edges can &amp; will get coupled to the adjacent signal lines causing<br>false triggering on them or reducing the voltage margins.</p>



<h3 class="wp-block-heading">Path delay</h3>



<p>Path delay is also known as pin-to-pin delay. It is the delay from the input pin of the cell<br>to the output pin of the cell.</p>



<h3 class="wp-block-heading">Net Delay (or wire delay)</h3>



<ul class="wp-block-list">
<li>The difference between the time a signal is first applied to the net and the time it reaches<br>other devices connected to that net.</li>



<li>It is due to the finite resistance and capacitance of the net.It is also known as wire delay.</li>



<li>Wire delay =fn(Rnet , Cnet+Cpin)</li>
</ul>



<h3 class="wp-block-heading">Propagation delay</h3>



<ul class="wp-block-list">
<li>For any gate it is measured between 50% of input transition to the corresponding 50% of<br>output transition.</li>



<li>This is the time required for a signal to propagate through a gate or net. For gates it is the<br>time it takes for a event at the gate input to affect the gate output.</li>



<li>For net it is the delay between the time a signal is first applied to the net and the time it<br>reaches other devices connected to that net.</li>



<li>It is taken as the average of rise time and fall time i.e. Tpd= (Tphl+Tplh)/2.</li>
</ul>



<h3 class="wp-block-heading">Intrinsic delay</h3>



<ul class="wp-block-list">
<li>Intrinsic delay is the delay internal to the gate. Input pin of the cell to output pin of the<br>cell.</li>



<li>It is defined as the delay between an input and output pair of a cell, when a near zero slew<br>is applied to the input pin and the output does not see any load condition.It is<br>predominantly caused by the internal capacitance associated with its transistor.</li>



<li>This delay is largely independent of the size of the transistors forming the gate because<br>increasing size of transistors increase internal capacitors.</li>
</ul>



<h3 class="wp-block-heading">Extrinsic delay</h3>



<ul class="wp-block-list">
<li>Same as wire delay, net delay, interconnect delay, flight time.</li>



<li>Extrinsic delay is the delay effect that associated to with interconnect. output pin of the<br>cell to the input pin of the next cell.</li>
</ul>



<h3 class="wp-block-heading">Input delay</h3>



<ul class="wp-block-list">
<li>Input delay is the time at which the data arrives at the input pin of the block from external<br>circuit with respect to reference clock.</li>
</ul>



<h3 class="wp-block-heading">Output delay</h3>



<ul class="wp-block-list">
<li>Output delay is time required by the external circuit before which the data has to arrive at<br>the output pin of the block with respect to reference clock.</li>
</ul>



<p></p>
<p><a class="a2a_button_whatsapp" href="https://www.addtoany.com/add_to/whatsapp?linkurl=https%3A%2F%2Flearnvlsi.com%2Fpd%2Ftypes-of-delays-in-vlsi%2F411%2F&amp;linkname=Types%20of%20Delays%20in%20VLSI" title="WhatsApp" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_linkedin" href="https://www.addtoany.com/add_to/linkedin?linkurl=https%3A%2F%2Flearnvlsi.com%2Fpd%2Ftypes-of-delays-in-vlsi%2F411%2F&amp;linkname=Types%20of%20Delays%20in%20VLSI" title="LinkedIn" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_microsoft_teams" href="https://www.addtoany.com/add_to/microsoft_teams?linkurl=https%3A%2F%2Flearnvlsi.com%2Fpd%2Ftypes-of-delays-in-vlsi%2F411%2F&amp;linkname=Types%20of%20Delays%20in%20VLSI" title="Teams" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Flearnvlsi.com%2Fpd%2Ftypes-of-delays-in-vlsi%2F411%2F&#038;title=Types%20of%20Delays%20in%20VLSI" data-a2a-url="https://learnvlsi.com/pd/types-of-delays-in-vlsi/411/" data-a2a-title="Types of Delays in VLSI"></a></p><p>The post <a href="https://learnvlsi.com/pd/types-of-delays-in-vlsi/411/">Types of Delays in VLSI</a> appeared first on <a href="https://learnvlsi.com">Learn VLSI</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://learnvlsi.com/pd/types-of-delays-in-vlsi/411/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">411</post-id>	</item>
		<item>
		<title>What is False Path?</title>
		<link>https://learnvlsi.com/pd/what-is-false-path/401/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=what-is-false-path</link>
					<comments>https://learnvlsi.com/pd/what-is-false-path/401/#respond</comments>
		
		<dc:creator><![CDATA[learnvlsiadmin]]></dc:creator>
		<pubDate>Wed, 28 Aug 2024 16:49:48 +0000</pubDate>
				<category><![CDATA[PD]]></category>
		<category><![CDATA[STA]]></category>
		<guid isPermaLink="false">https://learnvlsi.com/?p=401</guid>

					<description><![CDATA[<p>Static timing analysis is exhaustive by nature. Timing tool will exhaustively look at allpossible timing paths and will perform timing [&#8230;]</p>
<p>The post <a href="https://learnvlsi.com/pd/what-is-false-path/401/">What is False Path?</a> appeared first on <a href="https://learnvlsi.com">Learn VLSI</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Static timing analysis is exhaustive by nature. Timing tool will exhaustively look at all<br>possible timing paths and will perform timing checks. </p>



<p>Because of this, it will also perform timing checks on timing paths which cannot really happen. Best way to<br>understand this is by examples.</p>



<figure class="wp-block-image size-full is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="550" height="463" src="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-59.png?resize=550%2C463&#038;ssl=1" alt="" class="wp-image-402" style="width:464px;height:auto" srcset="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-59.png?w=550&amp;ssl=1 550w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-59.png?resize=300%2C253&amp;ssl=1 300w" sizes="(max-width: 550px) 100vw, 550px" /></figure>



<p>This type of circuit configuration is very common in digital circuits. Functional clock<br>is active only in functional mode and test clock is active only test mode. </p>



<p>This means when a timing path starts with functional clock launching data at functional flop(FF)<br>output QF, it should be captured by receiving flop(RF) and capture clock should only<br>be functional clock.</p>



<p>Because of the exhaustive nature of timing tools, it will also time a path where<br>functional clock launches data at QF output of function flop(FF) and is captured at D<br>input of the receiving flop(RF) through test_clk. </p>



<p>Given that functional clock and test clock are not active at the same time, this timing path is false and can never happen.</p>



<p><br>When functional clock launches data at QF output of functional flop(FF) and it<br>captured at D input of receiving flop(RF), it can only be sampled through functional<br>clock and not test clock, as only functional clock will be active at that time.</p>



<p>To drive this point further, take a look at the following circuit.</p>



<figure class="wp-block-image size-full is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="608" height="357" src="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-60.png?resize=608%2C357&#038;ssl=1" alt="" class="wp-image-403" style="width:479px;height:auto" srcset="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-60.png?w=608&amp;ssl=1 608w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-60.png?resize=300%2C176&amp;ssl=1 300w" sizes="(max-width: 608px) 100vw, 608px" /></figure>



<p>In the above figure a mux is used to select between functional clock and test clock. In<br>functional mode only functional clock is active and test clock in inactive. </p>



<p>In test mode only test clock active and functional clock is turned off.<br>For the above circuit there are only two valid timing paths.</p>



<p><br>First timing path is where functional clock launches the data at Q output of launch flop<br>(LF) and this data is captured again by functional clock at capture flop(CF) input D.</p>



<p><br>Second timing path is similar but with test clock, i.e. where test clock launches the<br>data at Q output of launch flop(LF) and this data is captured by test clock at capture<br>flop(CF) input D.</p>



<p><br>But because of the exhaustive nature of the static timing analysis, timing tool by<br>default come up with four timing paths.<br>1) Functional clock launch => Functional clock capture.<br>2) Functional clock launch => Test clock capture.<br>3) Test clock launch => Test clock capture.<br>4) Test clock launch => Functional clock capture.</p>



<p><br>As you can see only paths 1) and 3) are valid and paths 2) and 4) are false. An explicit<br>exception or override needs to be provided to the timing tool to address this false<br>paths</p>
<p><a class="a2a_button_whatsapp" href="https://www.addtoany.com/add_to/whatsapp?linkurl=https%3A%2F%2Flearnvlsi.com%2Fpd%2Fwhat-is-false-path%2F401%2F&amp;linkname=What%20is%20False%20Path%3F" title="WhatsApp" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_linkedin" href="https://www.addtoany.com/add_to/linkedin?linkurl=https%3A%2F%2Flearnvlsi.com%2Fpd%2Fwhat-is-false-path%2F401%2F&amp;linkname=What%20is%20False%20Path%3F" title="LinkedIn" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_microsoft_teams" href="https://www.addtoany.com/add_to/microsoft_teams?linkurl=https%3A%2F%2Flearnvlsi.com%2Fpd%2Fwhat-is-false-path%2F401%2F&amp;linkname=What%20is%20False%20Path%3F" title="Teams" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Flearnvlsi.com%2Fpd%2Fwhat-is-false-path%2F401%2F&#038;title=What%20is%20False%20Path%3F" data-a2a-url="https://learnvlsi.com/pd/what-is-false-path/401/" data-a2a-title="What is False Path?"></a></p><p>The post <a href="https://learnvlsi.com/pd/what-is-false-path/401/">What is False Path?</a> appeared first on <a href="https://learnvlsi.com">Learn VLSI</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://learnvlsi.com/pd/what-is-false-path/401/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">401</post-id>	</item>
		<item>
		<title>Multicycle Path</title>
		<link>https://learnvlsi.com/pd/multicycle-path/397/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=multicycle-path</link>
					<comments>https://learnvlsi.com/pd/multicycle-path/397/#respond</comments>
		
		<dc:creator><![CDATA[learnvlsiadmin]]></dc:creator>
		<pubDate>Wed, 28 Aug 2024 15:57:05 +0000</pubDate>
				<category><![CDATA[PD]]></category>
		<category><![CDATA[STA]]></category>
		<guid isPermaLink="false">https://learnvlsi.com/?p=397</guid>

					<description><![CDATA[<p>What are multi cycle paths? By default, timing paths are single cycle long. Here is what it really means. In [&#8230;]</p>
<p>The post <a href="https://learnvlsi.com/pd/multicycle-path/397/">Multicycle Path</a> appeared first on <a href="https://learnvlsi.com">Learn VLSI</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h3 class="wp-block-heading">What are multi cycle paths?</h3>



<p>By default, timing paths are single cycle long. Here is what it really means. In digital<br>circuits, memory elements like flip flops or latches, launch new data at the beginning<br>of the clock cycle. </p>



<p>During the clock cycle, the actual computation is performed<br>through the combinational logic and at the end of the clock cycle data is ready and is<br>captured by the next memory element at the rising edge of the next clock cycle, which<br>is the same as ending of the current clock cycle. </p>



<p>Following figure illustrates this.</p>



<figure class="wp-block-image size-full is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="817" height="450" src="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-57.png?resize=817%2C450&#038;ssl=1" alt="" class="wp-image-398" style="width:619px;height:auto" srcset="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-57.png?w=817&amp;ssl=1 817w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-57.png?resize=300%2C165&amp;ssl=1 300w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-57.png?resize=768%2C423&amp;ssl=1 768w" sizes="(max-width: 817px) 100vw, 817px" /></figure>



<p>As shown in the figure, the launching flop keeps generating new set of data at the<br>output pin Q of the launch flop with every rising edge of the clock cycle. Similarly<br>capture flop keeps sampling input data every rising edge of the clock cycle. </p>



<p>As you can see in the figure the data launched on rising edge ‘1’ (in red) is supposed to be<br>captured by capture edge ‘1’ (in blue). Similarly capture edge ‘2’ corresponds to<br>launch edge ‘2’ and so on.<br>This is called a single cycle timing path. </p>



<p>There is one clock cycle from the launch of the data to the capture of the data. By default, timing tools assume this to be the circuit behavior. Timing tools will perform a setup check with respect to a capture clock edge, which is one clock cycle after the launch clock edge.</p>



<p>But this may not be the case every time. Many times what happens is that the<br>combinational delay from the launch flop to the capture flop is more than one clock<br>cycle. </p>



<p>In such cases, one cannot keep launching data at the beginning of every clock cycle and hope to capture correct data at the end of every clock cycle. In such cases data launched at the beginning of a clock cycle will just not reach the capture edge at the end of clock cycle.</p>



<p>When this is the case, the circuit designer has to account for this fact and design of the<br>circuit. </p>



<p>If the combinational delay from launch flop to the capture flop is more than<br>one clock cycle, but less than two clock cycles, the circuit designer has to design the<br>circuit in such a way that data is not launched from the launch flop at every clock<br>cycle but is launched at every other clock cycle. </p>



<p>And the data launched at the beginning of a clock cycle is captured not after one clock cycle, but two clock cycles.<br>Following figure depicts this.</p>



<figure class="wp-block-image size-full is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="877" height="532" src="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-58.png?resize=877%2C532&#038;ssl=1" alt="" class="wp-image-399" style="width:573px;height:auto" srcset="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-58.png?w=877&amp;ssl=1 877w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-58.png?resize=300%2C182&amp;ssl=1 300w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-58.png?resize=768%2C466&amp;ssl=1 768w" sizes="(max-width: 877px) 100vw, 877px" /></figure>



<p>As shown in the figure, let&#8217;s say that we have a circuit where we know that<br>combinational delay from launch flop to the capture flop is more than one clock cycle<br>but quite a bit less than two clock cycles, such that it can meet setup time requirements<br>comfortably in two clock cycles, but it doesn’t meet setup in one clock cycle.</p>



<p><br>You can see in the figure the data launched at the launch clock ‘1’, approximately<br>arrives at the capture flop (Data to be captured (D)) after about one and half clock<br>cycles. </p>



<p>As it was mentioned earlier, by default timing tools think that all timing paths<br>are one clock cycle long. </p>



<p>In other words, if the data was launched at launch clock ‘1’, the timing tool will think that it needs to be captured at the capture edge which is one<br>clock cycle after the launch edge, which is the capture edge shown in the figure with<br>black rising arrow</p>



<p>Timing tool by default will check setup with respect the capture edge shown in figure<br>with black rising arrow and will report that input data to the capture flop (Data to be<br>captured (D)), fails the setup to the capture flop as it arrives later than the capture<br>edge. </p>



<p>This check is shown in figure with dotted line. In reality we know that this is<br>false setup check. The capture flop input setup check should be against the capture<br>edge shown by the blue color. </p>



<p>As stated earlier, our design here is such that we expect<br>data to be take two clock cycles to travel from launch flop to capture flop and we have<br>designed our circuit such that launch flop doesn’t launch new data every clock cycle,<br>but it launches every other clock cycle as shown by the red color launch edges.</p>



<p>In such scenario, we need to provide the timing tool with an exception or an override and we need to tell the timing tool that, it needs to postpone its default setup check by one clock cycle. </p>



<p>In other words, we need to ask timing tool to give the one additional clock cycle time for the setup check. Usually this is achieved by something like following. </p>



<p>set_multi_cycle 2 -from -to Where ‘2’ is the clock cycle count. It instructs timing tool to use 2 clock cycles and not just default ‘1’ for the cases where we want timing tool to use 2 clock cycles.</p>
<p><a class="a2a_button_whatsapp" href="https://www.addtoany.com/add_to/whatsapp?linkurl=https%3A%2F%2Flearnvlsi.com%2Fpd%2Fmulticycle-path%2F397%2F&amp;linkname=Multicycle%20Path" title="WhatsApp" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_linkedin" href="https://www.addtoany.com/add_to/linkedin?linkurl=https%3A%2F%2Flearnvlsi.com%2Fpd%2Fmulticycle-path%2F397%2F&amp;linkname=Multicycle%20Path" title="LinkedIn" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_microsoft_teams" href="https://www.addtoany.com/add_to/microsoft_teams?linkurl=https%3A%2F%2Flearnvlsi.com%2Fpd%2Fmulticycle-path%2F397%2F&amp;linkname=Multicycle%20Path" title="Teams" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Flearnvlsi.com%2Fpd%2Fmulticycle-path%2F397%2F&#038;title=Multicycle%20Path" data-a2a-url="https://learnvlsi.com/pd/multicycle-path/397/" data-a2a-title="Multicycle Path"></a></p><p>The post <a href="https://learnvlsi.com/pd/multicycle-path/397/">Multicycle Path</a> appeared first on <a href="https://learnvlsi.com">Learn VLSI</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://learnvlsi.com/pd/multicycle-path/397/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">397</post-id>	</item>
		<item>
		<title>Lockup latch to avoid Hold violation</title>
		<link>https://learnvlsi.com/pd/lockup-latch-to-avoid-hold-violation/390/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=lockup-latch-to-avoid-hold-violation</link>
					<comments>https://learnvlsi.com/pd/lockup-latch-to-avoid-hold-violation/390/#respond</comments>
		
		<dc:creator><![CDATA[learnvlsiadmin]]></dc:creator>
		<pubDate>Tue, 27 Aug 2024 13:16:05 +0000</pubDate>
				<category><![CDATA[PD]]></category>
		<category><![CDATA[STA]]></category>
		<guid isPermaLink="false">https://learnvlsi.com/?p=390</guid>

					<description><![CDATA[<p>How does lockup latch help with avoiding hold violations? If you understand hold time check very well, or if you [&#8230;]</p>
<p>The post <a href="https://learnvlsi.com/pd/lockup-latch-to-avoid-hold-violation/390/">Lockup latch to avoid Hold violation</a> appeared first on <a href="https://learnvlsi.com">Learn VLSI</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h3 class="wp-block-heading">How does lockup latch help with avoiding hold violations?</h3>



<p>If you understand hold time check very well, or if you have been analyzing the<br>waveforms for hold time check, you will realize that hold time issues start happening<br>as soon as launch and capture clock edge align with each other or are very close to<br>each other.</p>



<p><br>We know that more spread apart launch and capture edge are in such a way that launch<br>edge is later than the capture edge, less of a hold time concern there is.</p>



<p><br>We know that when launch and capture clock are from the same source and have same<br>waveform, the greatest distance between an edge in launch clock and an edge in<br>capture clock can not be greater than clock phase. </p>



<p>Because if try to do that you will approach one of the edge closer on the other side.<br>If the falling edge of clock is the launch edge and rising edge of clock is capture edge,<br>we know that launch and capture edge would be a phase apart and as long as launch<br>edge happens after capture edge, we would have a phase worth of margin for hold<br>check. </p>



<p>This is true for the case where falling clock edge is capture edge and rising<br>edge is launching edge. The key is that they are a clock phase apart and launch happens<br>later than capture.</p>



<p><br>This is what exactly a lock up latch achieves. It changes the launch edge from rising to<br>falling edge and capture edge remains rising. </p>



<p>So, we get launch and capture edges to be farthest apart (clock phase) giving us best possible hold time protection. </p>



<p>Also launch happens later than capture, which is what we want. Lets take a look at the figure below<br>to better understand this.<br></p>



<figure class="wp-block-image size-full is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="766" height="656" src="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-52.png?resize=766%2C656&#038;ssl=1" alt="" class="wp-image-391" style="width:537px;height:auto" srcset="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-52.png?w=766&amp;ssl=1 766w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-52.png?resize=300%2C257&amp;ssl=1 300w" sizes="(max-width: 766px) 100vw, 766px" /></figure>



<p>Here we are assuming launch and capture flops to be rising edge triggered. As shown<br>in figure before lock up latch, it’s a simple setup and hold check. </p>



<p>The issue is this type of hold check (also called race as launch and capture edges are the same, it is like a<br>data race), it could be very difficult and expensive to fix this type of hold violations, if launch and captured clock common points are far apart, there could be quite a large<br>clock uncertainty. </p>



<p>This is very typical for scan or test clocks where last flop in one scan chain is in a specific clock domain and first cell of next scan chain is in a different clock domain. There could be large hold violations for such paths.</p>



<p><br>Low phase latch, launches data at the falling edge of the clock and remains transparent<br>during low phase. Essentially by introducing the lockup latch, we moved launch edge<br>from rising to falling, and now our launch and capture edges are a clock phase apart,<br>we have a clock phase worth of margin(slack) to meet the hold time requirement.</p>



<figure class="wp-block-image size-full is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="840" height="405" src="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-53.png?resize=840%2C405&#038;ssl=1" alt="" class="wp-image-392" style="width:590px;height:auto" srcset="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-53.png?w=840&amp;ssl=1 840w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-53.png?resize=300%2C145&amp;ssl=1 300w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-53.png?resize=768%2C370&amp;ssl=1 768w" sizes="(max-width: 840px) 100vw, 840px" /></figure>



<p>As shown in figure there can be a large uncertainty between testclock_a and<br>testclock_b. If you recall from the hold margin equation, larger the clock uncertainty<br>larger the negative slack that will have to be fixed.</p>



<p><br>In such situations the lockup latch is introduced between the two chains to address the<br>hold violation</p>



<figure class="wp-block-image size-full is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="875" height="381" src="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-54.png?resize=875%2C381&#038;ssl=1" alt="" class="wp-image-393" style="width:606px;height:auto" srcset="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-54.png?w=875&amp;ssl=1 875w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-54.png?resize=300%2C131&amp;ssl=1 300w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-54.png?resize=768%2C334&amp;ssl=1 768w" sizes="(max-width: 875px) 100vw, 875px" /></figure>



<p>One has to realize that lockup latch doesn’t come completely free. Because it changes<br>the launch edge from rising to falling, we are modifying our setup or max timing path<br>from the original launch flop to capture flop from a full clock cycle to half clock<br>cycle(clock phase). </p>



<p>Normally you would think of adding lockup latch only if you had<br>hold issues to begin with which means, there was not a setup problem to begin with.<br>Because if you had hold problems that means there wasn’t much path delay from the<br>launch flop to capture flop.</p>



<h3 class="wp-block-heading">Does location of lockup latch matter? What if in previous example<br>you moved lockup latch from near launch flop to capture flop?</h3>



<p>The location of lockup latch very much matters. When you introduce lockup latch in between two flops, you are essentially breaking timing path into two segments. </p>



<p>One path from the original launch flop to the lockup latch and other timing path from the<br>lockup latch to the original capture flop.</p>



<p><br>There is a reason why we didn’t bother about the timing path from the launch flop to<br>the lockup latch. Original launch flop launches data at rising edge of the clock and low<br>phase lockup latch captures data at the rising edge of the clock as well. </p>



<p>This could be a hold time issues, but it really is not because we clocked the lockup latch with the same<br>clock that was clocking the launch flop. In Fact it is essential we do this and place low<br>phase lockup latch right next to the launch flop. </p>



<p>Doing so will ensure that there is no hold time issue from the launch flop to the lockup latch, as essentially it is the same clock net that is driving both, hence there can not be a data race from the launch flop<br>to the lockup latch</p>



<figure class="wp-block-image size-full is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="761" height="688" src="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-55.png?resize=761%2C688&#038;ssl=1" alt="" class="wp-image-394" style="width:549px;height:auto" srcset="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-55.png?w=761&amp;ssl=1 761w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-55.png?resize=300%2C271&amp;ssl=1 300w" sizes="(max-width: 761px) 100vw, 761px" /></figure>



<p>As shown in this figure, there is a hold check that is supposed to happen from the<br>launch flop to the lockup latch, but it really is not an issue because of the same clock<br>edge first launching data and then capturing the data. </p>



<p>Many timing tools understand this configuration and might not report this hold check, and even if timing tool reports this hold check, it should pass.</p>



<figure class="wp-block-image size-full is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="721" height="702" src="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-56.png?resize=721%2C702&#038;ssl=1" alt="" class="wp-image-395" style="width:508px;height:auto" srcset="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-56.png?w=721&amp;ssl=1 721w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-56.png?resize=300%2C292&amp;ssl=1 300w" sizes="(max-width: 721px) 100vw, 721px" /></figure>



<p>You can see that once the lockup latch is moved close to capture flop, the hold<br>violation from the launch flop to the lockup latch becomes the real issue as both clocks<br>are now different and could come from different domain as we saw in test clock<br>example and lockup latch are really not serving any purpose to fix the hold violation.<br>Hence it is vital to place the lockup latch at correct location with correct clock.</p>



<p></p>
<p><a class="a2a_button_whatsapp" href="https://www.addtoany.com/add_to/whatsapp?linkurl=https%3A%2F%2Flearnvlsi.com%2Fpd%2Flockup-latch-to-avoid-hold-violation%2F390%2F&amp;linkname=Lockup%20latch%20to%20avoid%20Hold%20violation" title="WhatsApp" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_linkedin" href="https://www.addtoany.com/add_to/linkedin?linkurl=https%3A%2F%2Flearnvlsi.com%2Fpd%2Flockup-latch-to-avoid-hold-violation%2F390%2F&amp;linkname=Lockup%20latch%20to%20avoid%20Hold%20violation" title="LinkedIn" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_microsoft_teams" href="https://www.addtoany.com/add_to/microsoft_teams?linkurl=https%3A%2F%2Flearnvlsi.com%2Fpd%2Flockup-latch-to-avoid-hold-violation%2F390%2F&amp;linkname=Lockup%20latch%20to%20avoid%20Hold%20violation" title="Teams" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Flearnvlsi.com%2Fpd%2Flockup-latch-to-avoid-hold-violation%2F390%2F&#038;title=Lockup%20latch%20to%20avoid%20Hold%20violation" data-a2a-url="https://learnvlsi.com/pd/lockup-latch-to-avoid-hold-violation/390/" data-a2a-title="Lockup latch to avoid Hold violation"></a></p><p>The post <a href="https://learnvlsi.com/pd/lockup-latch-to-avoid-hold-violation/390/">Lockup latch to avoid Hold violation</a> appeared first on <a href="https://learnvlsi.com">Learn VLSI</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://learnvlsi.com/pd/lockup-latch-to-avoid-hold-violation/390/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">390</post-id>	</item>
		<item>
		<title>Hold Failure to a Flipflop</title>
		<link>https://learnvlsi.com/pd/hold-failure-to-a-flipflop/387/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=hold-failure-to-a-flipflop</link>
					<comments>https://learnvlsi.com/pd/hold-failure-to-a-flipflop/387/#respond</comments>
		
		<dc:creator><![CDATA[learnvlsiadmin]]></dc:creator>
		<pubDate>Tue, 27 Aug 2024 12:49:02 +0000</pubDate>
				<category><![CDATA[PD]]></category>
		<category><![CDATA[STA]]></category>
		<guid isPermaLink="false">https://learnvlsi.com/?p=387</guid>

					<description><![CDATA[<p>What is Hold time? As we saw in previous question about setup time, for any sequential element e.g. latchor flip-flop, [&#8230;]</p>
<p>The post <a href="https://learnvlsi.com/pd/hold-failure-to-a-flipflop/387/">Hold Failure to a Flipflop</a> appeared first on <a href="https://learnvlsi.com">Learn VLSI</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h3 class="wp-block-heading">What is Hold time?</h3>



<p>As we saw in previous question about setup time, for any sequential element e.g. latch<br>or flip-flop, data needs to be held stable when clock-capture edge is active. </p>



<p>Actually, data needs to be held stable for a certain time after clock-capture edge deactivates,<br>because if data is changing near the clock-capture edge, sequential element can get<br>into a metastable state and can capture wrong value at the output.</p>



<p><br>This time requirement that data needs to be held stable for after the clock capture-edge<br>deactivates is called hold time requirement for that sequential.</p>



<h3 class="wp-block-heading">Hold Time Failure to a Flipflop</h3>



<p>Like setup, there is a &#8216;Hold&#8217; requirement for each sequential element (flop or a latch).<br>That requirement dictates that after the assertion of the active/capturing edge of the<br>sequential element input data needs to be stable for a certain time/window.</p>



<p><br>If input data changes within this hold requirement time/window, output of the sequential element could go metastable or output could capture unintentional input data. Therefore, it is very crucial that input data be held till hold requirement time is met for the sequential in question.</p>



<p><br>In our figure below, data at input pin &#8216;In&#8217; of the first flop is meeting setup and is<br>correctly captured by first flop. Output of first flop &#8216;FF1_out&#8217; happens to be inverted<br>version of input &#8216;In&#8217;.</p>



<p><br>As you can see once the active edge of the clock for the first flop happens, which is<br>rising edge here, after a certain clock to out delay output FF1_out falls. Now for sake<br>of our understanding assume that combinational delay from FF1_out to FF2_in is very<br>very small and signal goes blazing fast from FF1_out to FF2_in as shown in the figure<br>below.</p>



<figure class="wp-block-image size-full is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="738" height="611" src="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-51.png?resize=738%2C611&#038;ssl=1" alt="" class="wp-image-388" style="width:556px;height:auto" srcset="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-51.png?w=738&amp;ssl=1 738w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-51.png?resize=300%2C248&amp;ssl=1 300w" sizes="(max-width: 738px) 100vw, 738px" /></figure>



<p><br>In real life this could happen because of several reasons, it could happen by design<br>(Imagine no device between first and second flop and just small wire, even better think<br>of both flops abutting each-other), it could be because of device variation and you<br>could end up with very fast device/devices along the signal path, there could be<br>capacitance coupling happening with adjacent wires, favoring the transitions along the<br>FF1_out to FF2_in, node adjacent to FF2_in might be transitioning high to fall)<br>with a sharp slew rate or slope which couples favorably with FF2_in going down and<br>speeds up FF2_in fall delay.</p>



<p><br>In short in reality there are several reasons for device delay to speed up along the<br>signal propagation path. Now what ends up happening because of fast data is that<br>FF2_in transitions within the hold time requirement window of flop clocked by clk2<br>and essentially violates the hold requirement for clk2 flop.</p>



<p><br>This causes the falling transition of FF2_in to be captured in first clk2 cycle where<br>as design intention was to capture falling transition of FF2_in in second cycle of clk2.</p>



<p><br>In a normal synchronous design where you have series of flip-flops clocked by a grid<br>clock (clock shown in figure below) intention is that in first clock cycle for clk1 &amp;<br>clk2, FF1_out transitions and there would be enough delay from FF1_out to FF2_in<br>such that one would ideally have met hold requirement for the first clock cycle of clk2<br>at second flop and FF2_in would meet setup before the second clock cycle of clk2 and<br>when second clock cycle starts, at the active edge of clk2 original transition of<br>FF1_out is propagated to Out.</p>



<p><br>Now if you notice there is skew between clk1 and clk2, the skew is making clk2 edge<br>come later than the clk1 edge (ideally we expect clk1 &amp; clk2 to be aligned perfectly,<br>that&#8217;s ideally !!). </p>



<p>In our example this is exacerbating the hold issue, if both clocks<br>were perfectly aligned, FF2_in fall could have happened later and would have met<br>hold requirement for the clk2 flop and we wouldn&#8217;t have captured wrong data!</p>



<h3 class="wp-block-heading">If Hold Violation exist in the design, Is it ok to signoff?</h3>



<p>You cannot sign off the design if you have hold violations. Because hold violations<br>are functional failures. Setup violations are frequency dependent. </p>



<p>You can reduce frequency and prevent setup failures. Hold violations stemming from the same clock<br>edge race, are frequency independent and are functional failures because you can end<br>up capturing unintended data, thus putting your state machine in an unknown state.</p>
<p><a class="a2a_button_whatsapp" href="https://www.addtoany.com/add_to/whatsapp?linkurl=https%3A%2F%2Flearnvlsi.com%2Fpd%2Fhold-failure-to-a-flipflop%2F387%2F&amp;linkname=Hold%20Failure%20to%20a%20Flipflop" title="WhatsApp" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_linkedin" href="https://www.addtoany.com/add_to/linkedin?linkurl=https%3A%2F%2Flearnvlsi.com%2Fpd%2Fhold-failure-to-a-flipflop%2F387%2F&amp;linkname=Hold%20Failure%20to%20a%20Flipflop" title="LinkedIn" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_microsoft_teams" href="https://www.addtoany.com/add_to/microsoft_teams?linkurl=https%3A%2F%2Flearnvlsi.com%2Fpd%2Fhold-failure-to-a-flipflop%2F387%2F&amp;linkname=Hold%20Failure%20to%20a%20Flipflop" title="Teams" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Flearnvlsi.com%2Fpd%2Fhold-failure-to-a-flipflop%2F387%2F&#038;title=Hold%20Failure%20to%20a%20Flipflop" data-a2a-url="https://learnvlsi.com/pd/hold-failure-to-a-flipflop/387/" data-a2a-title="Hold Failure to a Flipflop"></a></p><p>The post <a href="https://learnvlsi.com/pd/hold-failure-to-a-flipflop/387/">Hold Failure to a Flipflop</a> appeared first on <a href="https://learnvlsi.com">Learn VLSI</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://learnvlsi.com/pd/hold-failure-to-a-flipflop/387/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">387</post-id>	</item>
		<item>
		<title>Setup Failure of a Flipflop</title>
		<link>https://learnvlsi.com/pd/setup-failure-of-a-flipflop/383/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=setup-failure-of-a-flipflop</link>
					<comments>https://learnvlsi.com/pd/setup-failure-of-a-flipflop/383/#respond</comments>
		
		<dc:creator><![CDATA[learnvlsiadmin]]></dc:creator>
		<pubDate>Tue, 27 Aug 2024 12:38:42 +0000</pubDate>
				<category><![CDATA[PD]]></category>
		<category><![CDATA[STA]]></category>
		<guid isPermaLink="false">https://learnvlsi.com/?p=383</guid>

					<description><![CDATA[<p>What is setup time? For any sequential element e.g. latch or flip-flop, input data needs to be stable whenclock-capture edge [&#8230;]</p>
<p>The post <a href="https://learnvlsi.com/pd/setup-failure-of-a-flipflop/383/">Setup Failure of a Flipflop</a> appeared first on <a href="https://learnvlsi.com">Learn VLSI</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h3 class="wp-block-heading">What is setup time?</h3>



<p>For any sequential element e.g. latch or flip-flop, input data needs to be stable when<br>clock-capture edge is active. </p>



<p>Actually, data needs to be stable for a certain time before clock-capture edge activates, because if data is changing near the clock-capture edge, sequential element (latch or flip-flop) can get into a metastable state, and it could take unpredictable amount of time to resolve the metastability and could settle at at state which is different from the input value, thus can capture unintended value at the<br>output. </p>



<p>The time requirement for input data to be stable before the clock capture edge<br>activates is called the setup time of that sequential element</p>



<h3 class="wp-block-heading">Timing Propagation from one Flipflop to another Flipflop</h3>



<p>Following is a simple structure where output of a flop goes through some stages of<br>combinational logic, represented by pink bubble and is eventually samples by<br>receiving flop. </p>



<p>Receiving flop, which samples the FF2_in data, poses timing requirements on the input data signal.<br>The logic between FF1_out to FF2_in should be such that signal transitions could<br>propagate through this logic fast enough to be captured by the receiving flop. </p>



<p>For a flop to correctly capture input data, the input data to flop has to arrive and become<br>stable for some period of time before the capture clock edge at the flop.<br>This requirement is called the setup time of the flop. </p>



<p>Usually, you&#8217;ll run into setup time issues when there is too much logic in between two flop or the combinational delay is too small. Hence this is sometimes called max delay or slow delay timing issue, and the constraints is called max delay constraint.</p>



<p><br>In figure there is max delay constraint on FF2_in input at receiving flop. Now you can<br>realize that max delay or slow delay constraint is frequency dependent. </p>



<p>If you are failing setup to a flop and if you slow down the clock frequency, your clock cycle time<br>increases, hence, you&#8217;ve larger time for your slow signal transitions to propagate<br>through and you&#8217;ll now meet setup requirements.</p>



<p><br>Typically, your digital circuit is run at certain frequency which sets your max delay constraints. Amount of time the signal falls short to meet the setup time is called setup<br>or max, slack or margin</p>



<figure class="wp-block-image size-full is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="700" height="582" src="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-49.png?resize=700%2C582&#038;ssl=1" alt="" class="wp-image-384" style="width:535px;height:auto" srcset="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-49.png?w=700&amp;ssl=1 700w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-49.png?resize=300%2C249&amp;ssl=1 300w" sizes="(max-width: 700px) 100vw, 700px" /></figure>



<h3 class="wp-block-heading">Setup time failure of a Flipflop</h3>



<p>Following figure describes visually a setup failure. As you can see that first flop<br>releases the data at the active edge of clock, which happens to be the rising edge of the<br>clock. FF1_out falls sometime after the clk1 rises.</p>



<p><br>The delay from the clock rising to the data changing at output pin is commonly<br>referred to as clock to out delay. There is finite delay from FF1_out to FF2_in through<br>some combinational logic for the signal to travel.</p>



<p><br>After this delay signal arrives at second flop and FF2_in falls. Because of large delay<br>from FF1_out to FF2_in, FF2_in falls after the setup requirement of second flop,<br>indicated by the orange/red vertical dotted line. </p>



<p>This means input signal to second flop FF2_in, is not held stable for setup time requirement of the flop and hence this flop goes metastable and doesn&#8217;t correctly capture this data at it&#8217;s output.</p>



<p>As you can see one would&#8217;ve expected &#8216;Out&#8217; node to go low, but it doesn&#8217;t because of<br>setup time or max delay failure at the input of the second flop. </p>



<p>Setup time requirement dictates that input signal be steady during the setup window ( which is a certain time before the clock capture edge ).<br>As mentioned earlier if we reduce frequency, our cycle time increases and eventually<br>FF2_in will be able to make it in time and there will not be a setup failure. Also notice<br>that a clock skew is observed at the second flop. </p>



<p>The clock to second flop clk2 is not aligned with clk1 anymore and it arrives earlier, which exacerbates the setup failure.</p>



<p><br>This is a real world situation where clock to all receivers will not arrival at same time<br>and designer will have to account for the clock skew. We&#8217;ll talk separately about clock<br>skew in details</p>



<figure class="wp-block-image size-full is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="672" height="518" src="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-50.png?resize=672%2C518&#038;ssl=1" alt="" class="wp-image-385" style="width:573px;height:auto" srcset="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-50.png?w=672&amp;ssl=1 672w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-50.png?resize=300%2C231&amp;ssl=1 300w" sizes="(max-width: 672px) 100vw, 672px" /></figure>
<p><a class="a2a_button_whatsapp" href="https://www.addtoany.com/add_to/whatsapp?linkurl=https%3A%2F%2Flearnvlsi.com%2Fpd%2Fsetup-failure-of-a-flipflop%2F383%2F&amp;linkname=Setup%20Failure%20of%20a%20Flipflop" title="WhatsApp" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_linkedin" href="https://www.addtoany.com/add_to/linkedin?linkurl=https%3A%2F%2Flearnvlsi.com%2Fpd%2Fsetup-failure-of-a-flipflop%2F383%2F&amp;linkname=Setup%20Failure%20of%20a%20Flipflop" title="LinkedIn" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_microsoft_teams" href="https://www.addtoany.com/add_to/microsoft_teams?linkurl=https%3A%2F%2Flearnvlsi.com%2Fpd%2Fsetup-failure-of-a-flipflop%2F383%2F&amp;linkname=Setup%20Failure%20of%20a%20Flipflop" title="Teams" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Flearnvlsi.com%2Fpd%2Fsetup-failure-of-a-flipflop%2F383%2F&#038;title=Setup%20Failure%20of%20a%20Flipflop" data-a2a-url="https://learnvlsi.com/pd/setup-failure-of-a-flipflop/383/" data-a2a-title="Setup Failure of a Flipflop"></a></p><p>The post <a href="https://learnvlsi.com/pd/setup-failure-of-a-flipflop/383/">Setup Failure of a Flipflop</a> appeared first on <a href="https://learnvlsi.com">Learn VLSI</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://learnvlsi.com/pd/setup-failure-of-a-flipflop/383/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">383</post-id>	</item>
		<item>
		<title>Launch edge and Capture edge</title>
		<link>https://learnvlsi.com/pd/launch-edge-and-capture-edge/380/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=launch-edge-and-capture-edge</link>
					<comments>https://learnvlsi.com/pd/launch-edge-and-capture-edge/380/#respond</comments>
		
		<dc:creator><![CDATA[learnvlsiadmin]]></dc:creator>
		<pubDate>Tue, 27 Aug 2024 12:28:52 +0000</pubDate>
				<category><![CDATA[PD]]></category>
		<category><![CDATA[STA]]></category>
		<guid isPermaLink="false">https://learnvlsi.com/?p=380</guid>

					<description><![CDATA[<p>What is a Launch edge? In synchronous design, certain activity or certain amount of computation is donewithin a clock cycle. [&#8230;]</p>
<p>The post <a href="https://learnvlsi.com/pd/launch-edge-and-capture-edge/380/">Launch edge and Capture edge</a> appeared first on <a href="https://learnvlsi.com">Learn VLSI</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h3 class="wp-block-heading">What is a Launch edge?</h3>



<p>In synchronous design, certain activity or certain amount of computation is done<br>within a clock cycle. </p>



<p>Memory elements like flip-flop and latches are used in<br>synchronous designs to hold the input values stable during the clock cycle while the<br>computations are being performed.</p>



<p><br>Beginning of the clock cycle initiate the activity and by the end of the clock cycle<br>activity has to be completed, and results have to be ready. </p>



<p>Memory elements in a design transfer data from input to output on either rising or the falling edge of the<br>clock. This edge is called the active edge of the clock.</p>



<p><br>During the clock cycle, data propagates from output of one memory element, through<br>the combinational logic to the input of second memory element. </p>



<p>The data has to meet a certain arrival time requirement at the input of the second memory element.</p>



<figure class="wp-block-image size-full is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="574" height="459" src="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-48.png?resize=574%2C459&#038;ssl=1" alt="" class="wp-image-381" style="width:472px;height:auto" srcset="https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-48.png?w=574&amp;ssl=1 574w, https://i0.wp.com/learnvlsi.com/wp-content/uploads/2024/08/image-48.png?resize=300%2C240&amp;ssl=1 300w" sizes="(max-width: 574px) 100vw, 574px" /></figure>



<p>As shown in the above figure, the active edge of the clock(shown in red) at the first<br>memory element makes new data available at the output of the memory element and<br>starts data to propagate through the logic. </p>



<p>Input ‘in’ has risen to one before the first active(rising) edge of the clock, but this value of ‘in’ is transferred to Q1 pin only when clock rises. </p>



<p>This active edge of the clock is called the launch edge, because it<br>launches the data at the output of first memory element, which eventually has to be<br>captured by next memory element along the data propagation path.</p>



<h4 class="wp-block-heading">What is Capture edge?</h4>



<p>As we discussed in previous question, the way synchronous circuits work, certain<br>amount of computation has to be done within a clock cycle. </p>



<p>At the launch edge of the clock, memory elements transfer fresh set of data at the output pin of the launching memory elements. This new data, ripples through the combinational logic that carries<br>out the stipulated computation.</p>



<p><br>By the end of the clock cycle, new computed data has to be available at the next set of<br>memory elements. Because next active clock edge, which signifies the end of one<br>clock cycle, captures the computed results at the D2 pin of the memory element and<br>transfers the results to the Q2 pin for the subsequent clock cycle. </p>



<p>This next active edge of the clock, show in blue at figure 1, is called the capture edge, as it really is<br>capturing the results at the end of the clock cycle.<br>There are some caveats to be aware of. The data D2 has to arrive certain time before<br>the capture edge of clock, in order to be captured properly. This is called setup time<br>requirement, which we will discuss later.</p>



<p><br>Although it is said that computation has to be done within one clock cycle, it is not<br>always the case. In general, it is true that computation has to be done within one clock<br>cycle, but many times, computation can take more than one cycle. When this happens<br>we call it a multi cycle path.</p>
<p><a class="a2a_button_whatsapp" href="https://www.addtoany.com/add_to/whatsapp?linkurl=https%3A%2F%2Flearnvlsi.com%2Fpd%2Flaunch-edge-and-capture-edge%2F380%2F&amp;linkname=Launch%20edge%20and%20Capture%20edge" title="WhatsApp" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_linkedin" href="https://www.addtoany.com/add_to/linkedin?linkurl=https%3A%2F%2Flearnvlsi.com%2Fpd%2Flaunch-edge-and-capture-edge%2F380%2F&amp;linkname=Launch%20edge%20and%20Capture%20edge" title="LinkedIn" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_microsoft_teams" href="https://www.addtoany.com/add_to/microsoft_teams?linkurl=https%3A%2F%2Flearnvlsi.com%2Fpd%2Flaunch-edge-and-capture-edge%2F380%2F&amp;linkname=Launch%20edge%20and%20Capture%20edge" title="Teams" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Flearnvlsi.com%2Fpd%2Flaunch-edge-and-capture-edge%2F380%2F&#038;title=Launch%20edge%20and%20Capture%20edge" data-a2a-url="https://learnvlsi.com/pd/launch-edge-and-capture-edge/380/" data-a2a-title="Launch edge and Capture edge"></a></p><p>The post <a href="https://learnvlsi.com/pd/launch-edge-and-capture-edge/380/">Launch edge and Capture edge</a> appeared first on <a href="https://learnvlsi.com">Learn VLSI</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://learnvlsi.com/pd/launch-edge-and-capture-edge/380/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">380</post-id>	</item>
	</channel>
</rss>
