honeyxyb
Member level 2
Hi , all:
I put forward a new idea about how to fix hold timing violations, anyone
intresting in this field pls give some points, thanks.
OK,in normal case , we synthesis the RTL code in DC, in the synthesis envirnment , we don't care hold time violations. then we do place & route in
backend tools, and fix setup time violations , after fix setup time violations, we
begin fix hold timing violations, but i found , when fix hold timing violations, the backend tools basicly insert buffer in the front of the end_point DFF in one path,
so , the buffers inserted by backend tools are very much, this will result in some
disadvantages:
a. extra power waste;
b. more area waste;
c. maybe destroy setup timing path
d. if uitilization of die is high, will induce fail place&route
Then how to reduce the inserted buffers is critical!
Typically, if one path exists hold timing violation, the data path level will
not be too deep. but we should not insert the buffer too closely to the end point DFF, if we can find one common cell, which induce hold timing violation, it's bottle
neck cell, then we insert buffer after the bottleneck cell, this will fix all hold timing violations after the bottleneck cell, and this way will save many buffer.
I think we can do it in primetime , by script , we search the bottleneck cell, and try to insert buffer, if the changes can fix hold violations , tell backend tools where to insert buffer.
The remaining work is how to write script to search the bottleck cell.
I put forward a new idea about how to fix hold timing violations, anyone
intresting in this field pls give some points, thanks.
OK,in normal case , we synthesis the RTL code in DC, in the synthesis envirnment , we don't care hold time violations. then we do place & route in
backend tools, and fix setup time violations , after fix setup time violations, we
begin fix hold timing violations, but i found , when fix hold timing violations, the backend tools basicly insert buffer in the front of the end_point DFF in one path,
so , the buffers inserted by backend tools are very much, this will result in some
disadvantages:
a. extra power waste;
b. more area waste;
c. maybe destroy setup timing path
d. if uitilization of die is high, will induce fail place&route
Then how to reduce the inserted buffers is critical!
Typically, if one path exists hold timing violation, the data path level will
not be too deep. but we should not insert the buffer too closely to the end point DFF, if we can find one common cell, which induce hold timing violation, it's bottle
neck cell, then we insert buffer after the bottleneck cell, this will fix all hold timing violations after the bottleneck cell, and this way will save many buffer.
I think we can do it in primetime , by script , we search the bottleneck cell, and try to insert buffer, if the changes can fix hold violations , tell backend tools where to insert buffer.
The remaining work is how to write script to search the bottleck cell.