From da1ac3661f8214e124a93dbb411d2d3a70d9951d Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Sun, 15 Dec 2019 00:16:47 +0100 Subject: [PATCH] WIP: bugfix of refactoriung, update test data. --- src/db/db/dbHierNetworkProcessor.cc | 4 +- src/db/db/dbHierNetworkProcessor.h | 38 ++++++++++++++---- src/db/unit_tests/dbLayoutToNetlistTests.cc | 12 +++--- .../algo/device_extract_au1_rebuild_nr.gds | Bin 9458 -> 9458 bytes .../algo/device_extract_au1_rebuild_pf.gds | Bin 49364 -> 49364 bytes .../algo/device_extract_au1_rebuild_pr.gds | Bin 29092 -> 29092 bytes .../algo/device_extract_au1_with_rec_nets.gds | Bin 50630 -> 50630 bytes .../algo/device_extract_au2_with_rec_nets.gds | Bin 38234 -> 38230 bytes .../algo/device_extract_au3_with_rec_nets.gds | Bin 46966 -> 46966 bytes .../algo/device_extract_au4_with_rec_nets.gds | Bin 49526 -> 49526 bytes .../device_extract_au5_flattened_circuits.gds | Bin 114198 -> 114198 bytes .../algo/device_extract_au5_with_rec_nets.gds | Bin 70670 -> 70670 bytes 12 files changed, 38 insertions(+), 16 deletions(-) diff --git a/src/db/db/dbHierNetworkProcessor.cc b/src/db/db/dbHierNetworkProcessor.cc index f809dec86..1d9d5b253 100644 --- a/src/db/db/dbHierNetworkProcessor.cc +++ b/src/db/db/dbHierNetworkProcessor.cc @@ -1518,8 +1518,6 @@ private: db::ICplxTrans t1i = t1.inverted (); db::ICplxTrans t2i = t2.inverted (); - std::list > ii_interactions; - // @@@ optimize for single inst? for (db::CellInstArray::iterator ii1 = i1element.at_end () ? i1.begin_touching (common_all.transformed (t1i), mp_layout) : i1element; ! ii1.at_end (); ++ii1) { @@ -1553,6 +1551,7 @@ private: const db::Cell &cell2 = mp_layout->cell (i2.cell_index ()); for (db::Cell::touching_iterator jj2 = cell2.begin_touching (common12.transformed (tt2.inverted ())); ! jj2.at_end (); ++jj2) { + std::list > ii_interactions; consider_instance_pair (common12, i1, t1, ii1, *jj2, tt2, db::CellInstArray::iterator (), ii_interactions); for (std::list >::iterator i = ii_interactions.begin (); i != ii_interactions.end (); ++i) { @@ -1577,6 +1576,7 @@ private: const db::Cell &cell1 = mp_layout->cell (i1.cell_index ()); for (db::Cell::touching_iterator jj1 = cell1.begin_touching (common1.transformed (tt1.inverted ())); ! jj1.at_end (); ++jj1) { + std::list > ii_interactions; consider_instance_pair (common1, *jj1, tt1, db::CellInstArray::iterator (), i2, t2, i2element, ii_interactions); for (std::list >::iterator i = ii_interactions.begin (); i != ii_interactions.end (); ++i) { diff --git a/src/db/db/dbHierNetworkProcessor.h b/src/db/db/dbHierNetworkProcessor.h index 87448e883..0f1619aaf 100644 --- a/src/db/db/dbHierNetworkProcessor.h +++ b/src/db/db/dbHierNetworkProcessor.h @@ -734,6 +734,30 @@ private: typedef std::list > cluster_instance_pair_list_type; +inline bool equal_array_delegates (const db::ArrayBase *a, const db::ArrayBase *b) +{ + if ((a == 0) != (b == 0)) { + return false; + } else if (a) { + static const db::array_base_ptr_cmp_f arr_less; + return ! arr_less (a, b) && ! arr_less (b, a); + } else { + return true; + } +} + +inline bool less_array_delegates (const db::ArrayBase *a, const db::ArrayBase *b) +{ + if ((a == 0) != (b == 0)) { + return (a == 0) < (b == 0); + } else if (a) { + static const db::array_base_ptr_cmp_f arr_less; + return arr_less (a, b); + } else { + return false; + } +} + /** * @brief A helper struct to describe a pair of cell instances with a specific relative transformation */ @@ -747,7 +771,8 @@ struct InstanceToInstanceInteraction { static const db::array_base_ptr_cmp_f arr_less; return ci1 == other.ci1 && ci2 == other.ci2 && t21.equal (other.t21) && - (array1 == 0) == (array2 == 0) && array1 != 0 && ! arr_less (array1, array2) && ! arr_less (array2, array1); + equal_array_delegates (array1, other.array1) && + equal_array_delegates (array2, other.array2); } bool operator< (const InstanceToInstanceInteraction &other) const @@ -761,15 +786,12 @@ struct InstanceToInstanceInteraction if (! t21.equal (other.t21)) { return t21.less (other.t21); } - if ((array1 == 0) != (array2 == 0)) { - return (array1 == 0) < (array2 == 0); - } - if (array1 != 0) { - static const db::array_base_ptr_cmp_f arr_less; - return arr_less (array1, array2); - } else { + if (less_array_delegates (array1, other.array1)) { + return true; + } else if (less_array_delegates (other.array1, array1)) { return false; } + return less_array_delegates (array2, other.array2); } db::cell_index_type ci1, ci2; diff --git a/src/db/unit_tests/dbLayoutToNetlistTests.cc b/src/db/unit_tests/dbLayoutToNetlistTests.cc index 6b7f0fd8e..40964ec67 100644 --- a/src/db/unit_tests/dbLayoutToNetlistTests.cc +++ b/src/db/unit_tests/dbLayoutToNetlistTests.cc @@ -791,7 +791,7 @@ TEST(2_Probing) EXPECT_EQ (qnet_name (l2n.probe_net (*rmetal1, db::DPoint (5.3, 0.0))), "RINGO:VSS"); EXPECT_EQ (qnet_name (l2n.probe_net (*rmetal1, db::DPoint (2.6, 1.0))), "RINGO:$I18"); - EXPECT_EQ (qnet_name (l2n.probe_net (*rmetal1, db::DPoint (6.4, 1.0))), "INV2PAIR:$I5"); + EXPECT_EQ (qnet_name (l2n.probe_net (*rmetal1, db::DPoint (6.4, 1.0))), "INV2PAIR:$I3"); // doesn't do anything here, but we test that this does not destroy anything: l2n.netlist ()->combine_devices (); @@ -833,7 +833,7 @@ TEST(2_Probing) EXPECT_EQ (qnet_name (l2n.probe_net (*rmetal1, db::DPoint (5.3, 0.0))), "RINGO:VSS"); EXPECT_EQ (qnet_name (l2n.probe_net (*rmetal1, db::DPoint (2.6, 1.0))), "RINGO:$I18"); - EXPECT_EQ (qnet_name (l2n.probe_net (*rmetal1, db::DPoint (6.4, 1.0))), "INV2PAIR:$I5"); + EXPECT_EQ (qnet_name (l2n.probe_net (*rmetal1, db::DPoint (6.4, 1.0))), "INV2PAIR:$I3"); } TEST(3_GlobalNetConnections) @@ -1071,7 +1071,7 @@ TEST(3_GlobalNetConnections) EXPECT_EQ (qnet_name (l2n.probe_net (*rmetal1, db::DPoint (5.3, 0.0))), "RINGO:VSS"); EXPECT_EQ (qnet_name (l2n.probe_net (*rmetal1, db::DPoint (2.6, 1.0))), "RINGO:$I22"); - EXPECT_EQ (qnet_name (l2n.probe_net (*rmetal1, db::DPoint (6.4, 1.0))), "INV2PAIR:$I6"); + EXPECT_EQ (qnet_name (l2n.probe_net (*rmetal1, db::DPoint (6.4, 1.0))), "INV2PAIR:$I4"); // doesn't do anything here, but we test that this does not destroy anything: l2n.netlist ()->combine_devices (); @@ -1113,7 +1113,7 @@ TEST(3_GlobalNetConnections) EXPECT_EQ (qnet_name (l2n.probe_net (*rmetal1, db::DPoint (5.3, 0.0))), "RINGO:VSS"); EXPECT_EQ (qnet_name (l2n.probe_net (*rmetal1, db::DPoint (2.6, 1.0))), "RINGO:$I22"); - EXPECT_EQ (qnet_name (l2n.probe_net (*rmetal1, db::DPoint (6.4, 1.0))), "INV2PAIR:$I6"); + EXPECT_EQ (qnet_name (l2n.probe_net (*rmetal1, db::DPoint (6.4, 1.0))), "INV2PAIR:$I4"); } TEST(4_GlobalNetDeviceExtraction) @@ -1357,7 +1357,7 @@ TEST(4_GlobalNetDeviceExtraction) EXPECT_EQ (qnet_name (l2n.probe_net (*rmetal1, db::DPoint (5.3, 0.0))), "RINGO:VSS"); EXPECT_EQ (qnet_name (l2n.probe_net (*rmetal1, db::DPoint (2.6, 1.0))), "RINGO:$I22"); - EXPECT_EQ (qnet_name (l2n.probe_net (*rmetal1, db::DPoint (6.4, 1.0))), "INV2PAIR:$I6"); + EXPECT_EQ (qnet_name (l2n.probe_net (*rmetal1, db::DPoint (6.4, 1.0))), "INV2PAIR:$I4"); // doesn't do anything here, but we test that this does not destroy anything: l2n.netlist ()->combine_devices (); @@ -1399,7 +1399,7 @@ TEST(4_GlobalNetDeviceExtraction) EXPECT_EQ (qnet_name (l2n.probe_net (*rmetal1, db::DPoint (5.3, 0.0))), "RINGO:VSS"); EXPECT_EQ (qnet_name (l2n.probe_net (*rmetal1, db::DPoint (2.6, 1.0))), "RINGO:$I22"); - EXPECT_EQ (qnet_name (l2n.probe_net (*rmetal1, db::DPoint (6.4, 1.0))), "INV2PAIR:$I6"); + EXPECT_EQ (qnet_name (l2n.probe_net (*rmetal1, db::DPoint (6.4, 1.0))), "INV2PAIR:$I4"); } TEST(5_DeviceExtractionWithDeviceCombination) diff --git a/testdata/algo/device_extract_au1_rebuild_nr.gds b/testdata/algo/device_extract_au1_rebuild_nr.gds index 256f5daf91365ff2277f034898be6bc7154ec45c..3432e15c6b439fb3a5f4653b8b427859053790c4 100644 GIT binary patch delta 1423 zcmez5`N>m>fsKKQDS|8L>NVGZPn1sXN?zap_veTZv1`hF_i;yIqqDgv9HyCK3iNHZ~U(KVSb~1{QV( z1{qeI>5PE~q%r`gQpJ#8prLeelCCZa{sDr#y_0j6 zfP>I(Zc>~@=%BmOp`)0%)Zrc60>5+4J@4iY{DEI0jTk$oyu|c(GRPr`7%l$&zAKe2 zF*s=e@DhpvuS&qeA0_0eFyy(1#F6`;K~_O?ZXg*dry%WIMdVdQ4SE`Cu%jdLpo2N_ z^4OCkE*CQcqPOu5azzuD2yIRlW$`TDn#x@ZkAw_Ot9rryL5&ohD6hghqfDwiOqAZr zzuMo_R69~`iO)AJP(RuZYBZ9Hm3+@^g6DN1S(`?l2$CfWdD@WJHuBusO;^17WTC-s zJ@ow5b^c{qyl?8flG^}pyn>_$Nnr-1T|m->Bs+`J&LD{(`9>rT9F9(WIEN5#&v(R| ai(7>d<$V-Qgfi|kW67UcaIN^WEK5IOuC5#a diff --git a/testdata/algo/device_extract_au1_rebuild_pf.gds b/testdata/algo/device_extract_au1_rebuild_pf.gds index 8cb5a621d6bd668029a295948f85d4f445440a88..72911a17f451258f1d387ebe7b1e3803db577824 100644 GIT binary patch delta 525 zcmcc8$b6-dS&4y-fr%-CL57iu{V@X%13v=;10RDPGJB$uayC{81|Bvx7ZpEW|6mnE z1{QV(1{qeIhA?o!)DluTaf5g!cI&`K1OTlgWCX~vkRV6DUUj*Qj<3b8$p?y{|P@60kH)nr6y^DMS-l%ewrB^Akhy-QkyRs3h+SLlmFR* zl>mh&``Ce)n;Yy7vBG2pTv#S2x#+<(u5sZ}WHg-Im?Ay-N~#f*RglIqSs>kOb3qyh zCsb%kK1}jVfzRXz`7Dzg3j8)V6r_oPOxn;YwVA0sfEmON=$6`?*Y!dG#8#LrHTl47 XpUDNY{WkN=*#LF~P;B#!g@5D#yDM_E delta 529 zcmcc8$b6-dS&4y-fr%-CL57iu{V@Xmh&``Ce)n;Yy7vBG2pTv#S2x#+<(u5sZ}1hEeUOHIC#3b7H$EJ$OSERgQCxgd>$ z6DB<+A7XC2%;a+gUXvf>vrKL%@Y~!_kR}FFvY}OKGgEs2Gl(6~EwwqX>xBS_tuR?? b@`2etlM811ZRVM?0qhW<*ybAx|HuIVqC9in diff --git a/testdata/algo/device_extract_au1_rebuild_pr.gds b/testdata/algo/device_extract_au1_rebuild_pr.gds index 948e2a8c6c7ff8724554f4cb28208483af0718e6..ef85fab2d912f31249693a241c14a51d66150547 100644 GIT binary patch delta 2457 zcma*oy=xO;9KiACuF0jIiG4|;*EIDdjkdKaJ!_?j!BU!P6HF{gEp0d~B2p9t2ays2 z0Y^7E1PKlf*%W*^hfw?r#KB3WWQ&`)h(ie(>?uNo`;u%Ae4o#gColI)wINj-QbZ_1 zme)jBl06OK6@5YopU~Uak0YZ&=TNxo9NyITNzTP=N?@##jHuE>DC|NMcN2Q=Mzo_4 zGCYWiy@Xo5h(ao%XDXuY{e%);L7Y7fHLKslCPX zW9e~w(G9km2k;77Ki#|1kEk|4C_ad2%};2@k7zeQs2D`_^dO7}Mt?n0_6_G#J4&HQGayWhr{Q>^P=`S5cDDZ02e{s&{$< zg!*r9$DMypUHZ532|$%0eo)a4og6k;<-~jZW*< ztK*m8WvH~<>nW9%Rg`VNrg5a GslNf=C_z^M delta 2458 zcma*oy=xO;9KiACuF0jIskBX^=QZ`^dezoyX^gcs21{wwCYV@~TH0_}M5HJP4k9H4 zDvoY)2of9|vMKm-4x#uLh=Y?#=@vI}5eEqw>?uNo`;u%Ae4o#gColI)wJufbk|7i! z%gZ7v$$`31g)Sr^i{aMwBV#Dy9g4TT!|Ux`l6SEi5*Vi}BdT-}iuw>G{Dj{55p5}i ztN@}?H=$-XB3&i)R7JG8n@}={sMup2iBAb%pAf!)5K%vV)An|cCC8`iJ4VK5rgs+4 z4rfN(MJL#4?7=H&y>#zNFQQr>p+rBTWJ0{2sH)}X@i6+gM^&g0Zg9`V)}UqQ@?>}VyKHI%e;AW!*fiDprWMAT=sIojJ10L zg!*r9+ns+-UHI?Rjn=W*y8e5tySeSLI~Q2Y&*lnkA65}ol(}?%?n-)bHJw{JX~tvD z%i#;~@i^+y$CTcVtWYwJq53d}DsckU*Kt(&2~^D(s#|eX;Ym~vPNOfzsncQoex~M%`{y+~I6f)4(>h|$jIDL(ox8K&W$%A! z=Uxia`bA8o45o7S8@*O}fm4Cg5~meT)^qx$C$C~^uG*xk*Rqt9>!0Z@|F{t%rLR3y Fe*+l%I9LDx diff --git a/testdata/algo/device_extract_au1_with_rec_nets.gds b/testdata/algo/device_extract_au1_with_rec_nets.gds index b03ebd333b2035c62f66bcced3536282db2fad02..9768f35d580b9b12a167b58ea84160347d7f6ef4 100644 GIT binary patch delta 1121 zcmX@s&3vqzS&4y-fr%-CL57iu{V@X%13v=;g8%~~GJB$uvM6?msAwD#r*31Hn7oS- zhs@?xOwx?lHEq7dj8lq>l^d5XEwYN@A#ku2@3i81zl^d5XEwYN@A#ku2@3i81zs_Qwo74EziXK#~!eJyA(n6uU%JG!BVVx3No1-o=PR zX7eg0X-4dtHs4~#DaFOgjZ2pn+ie_DlchLtxq^$coJk9-XBouU*n<3AL*hOC!i)kO zJ%i#^JdGz$6cFEhhHmBna!X2aHX-yN)wtGjVB9=3CpoFFvzgt%qN?#O*qLo`RybDM$5_n MCaG?|KB<`r0FuXfBLDyZ delta 874 zcmcb%is{xWCM5s_Qwod3{nh?3``8F$n1$q%A(jMqM~s~oVtx&V)8CV z95S0%F-bFG*R=T-GfpWkR&HFnwAgOrkeV#Tfy)(KoaIbfSUt-i#>N)p=Nc04=@(`c z;OH3?ui|Msd7^;$=0n^|S#Y?#M&KbXsUp$koH%sp$)ClgOF#vu)F+LzEE?FIE&_FW zkf)!!KhWKV=3s~a(Z%WTZASNTIboGKPN{h|IHe{z;*@H0la<2}5<60GO1*08WyYba zr)@4fcB#pBeRHwPZ2r)PE0IlBn9#&%I$2OmSdN{6L53A)M%jF2!b!%-zLNwQ&4H@L OCi71g*nD|XGZO$_*MQOh diff --git a/testdata/algo/device_extract_au3_with_rec_nets.gds b/testdata/algo/device_extract_au3_with_rec_nets.gds index 77f48da85e1ff6db9584f1cde6f6a1800e2f619b..b8ed2a041c3290fe70f943c5f854b2727ba77f2d 100644 GIT binary patch delta 979 zcmezNj_KPwCM5s_Qwo74EziXK#~!eJyA(n6uU%JG!BVVx3No1-o=PZ zW);(1?0PoGFiSJykm_Nj+bIGY+X=bLX<-kXo~JE)x!^xD~jhCJU^_m7))=#+7U*e_GSTXfj!Gov<7` g1A`1J&P=&^*;-X5CPQPOQpw3Y8+bQ=Uf;|P09J2{6#xJL delta 979 zcmezNj_KPwCM5s_Qwod3{nh?KoLP?_CzIRQS1^?(KsYd-Nr64c^4xt znN>`4vFq6!!z|5+L#l@br_>%+Zd|(Vu-(QXHTet&F8A%>#38eJ4OcmnHr4=Q5MyHt z@^cM|_w)-h3UKrcidXS8W0?FwPi%7v?@|^Vo{|%Kh)YUD{39<8T~exNaq0S_iBsyH z-dPq+>~0rDebommC`?%aN!xpDhj}uO*26voNB|dXiaRh~0 zk*o#|sfby<%s8Ze&7I4RLu$>^xlA~u;#T02nk=vySBgHg8dtKN{Ao=SquFG|b;5G& g3=A@?I5XwuWouQLn2Zd8N+l=rY~bDed3`fG0AK}>KL7v# diff --git a/testdata/algo/device_extract_au4_with_rec_nets.gds b/testdata/algo/device_extract_au4_with_rec_nets.gds index 69d52a8499ca12781d3a58554969a5b79e3092df..95a6a3156e73e702ac78eae697c545accd13c4f9 100644 GIT binary patch delta 979 zcmey?#Qd#^S&4y-fr%-CL57iu{V@X%13v=;0|$czGJB$uvM6?msAwD#r*31Hn7oS- zm&_`rx!Cn=j$xK'wgf>UY_D>p7(ci3*@keYmk1DE^uaN>~JyoRfsNgHbbF^I9T z1^Ky##C!UM83j0c2F0s*nlMcMpeMFDg?A|n4o}GmJ;Ws?BL0yVhb}4Av$%Bq(Znfr zPwy;?CU&=rK;0hX>F4ebbhx20#O1Gyak_ko#eH0Em|=@ks>cbZRD(NCsS=;LS~!A2 ztz1?Yhg8IpUS=Fpzn0Hs$04<5{ahv-QgNGbNlg~miYrAQ+KMaLPX4s5iP2=T;tpXs hb_NC+R-Bn~^Rn%#OiYHxK&6tCd3Nz`{=Bo99RSeNm+Sxl delta 979 zcmey?#Qd#^S&4y-fr%-CL57iu{V@XUY_D>p7(ci3*@keYmk1DE^uaN>~JyoRfsNgHbbF^I9T z1^Ky##C!UM83j0c2F0s*nlViNpeMFDg?A|n4o}GmJ;Ws?BL0yVhb}4Av$%Bq(Znfr zPwy;?CU&=rK;0hX>F4ebbhwcr#O1Gyak_ko#eH0Em|=@ks>cbZRD(NCsS=;LS~!A2 ztz1?Yhg8IpUS=Fpzn0Hs$04<5{ahv-QgNGbNlg~miYrAQ+KMaLPX4s5iP3Db;tpXs hb_NC+R-Bn~^Rn%#OiV_GK&6tCd3Nz`{=Bo99RO_Qj8p&s diff --git a/testdata/algo/device_extract_au5_flattened_circuits.gds b/testdata/algo/device_extract_au5_flattened_circuits.gds index bb997bf82baa72ffeb1c46dda0c1f1390c6856e2..a0b32677efc3f5fad3a69ee0ef3755a68b43a826 100644 GIT binary patch delta 888 zcmbRChi%#)HYEl&1}3Hm1{p>s_Qwo74EziX3@i+W$n1$q%A!~$Hb!wXW0%=n#hlNJ zL+YQvT`n9_AEa?gJyN^NrGeEI3?gi7L4K|w@j;$`?*8#Ao`%Mg9c9Ef|1;c*%bpW9 z_i;(>amOjOAqc0`l31KlGcx8{;_$B5B3T<8QZ@HtIdDk5dv=!(htz|wcX8>u^beQR z_9N_!cRAFthpiAB8*0!_pJ2i$w*8&}<5nCtZC@b?G!DB1x6e|-E!U%sTdvLow_JfO z<6M0l_9^8u${OL23z^Rt%Z@|t*fPf3+}P!&Z`;J^ja_QH*k;BSMn=Qw{#zJTw;$NT bxSEm4(0Ka9&5V-M*KA|t-9C96V>3Gd@*s_Qwod3{nh?3>*xM$n1$q%A!~$Hb!wXW0%=n#hlNJ zL+YQvT`n9_AEa?gJyN^NrGeEI3?gi7L4K|w@j;$`?*8#Ao<@d~9c9Ef|1;c*%bpW9 z_i;(>amOjOAqc0`l31KlGcx8{;_$B5B3T<8QZ@HtIdDk5dv=!(htz|wcX8>u^beQR z_9N_!cRAFthpiAB8*0!_pJ2i$w*8&}<5nCtZC@b?G!DB1x6e|-E!U%sTdvLow_JfO z<6M0l_9^8u${OL23z^Rt%Z@|t*fPf3+}P!&Z`;J^ja_QH*k;BSMkXV}=>c09Rkk14 Z!nhjDo4A=#a{8KWjJ(??Z)0p`2LS3Uh%5jA diff --git a/testdata/algo/device_extract_au5_with_rec_nets.gds b/testdata/algo/device_extract_au5_with_rec_nets.gds index 6f30100c642a0f7f558036e3b2d19d8eedf3d2ea..365498e935aac0fa4a0a9562ec28d390db802ac7 100644 GIT binary patch delta 864 zcmeBM!P2*aMTvopfr%-CL57iu{V@X%13v=;0|x^iGJB$uvM6?msA%jG8&5?uVwc%$ z#e_?0@+#)JI5fqu%*JIN4;xOYJ?yt}=~}}njYDek9j@CrTyciGoEe8y1ivRA4ykRj zce!v#t2AXAogy3-WUfi4XGhbN7!|@ia8vJm2mNE;|}L@8gmx3Bf6q z5sy;PK(ahm`D delta 864 zcmeBM!P2*aMTvopfr%-CL57iu{V@X2AXAogy3-WUfi4XGhbN7!|@ia2rJm2mNE;|}L@8gmx3Bf6q z5sy;N;qaOD61