Ignore CCSN groups (#176)

This commit is contained in:
Akash Levy 2025-01-15 09:35:40 -08:00 committed by GitHub
parent 7c2da8ab3d
commit 9c24e1a757
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 27 additions and 1 deletions

View File

@ -101,6 +101,7 @@ LibertyReader::init(const char *filename,
saved_port_group_ = nullptr; saved_port_group_ = nullptr;
in_bus_ = false; in_bus_ = false;
in_bundle_ = false; in_bundle_ = false;
in_ccsn_ = false;
sequential_ = nullptr; sequential_ = nullptr;
statetable_ = nullptr; statetable_ = nullptr;
timing_ = nullptr; timing_ = nullptr;
@ -543,6 +544,24 @@ LibertyReader::defineVisitors()
defineAttrVisitor("driver_waveform_name", &LibertyReader::visitDriverWaveformName); defineAttrVisitor("driver_waveform_name", &LibertyReader::visitDriverWaveformName);
defineAttrVisitor("driver_waveform_rise", &LibertyReader::visitDriverWaveformRise); defineAttrVisitor("driver_waveform_rise", &LibertyReader::visitDriverWaveformRise);
defineAttrVisitor("driver_waveform_fall", &LibertyReader::visitDriverWaveformFall); defineAttrVisitor("driver_waveform_fall", &LibertyReader::visitDriverWaveformFall);
// ccsn (not implemented, this is needed to properly ignore ccsn groups)
defineGroupVisitor("ccsn_first_stage", &LibertyReader::beginCcsn,
&LibertyReader::endCcsn);
defineGroupVisitor("ccsn_last_stage", &LibertyReader::beginCcsn,
&LibertyReader::endCcsn);
defineGroupVisitor("output_voltage_rise", &LibertyReader::beginCcsn,
&LibertyReader::endCcsn);
defineGroupVisitor("output_voltage_fall", &LibertyReader::beginCcsn,
&LibertyReader::endCcsn);
defineGroupVisitor("propagated_noise_low", &LibertyReader::beginCcsn,
&LibertyReader::endCcsn);
defineGroupVisitor("propagated_noise_high", &LibertyReader::beginCcsn,
&LibertyReader::endCcsn);
defineGroupVisitor("input_ccb", &LibertyReader::beginCcsn,
&LibertyReader::endCcsn);
defineGroupVisitor("output_ccb", &LibertyReader::beginCcsn,
&LibertyReader::endCcsn);
} }
void void
@ -2709,7 +2728,7 @@ LibertyReader::endOutputCurrentRiseFall(LibertyGroup *group)
void void
LibertyReader::beginVector(LibertyGroup *group) LibertyReader::beginVector(LibertyGroup *group)
{ {
if (timing_) { if (timing_ && !in_ccsn_) {
beginTable(group, TableTemplateType::output_current, current_scale_); beginTable(group, TableTemplateType::output_current, current_scale_);
scale_factor_type_ = ScaleFactorType::unknown; scale_factor_type_ = ScaleFactorType::unknown;
reference_time_exists_ = false; reference_time_exists_ = false;

View File

@ -482,6 +482,10 @@ public:
void visitDriverWaveformRiseFall(LibertyAttr *attr, void visitDriverWaveformRiseFall(LibertyAttr *attr,
const RiseFall *rf); const RiseFall *rf);
// ccsn (not implemented, this is needed to properly ignore ccsn groups)
void beginCcsn(LibertyGroup *) { in_ccsn_ = true; }
void endCcsn(LibertyGroup *) { in_ccsn_ = false; }
// Visitors for derived classes to overload. // Visitors for derived classes to overload.
virtual void beginGroup1(LibertyGroup *) {} virtual void beginGroup1(LibertyGroup *) {}
virtual void beginGroup2(LibertyGroup *) {} virtual void beginGroup2(LibertyGroup *) {}
@ -627,6 +631,7 @@ protected:
StringSeq bus_names_; StringSeq bus_names_;
bool in_bus_; bool in_bus_;
bool in_bundle_; bool in_bundle_;
bool in_ccsn_;
TableAxisVariable axis_var_[3]; TableAxisVariable axis_var_[3];
FloatSeq *axis_values_[3]; FloatSeq *axis_values_[3];
int type_bit_from_; int type_bit_from_;

BIN
test/asap7_ccsn.lib.gz Normal file

Binary file not shown.

0
test/liberty_ccsn.ok Normal file
View File

1
test/liberty_ccsn.tcl Normal file
View File

@ -0,0 +1 @@
read_liberty asap7_ccsn.lib.gz

View File

@ -135,6 +135,7 @@ record_sta_tests {
report_json1 report_json1
report_json2 report_json2
liberty_latch3 liberty_latch3
liberty_ccsn
} }
define_test_group fast [group_tests all] define_test_group fast [group_tests all]