biju4u90
Full Member level 3
There are many posts that deal with setup and hold violations and their fixing in backend stages. Suppose that the initial synthesis itself gives setup and hold violations. What are the possible methods to fix them in RTL?
I could find following suggestions in some of the posts. But how practical are these methods in implementation?
1) Reducing combinational logic delay by minimising the number of logic levels - How is it possible to minimize the number of logic levels without much design changes?
2) splitting the combinational logic - Does this mean that P = A + B + C + D may be redesigned as P = (A+B) + (C+D)? If yes, won't the tool do these sort of optimizations while synthesis?
3) Implimenting Pipelining - This could be a good option. But how tedious will it be to implement pipelining in an already existing design?
4) Using double syncronizer using flipflops - How can double synchronizer fix setup violations?
I could find following suggestions in some of the posts. But how practical are these methods in implementation?
1) Reducing combinational logic delay by minimising the number of logic levels - How is it possible to minimize the number of logic levels without much design changes?
2) splitting the combinational logic - Does this mean that P = A + B + C + D may be redesigned as P = (A+B) + (C+D)? If yes, won't the tool do these sort of optimizations while synthesis?
3) Implimenting Pipelining - This could be a good option. But how tedious will it be to implement pipelining in an already existing design?
4) Using double syncronizer using flipflops - How can double synchronizer fix setup violations?