Skip to content

Commit d9c7b26

Browse files
[OpenSTA] Added Block Comments Explaining Change in Timing Model
1 parent e108b97 commit d9c7b26

File tree

1 file changed

+26
-0
lines changed

1 file changed

+26
-0
lines changed

vpr/src/base/netlist_writer.cpp

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1918,6 +1918,26 @@ class NetlistWriterVisitor : public NetlistVisitor {
19181918
// the maximum setup and hold constraints of all paths. To
19191919
// account for the internal delays of the black-box, we add
19201920
// port delays equal to the max/min path delays to registers.
1921+
//
1922+
// NOTE: Here we are implicitly changing the underlying timing
1923+
// model from how VTR normally represents the internals of
1924+
// primitives. In order to properly model the internals of
1925+
// primitives in the same was as VTR, the timing model must
1926+
// include internal timing nodes which are explicitly defined
1927+
// in the model. VTR implicitly creates these nodes, but leaves
1928+
// them unnamed. This causes issues when trying to use SDF
1929+
// files to annotate those nodes since the names are not
1930+
// guaranteed. Here, we simplify the timing model to act
1931+
// as if it is a single register-file, where all inputs
1932+
// which have timing arcs through registers have setup/
1933+
// hold delays and all outputs which have timing arcs
1934+
// through registers have clock to Q delays. This is
1935+
// a pessimistic model which is more stable for modeling
1936+
// purposes.
1937+
// Ideally we should strive to use the same timing model
1938+
// as VTR externally; however, we would need to specify
1939+
// the names of the internal nodes in the architecture
1940+
// description somehow or come up with a common convention.
19211941

19221942
// Maintain a mapping from [clock port ID][clock pin ID] -> max setup/hold time of this ipin.
19231943
std::unordered_map<AtomPortId, std::unordered_map<AtomPinId, std::pair<double, double>>> ipin_su_hld_time;
@@ -2044,6 +2064,12 @@ class NetlistWriterVisitor : public NetlistVisitor {
20442064
// the propagation delay. This tcq would need to be the min / max
20452065
// delay across all clocks with timing paths going through this
20462066
// output pin.
2067+
//
2068+
// NOTE: See the comment in the input ports processing. This
2069+
// code is implicitly changing the timing model from
2070+
// VTR's model which pretends that inputs and outputs
2071+
// act like registers, to a more explicit model where
2072+
// the entire primitive acts like a register.
20472073

20482074
// Maintain a mapping from [clock port ID][clock pin ID] -> min/max delay to this opin.
20492075
std::unordered_map<AtomPortId, std::unordered_map<AtomPinId, DelayTriple>> opin_total_cq_delays;

0 commit comments

Comments
 (0)