cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
devik
Visitor
Visitor
3,133 Views
Registered: ‎02-05-2010

BUG in PAR 12.1 when counting max side-BUF fanout

Hello,

 

I discovered interesting bug. I test on Spartan 3S200A in QFP100. When I instantiate 27 output

IOB FFs clocked via side BUFGMUX then PAR fails with ERROR:Place:1047.

It is ok because QFP100 has about 26 usable IO PINs in this half of device and PAR probably checks

it.

BUT, when I use only 16 pins AND use both input and output IOB FFs it fails too ! It seems

that PAR incorrectly checks no of used IO clocks, not IO pad sites. Thus it refuses this perfectly

valid configuration.

 

There are two workarounds. First, use top BUFGMUX - it actually uses the same clock spine, only

PAR doesn't check IO pad count. The problem is about 2ns non-deterministic delay from side clock

input to top bufg site. Thus unusable for hi-perf design.

 

Other is to use two side BUFGMUXed and two clock trees - one for input FF other for output one.

Of course it is waste of resources but .. it works.

 

Any idea from an insider how to disable this check ?

This code shows the bug (synth for xc3s200a-5-vq100) :

 

`define W 14
`define W1 (`W-1)
module main(input clk,inout [`W1:0] dbus);
        (* LOC = "BUFGMUX_X3Y5" *)
        BUFG buf1(clk1,clk);
        reg [1:0] cnt;
        (* IOB = "FORCE" *)
        reg [`W1:0] do,di;
        always @(posedge clk1) begin
                di <= dbus; do <= {`W{cnt[0]}};
                cnt <= cnt+(^di);
        end
        assign dbus = cnt[1] ? do : `W'bz;
endmodule

0 Kudos
2 Replies
gszakacs
Instructor
Instructor
3,117 Views
Registered: ‎08-14-2007

Have you tried locking down the pins before running the design through Map and P&R?

I would think the check would only get confused about pin count if it had the ability to

place the pins itself.

 

-- Gabor

-- Gabor
0 Kudos
devik
Visitor
Visitor
3,114 Views
Registered: ‎02-05-2010

Yes, in the complete design all pins are locked. I omited it in the example to keep it simple.

I also tried to lock BUFGMUXes.

I guess PAR code sums all clock line loads whose belongs to an IO site and they

forgot to use kind of "set" container keyed on IOB identification...

 

Martin

0 Kudos