<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://www.verific.com/faq/index.php?action=history&amp;feed=atom&amp;title=Buffering_signals_and_ungrouping</id>
		<title>Buffering signals and ungrouping - Revision history</title>
		<link rel="self" type="application/atom+xml" href="https://www.verific.com/faq/index.php?action=history&amp;feed=atom&amp;title=Buffering_signals_and_ungrouping"/>
		<link rel="alternate" type="text/html" href="https://www.verific.com/faq/index.php?title=Buffering_signals_and_ungrouping&amp;action=history"/>
		<updated>2026-05-02T12:45:47Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.26.3</generator>

	<entry>
		<id>https://www.verific.com/faq/index.php?title=Buffering_signals_and_ungrouping&amp;diff=672&amp;oldid=prev</id>
		<title>Hoa at 23:11, 19 April 2021</title>
		<link rel="alternate" type="text/html" href="https://www.verific.com/faq/index.php?title=Buffering_signals_and_ungrouping&amp;diff=672&amp;oldid=prev"/>
				<updated>2021-04-19T23:11:25Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;' lang='en'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 23:11, 19 April 2021&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l178&quot; &gt;Line 178:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 178:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; &amp;lt;/nowiki&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; &amp;lt;/nowiki&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Final flattened netlist&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;:&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Flattened netlist without buffering:&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt; &amp;lt;nowiki&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;module top (clk, reset, a, b, s);&amp;#160;  // test.v(1)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#160; &amp;#160; input clk;&amp;#160;  // test.v(2)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#160; &amp;#160; input reset;&amp;#160;  // test.v(2)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#160; &amp;#160; input [1:0]a;&amp;#160;  // test.v(3)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#160; &amp;#160; input [1:0]b;&amp;#160;  // test.v(3)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#160; &amp;#160; output [1:0]s;&amp;#160;  // test.v(4)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#160; &amp;#160; wire [1:0]ta;&amp;#160;  // test.v(5)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#160; &amp;#160; wire [1:0]tb;&amp;#160;  // test.v(5)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#160; &amp;#160; wire [1:0]ts;&amp;#160;  // test.v(5)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#160; &amp;#160; wire \add_3/cout , \add_3/n2 ;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#160; &amp;#160; VERIFIC_DFFRS \is/i5&amp;#160; (.d(ts[1]), .clk(clk), .s(1'b0), .r(reset),&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; .q(s[1]));&amp;#160;  // test.v(21)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#160; &amp;#160; VERIFIC_DFFRS \is/i6&amp;#160; (.d(ts[0]), .clk(clk), .s(1'b0), .r(reset),&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; .q(s[0]));&amp;#160;  // test.v(21)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#160; &amp;#160; VERIFIC_FADD \add_3/i1&amp;#160; (.cin(1'b0), .a(ta[0]), .b(tb[0]), .o(ts[0]),&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; .cout(\add_3/n2 ));&amp;#160;  // test.v(8)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#160; &amp;#160; VERIFIC_FADD \add_3/i2&amp;#160; (.cin(\add_3/n2 ), .a(ta[1]), .b(tb[1]), .o(ts[1]),&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; .cout(\add_3/cout ));&amp;#160;  // test.v(8)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#160; &amp;#160; VERIFIC_DFFRS \ib/i6&amp;#160; (.d(b[0]), .clk(clk), .s(1'b0), .r(reset),&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; .q(tb[0]));&amp;#160;  // test.v(21)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#160; &amp;#160; VERIFIC_DFFRS \ib/i5&amp;#160; (.d(b[1]), .clk(clk), .s(1'b0), .r(reset),&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; .q(tb[1]));&amp;#160;  // test.v(21)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#160; &amp;#160; VERIFIC_DFFRS \ia/i6&amp;#160; (.d(a[0]), .clk(clk), .s(1'b0), .r(reset),&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; .q(ta[0]));&amp;#160;  // test.v(21)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#160; &amp;#160; VERIFIC_DFFRS \ia/i5&amp;#160; (.d(a[1]), .clk(clk), .s(1'b0), .r(reset),&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; .q(ta[1]));&amp;#160;  // test.v(21)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;endmodule&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt; &amp;lt;/nowiki&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Final flattened netlist &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;with buffering. Note the net names of the flipflop outputs.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; &amp;lt;nowiki&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; &amp;lt;nowiki&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;module top (clk, reset, a, b, s) ;&amp;#160;  // test.v(1)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;module top (clk, reset, a, b, s) ;&amp;#160;  // test.v(1)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Hoa</name></author>	</entry>

	<entry>
		<id>https://www.verific.com/faq/index.php?title=Buffering_signals_and_ungrouping&amp;diff=671&amp;oldid=prev</id>
		<title>Hoa: Created page with &quot;During ungrouping (flattening) a hierarchical design, there are nets that need to be merged. The name of the resulting net from the merge will be the name in the highest level...&quot;</title>
		<link rel="alternate" type="text/html" href="https://www.verific.com/faq/index.php?title=Buffering_signals_and_ungrouping&amp;diff=671&amp;oldid=prev"/>
				<updated>2021-04-19T23:07:33Z</updated>
		
		<summary type="html">&lt;p&gt;Created page with &amp;quot;During ungrouping (flattening) a hierarchical design, there are nets that need to be merged. The name of the resulting net from the merge will be the name in the highest level...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;During ungrouping (flattening) a hierarchical design, there are nets that need to be merged. The name of the resulting net from the merge will be the name in the highest level of the design hierarchy.&lt;br /&gt;
&lt;br /&gt;
This application example shows how to preserve the net name in the lower hierarchy level by adding a buffer to the net before ungrouping. In particular, it preserves the names of the output flip-flops in lower hierarchy levels.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#include &amp;quot;Map.h&amp;quot;&lt;br /&gt;
#include &amp;quot;Set.h&amp;quot;&lt;br /&gt;
#include &amp;quot;Message.h&amp;quot;&lt;br /&gt;
#include &amp;quot;veri_file.h&amp;quot;&lt;br /&gt;
#include &amp;quot;DataBase.h&amp;quot;&lt;br /&gt;
#include &amp;quot;Netlist.h&amp;quot;&lt;br /&gt;
#include &amp;quot;Array.h&amp;quot;&lt;br /&gt;
#include &amp;quot;VeriWrite.h&amp;quot;&lt;br /&gt;
#include &amp;quot;RuntimeFlags.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#ifdef VERIFIC_NAMESPACE&lt;br /&gt;
using namespace Verific ;&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
static void&lt;br /&gt;
Flatten(Netlist *top_netlist)&lt;br /&gt;
{&lt;br /&gt;
    Set all_netlists(POINTER_HASH) ;&lt;br /&gt;
    top_netlist-&amp;gt;Hierarchy(all_netlists,1/*top-to-bottom*/) ;&lt;br /&gt;
&lt;br /&gt;
    // Iterate over all netlists in which we will do flattening :&lt;br /&gt;
    SetIter si ;&lt;br /&gt;
    Instance *inst ;&lt;br /&gt;
    Netlist *netlist ;&lt;br /&gt;
    FOREACH_SET_ITEM(&amp;amp;all_netlists, si, &amp;amp;netlist) {&lt;br /&gt;
        if (!netlist) continue ;&lt;br /&gt;
        // Collect all instances in this netlist :&lt;br /&gt;
        Array insts(netlist-&amp;gt;NumOfInsts()) ;&lt;br /&gt;
        MapIter mi ;&lt;br /&gt;
        FOREACH_INSTANCE_OF_NETLIST(netlist, mi, inst) {&lt;br /&gt;
            insts.InsertLast(inst) ;&lt;br /&gt;
        }&lt;br /&gt;
        // Flatten the instances&lt;br /&gt;
        while (insts.Size()!=0) {&lt;br /&gt;
            inst = (Instance*)insts.RemoveLast() ;&lt;br /&gt;
            if (inst-&amp;gt;IsPrimitive()) continue ;&lt;br /&gt;
            (void) inst-&amp;gt;Flatten() ;&lt;br /&gt;
        }&lt;br /&gt;
        top_netlist-&amp;gt;PropagateConstants() ;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
static void&lt;br /&gt;
BufferFlipflops(Netlist *netlist)&lt;br /&gt;
{&lt;br /&gt;
    if (!netlist) return ; // nothing to do.&lt;br /&gt;
    if (netlist-&amp;gt;IsBlackBox()) return; // nothing to do.&lt;br /&gt;
    if (netlist-&amp;gt;IsEmptyBox()) return; // nothing to do.&lt;br /&gt;
&lt;br /&gt;
    MapIter mii ;&lt;br /&gt;
    Instance *inst ;&lt;br /&gt;
    FOREACH_INSTANCE_OF_NETLIST(netlist, mii, inst) {&lt;br /&gt;
        if (inst-&amp;gt;Type()==PRIM_DFFRS) {&lt;br /&gt;
            // This is the instantiation of a flip-flop, buffer its output&lt;br /&gt;
            Net *onet = inst-&amp;gt;GetOutput() ;&lt;br /&gt;
            if (onet) {&lt;br /&gt;
                Net *new_onet = netlist-&amp;gt;Buf(onet, onet-&amp;gt;Linefile()); // Add a buffer to the DFF output&lt;br /&gt;
                char *new_name = Strings::save(&amp;quot;new_&amp;quot;, onet-&amp;gt;Name()); // Name the output of the buffer&lt;br /&gt;
                new_onet-&amp;gt;SetName(new_name);&lt;br /&gt;
                Strings::free(new_name);&lt;br /&gt;
                SetIter si;&lt;br /&gt;
                Port *port;&lt;br /&gt;
                FOREACH_PORT_OF_NET (onet, si, port) { // move ports&lt;br /&gt;
                    if (!port) continue;&lt;br /&gt;
                    new_onet-&amp;gt;Connect(port);&lt;br /&gt;
                    onet-&amp;gt;Disconnect(port);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// This function is recursive in nature, and collects all other&lt;br /&gt;
// netlists that the incoming netlist depends on in a container.&lt;br /&gt;
&lt;br /&gt;
void Accumulate(Netlist *netlist, Set &amp;amp;done)&lt;br /&gt;
{&lt;br /&gt;
    if (!netlist) return ; // Ignore NULL netlists&lt;br /&gt;
&lt;br /&gt;
    SetItem *item = done.GetItem(netlist) ;&lt;br /&gt;
    if (item) {&lt;br /&gt;
        return ; // We've already been here&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    Instance *inst ;&lt;br /&gt;
    MapIter mi ;&lt;br /&gt;
    FOREACH_INSTANCE_OF_NETLIST(netlist, mi, inst) {&lt;br /&gt;
        // Now go into the netlist associated with the instance&lt;br /&gt;
        Accumulate(inst-&amp;gt;View(), done) ;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Insert the traversed Netlist&lt;br /&gt;
    done.Insert(netlist) ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char **argv)&lt;br /&gt;
{&lt;br /&gt;
    if (argc &amp;lt; 2) Message::PrintLine(&amp;quot;reading default input file: test.v. Specify command line argument to override&amp;quot;) ;&lt;br /&gt;
&lt;br /&gt;
    const char *file_name = 0 ;&lt;br /&gt;
    if (argc&amp;gt;1) {&lt;br /&gt;
        file_name = argv[1] ; // Set the file name as specified by the user&lt;br /&gt;
    } else {&lt;br /&gt;
        file_name = &amp;quot;test.v&amp;quot; ; // Set default file name&lt;br /&gt;
    }&lt;br /&gt;
    // Now read in top-level design. In case of failure return.&lt;br /&gt;
    if (!veri_file::Read(file_name,&amp;quot;work&amp;quot;, veri_file::VERILOG_2K)) {&lt;br /&gt;
        // Here, design analysis and elaboration failed&lt;br /&gt;
        return 1 ;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Get a handle to the top-level netlist&lt;br /&gt;
    Netlist *top = Netlist::PresentDesign() ;&lt;br /&gt;
    if (!top) {&lt;br /&gt;
        Message::PrintLine(&amp;quot;cannot find any handle to the top-level netlist&amp;quot;) ;&lt;br /&gt;
        return 4 ;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Print out module that we have handle to&lt;br /&gt;
    Message::Msg(VERIFIC_INFO, 0, top-&amp;gt;Linefile(), &amp;quot;top level design is %s(%s)&amp;quot;,&lt;br /&gt;
                 top-&amp;gt;Owner()-&amp;gt;Name(), top-&amp;gt;Name()) ;&lt;br /&gt;
&lt;br /&gt;
    // RuntimeFlags::SetVar(&amp;quot;db_verilog_writer_write_structural_instance_names&amp;quot;, 1);&lt;br /&gt;
    VeriWrite veriWriter;&lt;br /&gt;
    veriWriter.WriteFile (&amp;quot;nl_before.v&amp;quot;, top);&lt;br /&gt;
&lt;br /&gt;
    // Lets accumulate all netlist&lt;br /&gt;
    Set netlists(POINTER_HASH) ;&lt;br /&gt;
    Accumulate(top, netlists) ;&lt;br /&gt;
&lt;br /&gt;
    // Traverse the design and add buffers to output of flipflops&lt;br /&gt;
    Netlist *netlist ;&lt;br /&gt;
    SetIter si ;&lt;br /&gt;
    FOREACH_SET_ITEM(&amp;amp;netlists, si, &amp;amp;netlist) {&lt;br /&gt;
        BufferFlipflops(netlist) ;&lt;br /&gt;
    }&lt;br /&gt;
    veriWriter.WriteFile (&amp;quot;nl_after.v&amp;quot;, top);&lt;br /&gt;
&lt;br /&gt;
    Flatten(top);&lt;br /&gt;
    veriWriter.WriteFile (&amp;quot;flat_after.v&amp;quot;, top);&lt;br /&gt;
&lt;br /&gt;
    // All done.  Wasn't that easy ?&lt;br /&gt;
    return 0 ;&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RTL input:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
module top (clk, reset, a, b, s);&lt;br /&gt;
  input clk, reset;&lt;br /&gt;
  input [1:0] a, b;&lt;br /&gt;
  output [1:0] s;&lt;br /&gt;
  wire [1:0] ta, tb, ts;&lt;br /&gt;
  bot ia (clk, reset, a, ta);&lt;br /&gt;
  bot ib (clk, reset, b, tb);&lt;br /&gt;
  assign ts = ta + tb;&lt;br /&gt;
  bot is (clk, reset, ts, s);&lt;br /&gt;
endmodule&lt;br /&gt;
&lt;br /&gt;
module bot (clk, reset, input_d, output_q);&lt;br /&gt;
  input clk, reset;&lt;br /&gt;
  input [1:0] input_d;&lt;br /&gt;
  output [1:0] output_q;&lt;br /&gt;
  reg [1:0] output_q;&lt;br /&gt;
  always @ (posedge clk or posedge reset) begin&lt;br /&gt;
     if (reset)&lt;br /&gt;
         output_q &amp;lt;= 2'b00;&lt;br /&gt;
     else&lt;br /&gt;
         output_q &amp;lt;= input_d;&lt;br /&gt;
  end&lt;br /&gt;
endmodule&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Final flattened netlist:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
module top (clk, reset, a, b, s) ;   // test.v(1)&lt;br /&gt;
    input clk;   // test.v(2)&lt;br /&gt;
    input reset;   // test.v(2)&lt;br /&gt;
    input [1:0]a;   // test.v(3)&lt;br /&gt;
    input [1:0]b;   // test.v(3)&lt;br /&gt;
    output [1:0]s;   // test.v(4)&lt;br /&gt;
&lt;br /&gt;
    wire [1:0]\is/output_q ;   // test.v(15)&lt;br /&gt;
    wire [1:0]ta;   // test.v(5)&lt;br /&gt;
    wire [1:0]tb;   // test.v(5)&lt;br /&gt;
    wire [1:0]ts;   // test.v(5)&lt;br /&gt;
    wire [1:0]\ib/output_q ;   // test.v(15)&lt;br /&gt;
    wire [1:0]\ia/output_q ;   // test.v(15)&lt;br /&gt;
&lt;br /&gt;
    wire \is/new_output_q[1] , \ib/new_output_q[1] , \add_3/cout , \add_3/n2 ,&lt;br /&gt;
        \is/new_output_q[0] , \ib/new_output_q[0] , \ia/new_output_q[1] ,&lt;br /&gt;
        \ia/new_output_q[0] ;&lt;br /&gt;
&lt;br /&gt;
    buf (\is/new_output_q[0] , \is/output_q [0]) ;   // test.v(15)&lt;br /&gt;
    buf (\is/new_output_q[1] , \is/output_q [1]) ;   // test.v(15)&lt;br /&gt;
    VERIFIC_FADD \add_3/i1  (.cin(1'b0), .a(ta[0]), .b(tb[0]), .o(ts[0]),&lt;br /&gt;
            .cout(\add_3/n2 ));   // test.v(8)&lt;br /&gt;
    VERIFIC_DFFRS \is/i6  (.d(ts[0]), .clk(clk), .s(1'b0), .r(reset),&lt;br /&gt;
            .q(\is/output_q [0]));   // test.v(21)&lt;br /&gt;
    VERIFIC_DFFRS \is/i5  (.d(ts[1]), .clk(clk), .s(1'b0), .r(reset),&lt;br /&gt;
            .q(\is/output_q [1]));   // test.v(21)&lt;br /&gt;
    VERIFIC_FADD \add_3/i2  (.cin(\add_3/n2 ), .a(ta[1]), .b(tb[1]), .o(ts[1]),&lt;br /&gt;
            .cout(\add_3/cout ));   // test.v(8)&lt;br /&gt;
    buf (\ib/new_output_q[1] , \ib/output_q [1]) ;   // test.v(15)&lt;br /&gt;
    buf (\ib/new_output_q[0] , \ib/output_q [0]) ;   // test.v(15)&lt;br /&gt;
    VERIFIC_DFFRS \ib/i6  (.d(b[0]), .clk(clk), .s(1'b0), .r(reset),&lt;br /&gt;
            .q(\ib/output_q [0]));   // test.v(21)&lt;br /&gt;
    VERIFIC_DFFRS \ib/i5  (.d(b[1]), .clk(clk), .s(1'b0), .r(reset),&lt;br /&gt;
            .q(\ib/output_q [1]));   // test.v(21)&lt;br /&gt;
    buf (\ia/new_output_q[1] , \ia/output_q [1]) ;   // test.v(15)&lt;br /&gt;
    buf (\ia/new_output_q[0] , \ia/output_q [0]) ;   // test.v(15)&lt;br /&gt;
    VERIFIC_DFFRS \ia/i6  (.d(a[0]), .clk(clk), .s(1'b0), .r(reset),&lt;br /&gt;
            .q(\ia/output_q [0]));   // test.v(21)&lt;br /&gt;
    VERIFIC_DFFRS \ia/i5  (.d(a[1]), .clk(clk), .s(1'b0), .r(reset),&lt;br /&gt;
            .q(\ia/output_q [1]));   // test.v(21)&lt;br /&gt;
&lt;br /&gt;
endmodule&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hoa</name></author>	</entry>

	</feed>