<?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=Post_processing_port_resolution_of_black_boxes</id>
		<title>Post processing port resolution of black boxes - 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=Post_processing_port_resolution_of_black_boxes"/>
		<link rel="alternate" type="text/html" href="https://www.verific.com/faq/index.php?title=Post_processing_port_resolution_of_black_boxes&amp;action=history"/>
		<updated>2026-05-02T12:42:36Z</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=Post_processing_port_resolution_of_black_boxes&amp;diff=887&amp;oldid=prev</id>
		<title>Alice at 00:44, 20 February 2024</title>
		<link rel="alternate" type="text/html" href="https://www.verific.com/faq/index.php?title=Post_processing_port_resolution_of_black_boxes&amp;diff=887&amp;oldid=prev"/>
				<updated>2024-02-20T00:44:21Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://www.verific.com/faq/index.php?title=Post_processing_port_resolution_of_black_boxes&amp;amp;diff=887&amp;amp;oldid=884&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Alice</name></author>	</entry>

	<entry>
		<id>https://www.verific.com/faq/index.php?title=Post_processing_port_resolution_of_black_boxes&amp;diff=884&amp;oldid=prev</id>
		<title>Alice: Created page with &quot;C++ example:  &lt;nowiki&gt; #include &quot;Map.h&quot;             #include &quot;Message.h&quot;         #include &quot;veri_file.h&quot;       #include &quot;DataBase.h&quot;        #include &quot;VeriWrite.h&quot; #include &quot;Run...&quot;</title>
		<link rel="alternate" type="text/html" href="https://www.verific.com/faq/index.php?title=Post_processing_port_resolution_of_black_boxes&amp;diff=884&amp;oldid=prev"/>
				<updated>2024-02-17T02:56:29Z</updated>
		
		<summary type="html">&lt;p&gt;Created page with &amp;quot;C++ example:  &amp;lt;nowiki&amp;gt; #include &amp;quot;Map.h&amp;quot;             #include &amp;quot;Message.h&amp;quot;         #include &amp;quot;veri_file.h&amp;quot;       #include &amp;quot;DataBase.h&amp;quot;        #include &amp;quot;VeriWrite.h&amp;quot; #include &amp;quot;Run...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;C++ example:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#include &amp;quot;Map.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;VeriWrite.h&amp;quot;&lt;br /&gt;
#include &amp;quot;RuntimeFlags.h&amp;quot;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&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;
int main(int argc, char **argv)&lt;br /&gt;
{&lt;br /&gt;
    if (argc &amp;lt; 2) {&lt;br /&gt;
        Message::PrintLine(&amp;quot;Default input file: test.v. Specify command line argument to override&amp;quot;) ;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    const char *file_name = 0 ;&lt;br /&gt;
&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; ;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (!veri_file::Analyze(file_name, veri_file::SYSTEM_VERILOG)) return 1 ;&lt;br /&gt;
    if (!veri_file::ElaborateAll()) return 1 ;&lt;br /&gt;
&lt;br /&gt;
    Netlist *top = Netlist::PresentDesign() ;&lt;br /&gt;
&lt;br /&gt;
    VeriWrite vw ;&lt;br /&gt;
    RuntimeFlags::SetVar(&amp;quot;db_verilog_writer_write_blackboxes&amp;quot;, 2) ;&lt;br /&gt;
    vw.WriteFile (&amp;quot;netlist_before.v&amp;quot;, top) ;&lt;br /&gt;
&lt;br /&gt;
    MapIter mi ;&lt;br /&gt;
    Instance * instance ;&lt;br /&gt;
    FOREACH_INSTANCE_OF_NETLIST(top, mi, instance) {&lt;br /&gt;
        Netlist *view = instance-&amp;gt;View() ;&lt;br /&gt;
        if (!view) continue ;&lt;br /&gt;
        if (view-&amp;gt;GetAtt(&amp;quot; unknown_design&amp;quot;)) {&lt;br /&gt;
            std::cout &amp;lt;&amp;lt; &amp;quot;===&amp;gt; Instance '&amp;quot; &amp;lt;&amp;lt;  instance-&amp;gt;Name() &amp;lt;&amp;lt; &amp;quot;' is of unknown module '&amp;quot;&lt;br /&gt;
                      &amp;lt;&amp;lt; instance-&amp;gt;View()-&amp;gt;Owner()-&amp;gt;Name() &amp;lt;&amp;lt; &amp;quot;'&amp;quot;&amp;lt;&amp;lt; std::endl ;&lt;br /&gt;
            MapIter mi2 ;&lt;br /&gt;
            PortRef *portref ;&lt;br /&gt;
            FOREACH_PORTREF_OF_INST(instance, mi2, portref) {&lt;br /&gt;
                unsigned dir_known = 0 ;&lt;br /&gt;
                Port *port = portref-&amp;gt;GetPort() ;&lt;br /&gt;
                std::cout &amp;lt;&amp;lt; &amp;quot;===&amp;gt;     Port: '&amp;quot; &amp;lt;&amp;lt; port-&amp;gt;Name() &amp;lt;&amp;lt; &amp;quot;'&amp;quot;&amp;lt;&amp;lt; std::endl ;&lt;br /&gt;
                Net *net = portref-&amp;gt;GetNet() ;&lt;br /&gt;
                if (!net) {&lt;br /&gt;
                    std::cout &amp;lt;&amp;lt; &amp;quot;===&amp;gt;     Does not connect to any Net&amp;quot; &amp;lt;&amp;lt; std::endl ;&lt;br /&gt;
                    continue ;&lt;br /&gt;
                }&lt;br /&gt;
                // Is this port connected to any Port?&lt;br /&gt;
                Port *port2 ;&lt;br /&gt;
                SetIter si ;&lt;br /&gt;
                FOREACH_PORT_OF_NET(net, si, port2) {&lt;br /&gt;
                    if (port2-&amp;gt;IsInput()) {&lt;br /&gt;
                        std::cout &amp;lt;&amp;lt; &amp;quot;===&amp;gt;         Connected to input port '&amp;quot; &amp;lt;&amp;lt; port2-&amp;gt;Name() &amp;lt;&amp;lt; &amp;quot;' of owning Netlist&amp;quot; &amp;lt;&amp;lt; std::endl ;&lt;br /&gt;
                        std::cout &amp;lt;&amp;lt; &amp;quot;===&amp;gt;             Set port '&amp;quot; &amp;lt;&amp;lt; port-&amp;gt;Name() &amp;lt;&amp;lt; &amp;quot;' to input&amp;quot; &amp;lt;&amp;lt; std::endl ;&lt;br /&gt;
                        view-&amp;gt;GetPort(port-&amp;gt;Name())-&amp;gt;SetDir(DIR_IN) ;&lt;br /&gt;
                        dir_known = 1 ;&lt;br /&gt;
                    } else if (port2-&amp;gt;IsOutput()) {&lt;br /&gt;
                        if (net-&amp;gt;NumOfPortRefs() == 1 ) { // does not connected to any other instance&lt;br /&gt;
                            std::cout &amp;lt;&amp;lt; &amp;quot;===&amp;gt;         Only connected to output port '&amp;quot; &amp;lt;&amp;lt; port2-&amp;gt;Name() &amp;lt;&amp;lt; &amp;quot;' of owning Netlist&amp;quot; &amp;lt;&amp;lt; std::endl ;&lt;br /&gt;
                            std::cout &amp;lt;&amp;lt; &amp;quot;===&amp;gt;             Set port '&amp;quot; &amp;lt;&amp;lt; port-&amp;gt;Name() &amp;lt;&amp;lt; &amp;quot;' to output&amp;quot; &amp;lt;&amp;lt; std::endl ;&lt;br /&gt;
                            view-&amp;gt;GetPort(port-&amp;gt;Name())-&amp;gt;SetDir(DIR_OUT) ;&lt;br /&gt;
                            dir_known = 1 ;&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                // If still don't know direction, check other connections&lt;br /&gt;
                if (!dir_known) {&lt;br /&gt;
                    PortRef *portref2 ;&lt;br /&gt;
                    SetIter si2 ;&lt;br /&gt;
                    FOREACH_PORTREF_OF_NET(net, si2, portref2) {&lt;br /&gt;
                        if (portref2 == portref) continue ; // not checking self&lt;br /&gt;
                        if (portref2-&amp;gt;IsOutput()) { // connected to an output portref, must be an input port&lt;br /&gt;
                            Instance *instance2 = portref2-&amp;gt;GetInst() ;&lt;br /&gt;
                            Port *port3 = portref2-&amp;gt;GetPort() ;&lt;br /&gt;
                            std::cout &amp;lt;&amp;lt; &amp;quot;===&amp;gt;         Connected to output port '&amp;quot; &amp;lt;&amp;lt; port3-&amp;gt;Name()&lt;br /&gt;
                                      &amp;lt;&amp;lt; &amp;quot;' of instance ' &amp;quot; &amp;lt;&amp;lt; instance2-&amp;gt;Name() &amp;lt;&amp;lt; &amp;quot;'&amp;quot; &amp;lt;&amp;lt; std::endl ;&lt;br /&gt;
                            std::cout &amp;lt;&amp;lt; &amp;quot;===&amp;gt;             Set port '&amp;quot; &amp;lt;&amp;lt; port-&amp;gt;Name() &amp;lt;&amp;lt; &amp;quot;' to input&amp;quot; &amp;lt;&amp;lt; std::endl ;&lt;br /&gt;
                            view-&amp;gt;GetPort(port-&amp;gt;Name())-&amp;gt;SetDir(DIR_IN) ;&lt;br /&gt;
                            dir_known = 1 ;&lt;br /&gt;
                            break ;&lt;br /&gt;
                        } else if (portref2-&amp;gt;IsInout()) { // connected to an inout portref, still don't know direction&lt;br /&gt;
                            break ;&lt;br /&gt;
                        } else { // all portrefs are inputs, must be an output port&lt;br /&gt;
                            std::cout &amp;lt;&amp;lt; &amp;quot;===&amp;gt;             All other PortRefs are inputs&amp;quot; &amp;lt;&amp;lt; std::endl ;&lt;br /&gt;
                            std::cout &amp;lt;&amp;lt; &amp;quot;===&amp;gt;             Set port '&amp;quot; &amp;lt;&amp;lt; port-&amp;gt;Name() &amp;lt;&amp;lt; &amp;quot;' to output&amp;quot; &amp;lt;&amp;lt; std::endl ;&lt;br /&gt;
                            view-&amp;gt;GetPort(port-&amp;gt;Name())-&amp;gt;SetDir(DIR_OUT) ;&lt;br /&gt;
                            dir_known = 1 ;&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                if (!dir_known) { // Still clueless&lt;br /&gt;
                    std::cout &amp;lt;&amp;lt; &amp;quot;===&amp;gt;         Not enough data, remains inout&amp;quot; &amp;lt;&amp;lt; std::endl ;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    vw.WriteFile (&amp;quot;netlist_after.v&amp;quot;, top) ;&lt;br /&gt;
&lt;br /&gt;
    return 0 ;&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Run:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
-- Default input file: test.v. Specify command line argument to override&lt;br /&gt;
-- Analyzing Verilog file 'test.v' (VERI-1482)&lt;br /&gt;
test.v(1): INFO: compiling module 'top' (VERI-1018)&lt;br /&gt;
test.v(9): INFO: compiling module 'known1' (VERI-1018)&lt;br /&gt;
test.v(12): INFO: compiling module 'known2' (VERI-1018)&lt;br /&gt;
test.v(5): WARNING: instantiating unknown module 'unknown1' (VERI-1063)&lt;br /&gt;
test.v(6): WARNING: instantiating unknown module 'unknown2' (VERI-1063)&lt;br /&gt;
-- Writing netlist 'top' to Verilog file 'netlist_before.v' (VDB-1030)&lt;br /&gt;
===&amp;gt; Instance 'iu1' is of unknown module 'unknown1'&lt;br /&gt;
===&amp;gt;     Port: 'p1'&lt;br /&gt;
===&amp;gt;         Connected to output port 'o' of instance ' ik1'&lt;br /&gt;
===&amp;gt;             Set port 'p1' to input&lt;br /&gt;
===&amp;gt;     Port: 'p2'&lt;br /&gt;
===&amp;gt;         Connected to input port 'i2' of owning Netlist&lt;br /&gt;
===&amp;gt;             Set port 'p2' to input&lt;br /&gt;
===&amp;gt;     Port: 'p3'&lt;br /&gt;
===&amp;gt;         Not enough data, remains inout&lt;br /&gt;
===&amp;gt;     Port: 'p4'&lt;br /&gt;
===&amp;gt;             All other PortRefs are inputs&lt;br /&gt;
===&amp;gt;             Set port 'p4' to output&lt;br /&gt;
===&amp;gt;     Port: 'p5'&lt;br /&gt;
===&amp;gt;         Only connected to output port 'o3' of owning Netlist&lt;br /&gt;
===&amp;gt;             Set port 'p5' to output&lt;br /&gt;
===&amp;gt;     Port: 'p6'&lt;br /&gt;
===&amp;gt;         Not enough data, remains inout&lt;br /&gt;
===&amp;gt;     Port: 'p7'&lt;br /&gt;
===&amp;gt;         Not enough data, remains inout&lt;br /&gt;
===&amp;gt; Instance 'iu2' is of unknown module 'unknown2'&lt;br /&gt;
===&amp;gt;     Port: 'p1'&lt;br /&gt;
===&amp;gt;         Not enough data, remains inout&lt;br /&gt;
===&amp;gt;     Port: 'p2'&lt;br /&gt;
===&amp;gt;         Not enough data, remains inout&lt;br /&gt;
===&amp;gt;     Port: 'p3'&lt;br /&gt;
===&amp;gt;         Connected to input port 'i3' of owning Netlist&lt;br /&gt;
===&amp;gt;             Set port 'p3' to input&lt;br /&gt;
-- Writing netlist 'top' to Verilog file 'netlist_after.v' (VDB-1030)&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
netlist_before.v&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
module top (i1, i2, i3, o1, o2, o3) ;   // test.v(1)&lt;br /&gt;
    input i1;   // test.v(1)&lt;br /&gt;
    input i2;   // test.v(1)&lt;br /&gt;
    input i3;   // test.v(1)&lt;br /&gt;
    output o1;   // test.v(1)&lt;br /&gt;
    output o2;   // test.v(1)&lt;br /&gt;
    output o3;   // test.v(1)&lt;br /&gt;
    &lt;br /&gt;
    wire t1;   // test.v(2)&lt;br /&gt;
    wire t2;   // test.v(2)&lt;br /&gt;
    wire t3;   // test.v(2)&lt;br /&gt;
    wire t4;   // test.v(2)&lt;br /&gt;
    wire t5;   // test.v(2)&lt;br /&gt;
    &lt;br /&gt;
    known1 ik1 (.i1(i3), .i2(t2), .o(t3));   // test.v(3)&lt;br /&gt;
    known2 ik2 (.i1(i1), .i2(t1), .o(o2));   // test.v(4)&lt;br /&gt;
    unknown1 iu1 (.p1(t3), .p2(i2), .p3(t2), .p4(t1), .p5(o3), .p6(t4), &lt;br /&gt;
            .p7(t5));   // test.v(5)&lt;br /&gt;
    unknown2 iu2 (.p1(t4), .p2(t2), .p3(i3));   // test.v(6)&lt;br /&gt;
endmodule&lt;br /&gt;
&lt;br /&gt;
module known1 (i1, i2, o) ;   // test.v(9)&lt;br /&gt;
    input i1;   // test.v(9)&lt;br /&gt;
    input i2;   // test.v(9)&lt;br /&gt;
    output o;   // test.v(9)&lt;br /&gt;
endmodule&lt;br /&gt;
&lt;br /&gt;
module known2 (i1, i2, o) ;   // test.v(12)&lt;br /&gt;
    input i1;   // test.v(12)&lt;br /&gt;
    input i2;   // test.v(12)&lt;br /&gt;
    output o;   // test.v(12)  &lt;br /&gt;
endmodule&lt;br /&gt;
&lt;br /&gt;
module unknown1 (p1, p2, p3, p4, p5, p6, p7) ;&lt;br /&gt;
    inout p1;&lt;br /&gt;
    inout p2;&lt;br /&gt;
    inout p3;&lt;br /&gt;
    inout p4;&lt;br /&gt;
    inout p5;&lt;br /&gt;
    inout p6;&lt;br /&gt;
    inout p7; &lt;br /&gt;
endmodule&lt;br /&gt;
&lt;br /&gt;
module unknown2 (p1, p2, p3) ;&lt;br /&gt;
    inout p1;&lt;br /&gt;
    inout p2;&lt;br /&gt;
    inout p3;   &lt;br /&gt;
endmodule&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
netlist_after.v&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
module top (i1, i2, i3, o1, o2, o3);   // test.v(1)&lt;br /&gt;
    input i1;   // test.v(1)&lt;br /&gt;
    input i2;   // test.v(1)&lt;br /&gt;
    input i3;   // test.v(1)&lt;br /&gt;
    output o1;   // test.v(1)&lt;br /&gt;
    output o2;   // test.v(1)&lt;br /&gt;
    output o3;   // test.v(1)&lt;br /&gt;
    &lt;br /&gt;
    wire t1;   // test.v(2)&lt;br /&gt;
    wire t2;   // test.v(2)&lt;br /&gt;
    wire t3;   // test.v(2)&lt;br /&gt;
    wire t4;   // test.v(2)&lt;br /&gt;
    wire t5;   // test.v(2)&lt;br /&gt;
    &lt;br /&gt;
    known1 ik1 (.i1(i3), .i2(t2), .o(t3));   // test.v(3)&lt;br /&gt;
    known2 ik2 (.i1(i1), .i2(t1), .o(o2));   // test.v(4)&lt;br /&gt;
    unknown1 iu1 (.p1(t3), .p2(i2), .p3(t2), .p4(t1), .p5(o3), .p6(t4), &lt;br /&gt;
            .p7(t5));   // test.v(5)&lt;br /&gt;
    unknown2 iu2 (.p1(t4), .p2(t2), .p3(i3));   // test.v(6)&lt;br /&gt;
endmodule&lt;br /&gt;
&lt;br /&gt;
module known1 (i1, i2, o) ;   // test.v(9)&lt;br /&gt;
    input i1;   // test.v(9)&lt;br /&gt;
    input i2;   // test.v(9)&lt;br /&gt;
    output o;   // test.v(9) &lt;br /&gt;
endmodule&lt;br /&gt;
&lt;br /&gt;
module known2 (i1, i2, o) ;   // test.v(12)&lt;br /&gt;
    input i1;   // test.v(12)&lt;br /&gt;
    input i2;   // test.v(12)&lt;br /&gt;
    output o;   // test.v(12)&lt;br /&gt;
endmodule&lt;br /&gt;
&lt;br /&gt;
module unknown1 (p1, p2, p3, p4, p5, p6, p7) ;&lt;br /&gt;
    input p1;&lt;br /&gt;
    input p2;&lt;br /&gt;
    inout p3;&lt;br /&gt;
    output p4;&lt;br /&gt;
    output p5;&lt;br /&gt;
    inout p6;&lt;br /&gt;
    inout p7;&lt;br /&gt;
endmodule&lt;br /&gt;
&lt;br /&gt;
module unknown2 (p1, p2, p3) ;&lt;br /&gt;
    inout p1;&lt;br /&gt;
    inout p2;&lt;br /&gt;
    input p3;&lt;br /&gt;
endmodule&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
test.v&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
module top (input i1, i2, i3, output o1, o2, o3);&lt;br /&gt;
    wire t1, t2, t3, t4, t5;&lt;br /&gt;
    known1 ik1 (.i1(i3), .i2(t2), .o(t3));&lt;br /&gt;
    known2 ik2 (.i1(i1), .i2(t1), .o(o2));&lt;br /&gt;
    unknown1 iu1 (.p1(t3), .p2(i2), .p3(t2), .p4(t1), .p5(o3), .p6(t4), .p7(t5));&lt;br /&gt;
    unknown2 iu2 (.p1(t4), .p2(t2), .p3(i3));&lt;br /&gt;
endmodule&lt;br /&gt;
&lt;br /&gt;
module known1 (input i1, i2, output o);&lt;br /&gt;
endmodule&lt;br /&gt;
&lt;br /&gt;
module known2 (input i1, i2, output o);&lt;br /&gt;
endmodule&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Alice</name></author>	</entry>

	</feed>