92
92
// File local type declarations
93
93
//
94
94
95
+ typedef std::pair<double , std::string> pair_d;
96
+
95
97
/* enum class PortType {
96
98
* IN,
97
99
* OUT,
@@ -553,9 +555,9 @@ class BlackBoxInst : public Instance {
553
555
std::map<std::string, std::vector<std::string>> input_port_conns, // /<Port connections: Dictionary of <port,nets>
554
556
std::map<std::string, std::vector<std::string>> output_port_conns, // /<Port connections: Dictionary of <port,nets>
555
557
std::vector<Arc> timing_arcs, // /<Combinational timing arcs
556
- std::map<std::string, double > ports_tsu, // /<Port setup checks
557
- std::map<std::string, double > ports_thld, // /<Port hold checks
558
- std::map<std::string, double > ports_tcq) // /<Port clock-to-q delays
558
+ std::map<std::string, pair_d > ports_tsu, // /<Port setup checks
559
+ std::map<std::string, pair_d > ports_thld, // /<Port hold checks
560
+ std::map<std::string, pair_d > ports_tcq) // /<Port clock-to-q delays
559
561
: type_name_(type_name)
560
562
, inst_name_(inst_name)
561
563
, params_(params)
@@ -565,7 +567,7 @@ class BlackBoxInst : public Instance {
565
567
, timing_arcs_(timing_arcs)
566
568
, ports_tsu_(ports_tsu)
567
569
, ports_thld_(ports_thld)
568
- , ports_tcq_(ports_tcq) {}
570
+ , ports_tcq_(ports_tcq){}
569
571
570
572
void print_blif (std::ostream& os, size_t & unconn_count, int depth = 0 ) override {
571
573
os << indent (depth) << " .subckt " << type_name_ << " \\ "
@@ -690,12 +692,12 @@ class BlackBoxInst : public Instance {
690
692
691
693
// Clock-to-Q delays
692
694
for (auto kv : ports_tcq_) {
693
- double clock_to_q_ps = get_delay_ps (kv.second );
695
+ double clock_to_q_ps = get_delay_ps (kv.second . first );
694
696
695
697
std::stringstream delay_triple;
696
698
delay_triple << " (" << clock_to_q_ps << " :" << clock_to_q_ps << " :" << clock_to_q_ps << " )" ;
697
699
698
- os << indent (depth + 3 ) << " (IOPATH (posedge clock ) " << escape_sdf_identifier (kv.first ) << " " << delay_triple.str () << " " << delay_triple.str () << " )\n " ;
700
+ os << indent (depth + 3 ) << " (IOPATH (posedge " << escape_sdf_identifier (kv. second . second ) << " ) " << escape_sdf_identifier (kv.first ) << " " << delay_triple.str () << " " << delay_triple.str () << " )\n " ;
699
701
}
700
702
os << indent (depth + 2 ) << " )\n " ; // ABSOLUTE
701
703
}
@@ -705,20 +707,20 @@ class BlackBoxInst : public Instance {
705
707
// Setup checks
706
708
os << indent (depth + 1 ) << " (TIMINGCHECK\n " ;
707
709
for (auto kv : ports_tsu_) {
708
- double setup_ps = get_delay_ps (kv.second );
710
+ double setup_ps = get_delay_ps (kv.second . first );
709
711
710
712
std::stringstream delay_triple;
711
713
delay_triple << " (" << setup_ps << " :" << setup_ps << " :" << setup_ps << " )" ;
712
714
713
- os << indent (depth + 2 ) << " (SETUP " << escape_sdf_identifier (kv.first ) << " (posedge clock) " << delay_triple.str () << " )\n " ;
715
+ os << indent (depth + 2 ) << " (SETUP " << escape_sdf_identifier (kv.first ) << " (posedge " << escape_sdf_identifier (kv. second . second ) << " ) " << delay_triple.str () << " )\n " ;
714
716
}
715
717
for (auto kv : ports_thld_) {
716
- double hold_ps = get_delay_ps (kv.second );
718
+ double hold_ps = get_delay_ps (kv.second . first );
717
719
718
720
std::stringstream delay_triple;
719
721
delay_triple << " (" << hold_ps << " :" << hold_ps << " :" << hold_ps << " )" ;
720
722
721
- os << indent (depth + 2 ) << " (HOLD " << escape_sdf_identifier (kv.first ) << " (posedge clock) " << delay_triple.str () << " )\n " ;
723
+ os << indent (depth + 2 ) << " (HOLD " << escape_sdf_identifier (kv.first ) << " (posedge " << escape_sdf_identifier (kv. second . second ) << " ) " << delay_triple.str () << " )\n " ;
722
724
}
723
725
os << indent (depth + 1 ) << " )\n " ; // TIMINGCHECK
724
726
}
@@ -750,9 +752,9 @@ class BlackBoxInst : public Instance {
750
752
std::map<std::string, std::vector<std::string>> input_port_conns_;
751
753
std::map<std::string, std::vector<std::string>> output_port_conns_;
752
754
std::vector<Arc> timing_arcs_;
753
- std::map<std::string, double > ports_tsu_;
754
- std::map<std::string, double > ports_thld_;
755
- std::map<std::string, double > ports_tcq_;
755
+ std::map<std::string, pair_d > ports_tsu_;
756
+ std::map<std::string, pair_d > ports_thld_;
757
+ std::map<std::string, pair_d > ports_tcq_;
756
758
};
757
759
758
760
/* *
@@ -1284,9 +1286,9 @@ class NetlistWriterVisitor : public NetlistVisitor {
1284
1286
std::map<std::string, std::vector<std::string>> input_port_conns;
1285
1287
std::map<std::string, std::vector<std::string>> output_port_conns;
1286
1288
std::vector<Arc> timing_arcs;
1287
- std::map<std::string, double > ports_tsu;
1288
- std::map<std::string, double > ports_thld;
1289
- std::map<std::string, double > ports_tcq;
1289
+ std::map<std::string, pair_d > ports_tsu;
1290
+ std::map<std::string, pair_d > ports_thld;
1291
+ std::map<std::string, pair_d > ports_tcq;
1290
1292
1291
1293
params[" ADDR_WIDTH" ] = " 0" ;
1292
1294
params[" DATA_WIDTH" ] = " 0" ;
@@ -1342,7 +1344,7 @@ class NetlistWriterVisitor : public NetlistVisitor {
1342
1344
}
1343
1345
1344
1346
input_port_conns[port_name].push_back (net);
1345
- ports_tsu[port_name] = pin->tsu ;
1347
+ ports_tsu[port_name] = std::make_pair ( pin->tsu , pin-> associated_clock_pin -> port -> name ) ;
1346
1348
}
1347
1349
}
1348
1350
@@ -1378,7 +1380,7 @@ class NetlistWriterVisitor : public NetlistVisitor {
1378
1380
" Unrecognized input port class '%s' for primitive '%s' (%s)\n " , port_class.c_str (), atom->name , pb_type->name );
1379
1381
}
1380
1382
output_port_conns[port_name].push_back (net);
1381
- ports_tcq[port_name] = pin->tco_max ;
1383
+ ports_tcq[port_name] = std::make_pair (pin-> tco_max ,pin-> associated_clock_pin -> port -> name ); // pin->tco_max;
1382
1384
}
1383
1385
}
1384
1386
@@ -1427,9 +1429,9 @@ class NetlistWriterVisitor : public NetlistVisitor {
1427
1429
std::map<std::string, std::vector<std::string>> input_port_conns;
1428
1430
std::map<std::string, std::vector<std::string>> output_port_conns;
1429
1431
std::vector<Arc> timing_arcs;
1430
- std::map<std::string, double > ports_tsu;
1431
- std::map<std::string, double > ports_thld;
1432
- std::map<std::string, double > ports_tcq;
1432
+ std::map<std::string, pair_d > ports_tsu;
1433
+ std::map<std::string, pair_d > ports_thld;
1434
+ std::map<std::string, pair_d > ports_tcq;
1433
1435
1434
1436
params[" WIDTH" ] = " 0" ;
1435
1437
@@ -1523,9 +1525,9 @@ class NetlistWriterVisitor : public NetlistVisitor {
1523
1525
std::map<std::string, std::vector<std::string>> input_port_conns;
1524
1526
std::map<std::string, std::vector<std::string>> output_port_conns;
1525
1527
std::vector<Arc> timing_arcs;
1526
- std::map<std::string, double > ports_tsu;
1527
- std::map<std::string, double > ports_thld;
1528
- std::map<std::string, double > ports_tcq;
1528
+ std::map<std::string, pair_d > ports_tsu;
1529
+ std::map<std::string, pair_d > ports_thld;
1530
+ std::map<std::string, pair_d > ports_tcq;
1529
1531
1530
1532
params[" WIDTH" ] = " 0" ;
1531
1533
@@ -1621,9 +1623,9 @@ class NetlistWriterVisitor : public NetlistVisitor {
1621
1623
std::map<std::string, std::vector<std::string>> input_port_conns;
1622
1624
std::map<std::string, std::vector<std::string>> output_port_conns;
1623
1625
std::vector<Arc> timing_arcs;
1624
- std::map<std::string, double > ports_tsu;
1625
- std::map<std::string, double > ports_thld;
1626
- std::map<std::string, double > ports_tcq;
1626
+ std::map<std::string, pair_d > ports_tsu;
1627
+ std::map<std::string, pair_d > ports_thld;
1628
+ std::map<std::string, pair_d > ports_tcq;
1627
1629
1628
1630
// Delay matrix[sink_tnode] -> tuple of source_port_name, pin index, delay
1629
1631
std::map<tatum::NodeId, std::vector<std::tuple<std::string, int , double >>> tnode_delay_matrix;
@@ -1662,8 +1664,8 @@ class NetlistWriterVisitor : public NetlistVisitor {
1662
1664
1663
1665
input_port_conns[port->name ].push_back (net);
1664
1666
if (pin->type == PB_PIN_SEQUENTIAL) {
1665
- if (!std::isnan (pin->tsu )) ports_tsu[port->name ] = pin->tsu ;
1666
- if (!std::isnan (pin->thld )) ports_thld[port->name ] = pin->thld ;
1667
+ if (!std::isnan (pin->tsu )) ports_tsu[port->name ] = std::make_pair ( pin->tsu , pin-> associated_clock_pin -> port -> name ) ;
1668
+ if (!std::isnan (pin->thld )) ports_thld[port->name ] = std::make_pair ( pin->thld , pin-> associated_clock_pin -> port -> name ) ;
1667
1669
}
1668
1670
}
1669
1671
}
@@ -1698,7 +1700,7 @@ class NetlistWriterVisitor : public NetlistVisitor {
1698
1700
1699
1701
1700
1702
output_port_conns[port->name ].push_back (net);
1701
- if (pin->type == PB_PIN_SEQUENTIAL && !std::isnan (pin->tco_max )) ports_tcq[port->name ] = pin->tco_max ;
1703
+ if (pin->type == PB_PIN_SEQUENTIAL && !std::isnan (pin->tco_max )) ports_tcq[port->name ] = std::make_pair ( pin->tco_max ,pin-> associated_clock_pin -> port -> name ) ;
1702
1704
}
1703
1705
}
1704
1706
0 commit comments