21 #ifndef SRC_TIMING_LIBRARY_H_
22 #define SRC_TIMING_LIBRARY_H_
24 #include "../standard_cell/standard_cells.h"
25 #include "../entity_system/vector_property.h"
27 #include <boost/units/systems/si.hpp>
28 #include <boost/units/io.hpp>
30 #include "library_timing_arcs.h"
31 #include <boost/optional.hpp>
36 enum class unateness {
37 NEGATIVE_UNATE, POSITIVE_UNATE, NON_UNATE
40 enum class timing_arc_types {
41 COMBINATIONAL, SEQUENTIAL, RISING_EDGE
46 using CapacitanceType = boost::units::quantity<boost::units::si::capacitance>;
47 using SlewType = boost::units::quantity<boost::units::si::time>;
67 std::vector<TestLUT> m_tests;
74 void pin_capacitance(entity_system::entity pin, boost::units::quantity<boost::units::si::capacitance> capacitance);
77 void setup_rise_create(entity_system::entity arc,
const TestLUT & lut);
78 void hold_rise_create(entity_system::entity arc,
const TestLUT & lut);
80 const TestLUT& setup_rise(entity_system::entity arc)
const {
81 assert(m_arc2setup_rise[m_tarcs.system().
lookup(arc)]);
82 return m_tests[*m_arc2setup_rise[m_tarcs.system().
lookup(arc)]];
85 const TestLUT& hold_rise(entity_system::entity arc)
const {
86 assert(m_arc2hold_rise[m_tarcs.system().
lookup(arc)]);
87 return m_tests[*m_arc2hold_rise[m_tarcs.system().
lookup(arc)]];
91 void setup_fall_create(entity_system::entity arc,
const TestLUT & lut);
92 void hold_fall_create(entity_system::entity arc,
const TestLUT & lut);
94 const TestLUT& setup_fall(entity_system::entity arc)
const {
95 assert(m_arc2setup_fall[m_tarcs.system().
lookup(arc)]);
96 return m_tests[*m_arc2setup_fall[m_tarcs.system().
lookup(arc)]];
99 const TestLUT& hold_fall(entity_system::entity arc)
const {
100 assert(m_arc2hold_fall[m_tarcs.system().
lookup(arc)]);
101 return m_tests[*m_arc2hold_fall[m_tarcs.system().
lookup(arc)]];
105 boost::units::quantity<boost::units::si::capacitance> pin_capacitance(entity_system::entity pin)
const {
112 void pin_direction(entity_system::entity pin, standard_cell::pin_directions direction) {
116 standard_cell::pin_directions pin_direction(entity_system::entity pin)
const {
120 entity_system::entity timing_arc_from(entity_system::entity arc)
const {
121 return m_tarcs.from(arc);
124 entity_system::entity timing_arc_to(entity_system::entity arc)
const {
125 return m_tarcs.to(arc);
128 entity_system::entity timing_arc_create(entity_system::entity from, entity_system::entity to) {
129 return m_tarcs.create(from, to);
132 const std::vector<entity_system::entity>& pin_timing_arcs(entity_system::entity pin)
const {
133 return m_tarcs.pin_timing_arcs(pin);
136 void timing_arc_rise_slew(entity_system::entity arc,
const LUT & lut);
137 void timing_arc_fall_slew(entity_system::entity arc,
const LUT & lut);
138 void timing_arc_rise_delay(entity_system::entity arc,
const LUT & lut);
139 void timing_arc_fall_delay(entity_system::entity arc,
const LUT & lut);
141 const LUT & timing_arc_rise_slew(entity_system::entity arc)
const {
142 return m_rise_slews[m_tarcs.system().
lookup(arc)];
144 const LUT & timing_arc_fall_slew(entity_system::entity arc)
const {
145 return m_fall_slews[m_tarcs.system().
lookup(arc)];
147 const LUT & timing_arc_rise_delay(entity_system::entity arc)
const {
148 return m_rise_delays[m_tarcs.system().
lookup(arc)];
150 const LUT & timing_arc_fall_delay(entity_system::entity arc)
const {
151 return m_fall_delays[m_tarcs.system().
lookup(arc)];
153 entity_system::entity timing_arc(entity_system::entity from, entity_system::entity to)
const {
154 return m_tarcs.get(from, to);
158 void timing_arc_timing_sense(entity_system::entity arc, unateness timing_sense);
159 unateness timing_arc_timing_sense(entity_system::entity arc)
const {
160 return m_timing_senses[m_tarcs.system().
lookup(arc)];
163 void timing_arc_timing_type(entity_system::entity arc, timing_arc_types type);
164 timing_arc_types timing_arc_timing_type(entity_system::entity arc)
const {
165 return m_timing_types[m_tarcs.system().
lookup(arc)];
169 entity_system::entity cell_create(std::string name);
170 entity_system::entity pin_create(entity_system::entity cell, std::string name);
173 void cell_sequential(entity_system::entity cell,
bool sequential);
175 bool cell_sequential(entity_system::entity cell)
const
179 void pin_clock_input(entity_system::entity pin,
bool clock_input);
181 bool pin_clock_input(entity_system::entity pin)
const {
const entity_system::entity_system & pin_system() const
Pin system getter.
Definition: standard_cells.h:179
Definition: library_timing_arcs.h:53
pin_directions pin_direction(entity_system::entity pin) const
Pin direction getter.
Definition: standard_cells.h:188
bool pin_clock_input(entity_system::entity pin) const
Pin clock input attribute getter.
Definition: standard_cells.h:197
Implementation of the vector property class.
Definition: vector_property.h:37
Definition: lookup_table.h:33
Standard cell class.
Definition: standard_cells.h:37
void cell_sequential(entity_system::entity cell, bool sequential)
Cell sequential attribute setter.
Definition: standard_cells.cpp:45
entity_index lookup(entity e) const
Gets the index of an entity.
Definition: entity_system.h:149