@@ -17,6 +17,7 @@ void BLIF_file::reset(CStr nm, uint16_t tr) noexcept {
17
17
topInputs_.clear ();
18
18
topOutputs_.clear ();
19
19
fabricNodes_.clear ();
20
+ fabricRealNodes_.clear ();
20
21
latches_.clear ();
21
22
constantNodes_.clear ();
22
23
rd_ok_ = chk_ok_ = false ;
@@ -184,6 +185,7 @@ bool BLIF_file::readBlif() noexcept {
184
185
topInputs_.clear ();
185
186
topOutputs_.clear ();
186
187
fabricNodes_.clear ();
188
+ fabricRealNodes_.clear ();
187
189
latches_.clear ();
188
190
constantNodes_.clear ();
189
191
topModel_.clear ();
@@ -417,11 +419,12 @@ bool BLIF_file::checkBlif() noexcept {
417
419
lprintf (" ==== node summary after linking ====\n " );
418
420
uint nn = numNodes ();
419
421
ls << " ==== nodes (" << nn << " ) :" << endl;
420
- ls << " ==== #topInputs_= " << topInputs_.size () << ' \n ' ;
421
- ls << " #topOutputs_= " << topOutputs_.size () << ' \n ' ;
422
- ls << " #fabricNodes_= " << fabricNodes_.size () << ' \n ' ;
423
- ls << " #latches_= " << latches_.size () << ' \n ' ;
424
- ls << " #constantNodes_= " << constantNodes_.size () << ' \n ' ;
422
+ ls << " ==== #topInputs_= " << topInputs_.size () << ' \n ' ;
423
+ ls << " #topOutputs_= " << topOutputs_.size () << ' \n ' ;
424
+ ls << " #fabricNodes_= " << fabricNodes_.size () << ' \n ' ;
425
+ ls << " #fabricRealNodes_= " << fabricRealNodes_.size () << ' \n ' ;
426
+ ls << " #latches_= " << latches_.size () << ' \n ' ;
427
+ ls << " #constantNodes_= " << constantNodes_.size () << ' \n ' ;
425
428
flush_out (true );
426
429
}
427
430
printPrimitives (ls, true );
@@ -541,11 +544,12 @@ uint BLIF_file::printNodes(std::ostream& os) const noexcept {
541
544
return 0 ;
542
545
}
543
546
os << " --- nodes (" << n << " ) :" << endl;
544
- os << " --- #topInputs_= " << topInputs_.size () << ' \n ' ;
545
- os << " #topOutputs_= " << topOutputs_.size () << ' \n ' ;
546
- os << " #fabricNodes_= " << fabricNodes_.size () << ' \n ' ;
547
- os << " #latches_= " << latches_.size () << ' \n ' ;
548
- os << " #constantNodes_= " << constantNodes_.size () << ' \n ' ;
547
+ os << " --- #topInputs_= " << topInputs_.size () << ' \n ' ;
548
+ os << " #topOutputs_= " << topOutputs_.size () << ' \n ' ;
549
+ os << " #fabricNodes_= " << fabricNodes_.size () << ' \n ' ;
550
+ os << " #fabricRealNodes_= " << fabricRealNodes_.size () << ' \n ' ;
551
+ os << " #latches_= " << latches_.size () << ' \n ' ;
552
+ os << " #constantNodes_= " << constantNodes_.size () << ' \n ' ;
549
553
os << endl;
550
554
551
555
if (trace_ < 4 ) {
@@ -749,17 +753,21 @@ void BLIF_file::countBUFs(uint& nIBUF, uint& nOBUF, uint& nCBUF) const noexcept
749
753
}
750
754
}
751
755
752
- void BLIF_file::countMOGs (uint& nISERD, uint& nDSP38, uint& nDSP19X,
753
- uint& nTDP_RAM36K) const noexcept {
754
- nISERD = nDSP38 = nDSP19X = nTDP_RAM36K = 0 ;
756
+ void BLIF_file::countMOGs (uint& nISERD,
757
+ uint& nDSP38, uint& nDSP19,
758
+ uint& nRAM36, uint& nRAM18
759
+ ) const noexcept {
760
+ nISERD = nDSP38 = nDSP19 = nRAM36 = nRAM18 = 0 ;
755
761
uint nn = numNodes ();
756
762
if (nn == 0 )
757
763
return ;
758
764
759
- for (uint i = 1 ; i <= nn; i++) {
760
- const BNode& nd = nodePool_[i];
761
- if (nd.isTopPort () or nd.isVirtualMog ())
762
- continue ;
765
+ assert (not fabricRealNodes_.empty ());
766
+
767
+ for (const BNode* x : fabricRealNodes_) {
768
+ const BNode& nd = *x;
769
+ assert (not nd.isTopPort ());
770
+ assert (not nd.isVirtualMog ());
763
771
Prim_t pt = nd.ptype_ ;
764
772
if (pt == I_SERDES) {
765
773
nISERD++;
@@ -770,11 +778,15 @@ void BLIF_file::countMOGs(uint& nISERD, uint& nDSP38, uint& nDSP19X,
770
778
continue ;
771
779
}
772
780
if (pt == DSP19X2) {
773
- nDSP19X ++;
781
+ nDSP19 ++;
774
782
continue ;
775
783
}
776
784
if (pt == TDP_RAM36K) {
777
- nTDP_RAM36K++;
785
+ nRAM36++;
786
+ continue ;
787
+ }
788
+ if (pt == TDP_RAM18KX2) {
789
+ nRAM18++;
778
790
}
779
791
}
780
792
}
@@ -1021,6 +1033,7 @@ bool BLIF_file::createNodes() noexcept {
1021
1033
topInputs_.clear ();
1022
1034
topOutputs_.clear ();
1023
1035
fabricNodes_.clear ();
1036
+ fabricRealNodes_.clear ();
1024
1037
latches_.clear ();
1025
1038
constantNodes_.clear ();
1026
1039
if (!rd_ok_) return false ;
@@ -1281,6 +1294,14 @@ bool BLIF_file::createNodes() noexcept {
1281
1294
1282
1295
std::sort (fabricNodes_.begin (), fabricNodes_.end (), BNode::CmpOut{});
1283
1296
1297
+ fabricRealNodes_.clear ();
1298
+ fabricRealNodes_.reserve (fabricNodes_.size ());
1299
+ for (BNode* x : fabricNodes_) {
1300
+ if (not x->isVirtualMog ()) {
1301
+ fabricRealNodes_.push_back (x);
1302
+ }
1303
+ }
1304
+
1284
1305
V.clear ();
1285
1306
topInputs_.clear ();
1286
1307
topOutputs_.clear ();
@@ -1417,8 +1438,10 @@ BLIF_file::BNode* BLIF_file::findFabricParent(uint of, const string& contact, in
1417
1438
assert (not contact.empty ());
1418
1439
if (fabricNodes_.empty ()) return nullptr ;
1419
1440
1441
+ assert (not fabricRealNodes_.empty ());
1442
+
1420
1443
// TMP linear
1421
- for (BNode* x : fabricNodes_ ) {
1444
+ for (BNode* x : fabricRealNodes_ ) {
1422
1445
if (x->id_ == of) continue ;
1423
1446
int pinIdx = x->in_contact (contact);
1424
1447
if (pinIdx >= 0 ) {
@@ -1433,8 +1456,10 @@ void BLIF_file::getFabricParents(uint of, const string& contact, vector<upair>&
1433
1456
assert (not contact.empty ());
1434
1457
if (fabricNodes_.empty ()) return ;
1435
1458
1459
+ assert (not fabricRealNodes_.empty ());
1460
+
1436
1461
// TMP linear
1437
- for (const BNode* x : fabricNodes_ ) {
1462
+ for (const BNode* x : fabricRealNodes_ ) {
1438
1463
if (x->id_ == of) continue ;
1439
1464
const BNode& nx = *x;
1440
1465
if (nx.inSigs_ .empty ())
@@ -1577,10 +1602,11 @@ bool BLIF_file::linkNodes() noexcept {
1577
1602
int pinIndex = -1 ;
1578
1603
BNode* par = findFabricParent (nd.id_ , nd.out_ , pinIndex);
1579
1604
if (!par) {
1580
- if (nd.is_RAM ()) {
1581
- // RAM output bits may be unused
1582
- if (trace_ >= 6 )
1605
+ if (nd.is_RAM () or nd. is_DSP () ) {
1606
+ // RAM or DSP output bits may be unused
1607
+ if (trace_ >= 6 ) {
1583
1608
lprintf (" skipping dangling cell output issue for RAM" );
1609
+ }
1584
1610
continue ;
1585
1611
}
1586
1612
err_msg_ = " dangling cell output: " ;
0 commit comments