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.

How to fix setup timing violations for a design with high speed clock?

Status
Not open for further replies.

kurax

Newbie level 4
Joined
Mar 26, 2017
Messages
7
Helped
0
Reputation
0
Reaction score
0
Trophy points
1
Activity points
50
I have a design like this,

Code:
always @ (posedge X) begin
if (Y) begin
A_main <= 'b0;
A_x <= 'b0;
end else begin
A_main <= A_d;
A_x <= ^d;
end
end

assign A_copy = A_main;
assign A_d = d;
assign F1 = A_x ^ (^A_copy);
assign F2 = B_x ^ (^B_copy);

.
.
and so on

Here A_main and A_copy are 32 bit in size.
Code:
Z = F1 | F2 | F3 | F4;
Unfortunately the A_main, B_main, C_main, D_main, are placed far apart. This causes a long routing path to Z. Also the clock is 2GHz which cant be relaxed, so its hard to close timing.

What can I do to reduce setup timing violation? I am trying to add a F1_reg to pipeline it before oring. Will this work? Is there anything else I can do? The violations are around "-50" to "-100"ps.
 

Pipelining should help. You can add more than one stage if needed, and let the tools do retiming.
 

Thanks. But is there a way to do it without retiming?
 

Yes... write better code?
Even the example shows poorly written code. All those extra assigns are silly and serve no purpose, other than clutter up the code.
 

I have a design like this,

Code:
always @ (posedge X) begin
if (Y) begin
A_main <= 'b0;
A_x <= 'b0;
end else begin
A_main <= A_d;
A_x <= ^d;
end
end

assign A_copy = A_main;
assign A_d = d;
assign F1 = A_x ^ (^A_copy);
assign F2 = B_x ^ (^B_copy);

.
.
and so on

Here A_main and A_copy are 32 bit in size.
Code:
Z = F1 | F2 | F3 | F4;
Unfortunately the A_main, B_main, C_main, D_main, are placed far apart. This causes a long routing path to Z. Also the clock is 2GHz which cant be relaxed, so its hard to close timing.

What can I do to reduce setup timing violation? I am trying to add a F1_reg to pipeline it before oring. Will this work? Is there anything else I can do? The violations are around "-50" to "-100"ps.


1. Can you use higher metal layers for routing to reduce interconnect delay?
2. Pipeline.
3. Upsize cells.
4. Add buffers to reduces interconnect delay.
5. Add low Vt cells which are faster but more power hungry.

As in you have lot of options. Just use all the basics of reducing delay.
 

1. Can you use higher metal layers for routing to reduce interconnect delay?
2. Pipeline.
3. Upsize cells.
4. Add buffers to reduces interconnect delay.
5. Add low Vt cells which are faster but more power hungry.

As in you have lot of options. Just use all the basics of reducing delay.

Except for pipelining, all other optimizations are automatically performed. I doubt the OP would disable any of these options.

Reality of modern design is that you can't route wires across the entire chip. It doesn't work anymore, you can't overcome the wireload. There is a (very good) reason why folks started to look into NoCs and standard buses for SoCs.
 

Status
Not open for further replies.

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top