@@ -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