Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

[SOLVED] Fixing setup violations in RTL

Status
Not open for further replies.

biju4u90

Full Member level 3
Joined
Dec 10, 2014
Messages
172
Helped
3
Reputation
6
Reaction score
3
Trophy points
18
Activity points
1,437
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?
 

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?

Fixing timing violations in RTL generally means changing your design. As a designer you can come up with a different way that architecturally/functionally will yield same output but uses less qualifiers. This will reduce combinational logic in critical cone. Also you can move logic to previous or next pipe stage (obviously keeping in mind timing margin of prev/next stage and also maintaining functional equivalence). Adding pipestage just mean adding a flop in between. It will delay downstream logic by a clock but if architecture if ok with one clock delay then go for it.
 

Fixing timing violations in RTL generally means changing your design. As a designer you can come up with a different way that architecturally/functionally will yield same output but uses less qualifiers. This will reduce combinational logic in critical cone. Also you can move logic to previous or next pipe stage (obviously keeping in mind timing margin of prev/next stage and also maintaining functional equivalence). Adding pipestage just mean adding a flop in between. It will delay downstream logic by a clock but if architecture if ok with one clock delay then go for it.

The post above is a good general answer. Some other things to consider:
- hold is not a logic synthesis issue, it's a physical synthesis issue. There is no reason to change RTL to fix hold.
- P = A + B + C + D is equivalent to P = (A+B) + (C+D) . The tools will generate the same logic. What you need is pipelining. P1 <= A+B, P2 <= C+D, P <= P1 + P2.
- I don't understand how you plan to use double synchronizers and how that helps. I think it doesn't.
- You should give retiming a try.
 

3) Implimenting Pipelining - This could be a good option. But how tedious will it be to implement pipelining in an already existing design?
This process should be your try. See the reply above from ThisIsNotSam.
Why is this tedious?
The tool will exactly tell you where the failure occurs. So just go to the RTL and insert a pipeline stage there.


4) Using double syncronizer using flipflops - How can double synchronizer fix setup violations
This is used when your data is crossing over from one clock domain to another clock domain.
It does not help to fix violations.
 

P = A + B + C + D is equivalent to P = (A+B) + (C+D) . The tools will generate the same logic. What you need is pipelining. P1 <= A+B, P2 <= C+D, P <= P1 + P2.

In this case, we are delaying P by 1 clock cycle, right? Suppose this P is used at some other part of the design. Won't this break the existing logic? Or you mean to say that, while applying pipelining, we should be taking care of this situation also?

- - - Updated - - -

This process should be your try. See the reply above from ThisIsNotSam.
Why is this tedious?
The tool will exactly tell you where the failure occurs. So just go to the RTL and insert a pipeline stage there.

Please see my above comment. Won't this make inserting pipelining a tedious process in an existing design?
 

Yes it is tedious to add pipelining after the fact, that is why good designers think about the amount of logic they are building between pipeline stages when they intially design a module and seldom have to manually add more pipelining when they are nearing layout.
 

Suppose this P is used at some other part of the design. Won't this break the existing logic? Or you mean to say that, while applying pipelining, we should be taking care of this situation also?
Create a separate instance!
 

Status
Not open for further replies.

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top