cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Highlighted
Participant
Participant
8,221 Views
Registered: ‎09-11-2010

Technology Schematic increasing complexity for the same module

Jump to solution

I am using ISE 11.5 and I have a simple module which takes 4 inputs, two priorities and two positions.  The module returns the position with the highest priority.  This module is used to combine priorities from 64 instances of another module by using multiple levels.  First level has 32 instantiations, the second 16, 8, 4, 2, and finally 1.  If I look at the Technology viewer for levels one and two, I see what I would expect.  Basically the 4 inputs and two ouputs, but if I look at the viewer for the higher levels I see a much more complicated diagram.  The 6th level has 66 inputs and 4 - 5 times the number of components.  Since it is the same module in each case why does the Technology viewer show such a large difference in the components used.  I am nearing the capacity of chip so I am wondering if I am using more resouces than is neccessary.  The module does work as expected. 

 

Below is the code for the module.

 

Thanks for any help.

 

module Arbitrator(PriorityA, PositionA, PriorityB, PositionB, PriorityC, PositionC
    );

input [3:0] PriorityA;
input [5:0] PositionA;
input [3:0] PriorityB;
input [5:0] PositionB;
output [3:0] PriorityC;
output [5:0] PositionC;

// return the highest priority and its cooresponding position
assign PriorityC = (PriorityA >= PriorityB) ? PriorityA : PriorityB;
assign PositionC = (PriorityA >= PriorityB) ? PositionA : PositionB;
endmodule

0 Kudos
1 Solution

Accepted Solutions
Highlighted
Participant
Participant
15,812 Views
Registered: ‎09-11-2010

Thanks.  I had -keep_hierarcy = NO and Netlist_hierarcy = REBUILD.  When I changed keep_hierarcy to yes all of the instantiations look the same from an input/output perspective and have same utilization.

View solution in original post

0 Kudos
4 Replies
Highlighted
Moderator
Moderator
8,214 Views
Registered: ‎07-01-2015

Hi @tloesch,

 

What I can understand from your notes is :

say if 64 priorities and 64 positions are there then 32 instantiation of this module will give 32 priorities and 32 positions then it will be cascaded and in the next step 16 ,8 ,4, 2 and finally 1 priority and position will be the output.

 

But you are seeing a complex Technology schematic with high resource usage.

Please share the complete code here also the device and package used.

 

Thanks,
Arpan

Thanks,
Arpan
----------------------------------------------------------------------------------------------
Kindly note- Please mark the Answer as "Accept as solution" if information provided is helpful.

Give Kudos to a post which you think is helpful and reply oriented.
----------------------------------------------------------------------------------------------
0 Kudos
Highlighted
Participant
Participant
8,206 Views
Registered: ‎09-11-2010

Yes, that is correct.  I am working with a Spartian 6 - xc6slx45t-3fgg484.

 

Level 1 shows the 4 inputs and 2 outputs.

Level 2 shows 10 inputs and 2 outputs

level 3 shows 12 inputs and 2 outputs

level 4 shows 18 inputs and 5 outputs

level 5 shows 11 inputs and 2 outputs

level 6 shows 66 inputs and 2 outputs

 

Below are the instantiations

 

// Level 1 Arbitrators
Arbitrator Arb1AInst0 (.PriorityA(Arb1APri27),.PositionA(6'd27),.PriorityB(Arb1APri35), .PositionB(6'd35), .PriorityC(Arb2APri0), .PositionC(Arb2APos0));
Arbitrator Arb1AInst1 (.PriorityA(Arb1APri28),.PositionA(6'd28),.PriorityB(Arb1APri36), .PositionB(6'd36), .PriorityC(Arb2APri1), .PositionC(Arb2APos1));
Arbitrator Arb1AInst2 (.PriorityA(Arb1APri19),.PositionA(6'd19),.PriorityB(Arb1APri43), .PositionB(6'd43), .PriorityC(Arb2APri2), .PositionC(Arb2APos2));
Arbitrator Arb1AInst3 (.PriorityA(Arb1APri20),.PositionA(6'd20),.PriorityB(Arb1APri44), .PositionB(6'd44), .PriorityC(Arb2APri3), .PositionC(Arb2APos3));
Arbitrator Arb1AInst4 (.PriorityA(Arb1APri26),.PositionA(6'd26),.PriorityB(Arb1APri34), .PositionB(6'd34), .PriorityC(Arb2APri4), .PositionC(Arb2APos4));
Arbitrator Arb1AInst5 (.PriorityA(Arb1APri29),.PositionA(6'd29),.PriorityB(Arb1APri37), .PositionB(6'd37), .PriorityC(Arb2APri5), .PositionC(Arb2APos5));
Arbitrator Arb1AInst6 (.PriorityA(Arb1APri18),.PositionA(6'd18),.PriorityB(Arb1APri42), .PositionB(6'd42), .PriorityC(Arb2APri6), .PositionC(Arb2APos6));
Arbitrator Arb1AInst7 (.PriorityA(Arb1APri21),.PositionA(6'd21),.PriorityB(Arb1APri45), .PositionB(6'd45), .PriorityC(Arb2APri7), .PositionC(Arb2APos7));
Arbitrator Arb1AInst8 (.PriorityA(Arb1APri11),.PositionA(6'd11),.PriorityB(Arb1APri51), .PositionB(6'd51), .PriorityC(Arb2APri8), .PositionC(Arb2APos8));
Arbitrator Arb1AInst9 (.PriorityA(Arb1APri12),.PositionA(6'd12),.PriorityB(Arb1APri52), .PositionB(6'd52), .PriorityC(Arb2APri9), .PositionC(Arb2APos9));
Arbitrator Arb1AInst10 (.PriorityA(Arb1APri25),.PositionA(6'd25),.PriorityB(Arb1APri33), .PositionB(6'd33), .PriorityC(Arb2APri10), .PositionC(Arb2APos10));
Arbitrator Arb1AInst11 (.PriorityA(Arb1APri30),.PositionA(6'd30),.PriorityB(Arb1APri38), .PositionB(6'd38), .PriorityC(Arb2APri11), .PositionC(Arb2APos11));
Arbitrator Arb1AInst12 (.PriorityA(Arb1APri10),.PositionA(6'd10),.PriorityB(Arb1APri50), .PositionB(6'd50), .PriorityC(Arb2APri12), .PositionC(Arb2APos12));
Arbitrator Arb1AInst13 (.PriorityA(Arb1APri13),.PositionA(6'd13),.PriorityB(Arb1APri53), .PositionB(6'd53), .PriorityC(Arb2APri13), .PositionC(Arb2APos13));
Arbitrator Arb1AInst14 (.PriorityA(Arb1APri17),.PositionA(6'd17),.PriorityB(Arb1APri41), .PositionB(6'd41), .PriorityC(Arb2APri14), .PositionC(Arb2APos14));
Arbitrator Arb1AInst15 (.PriorityA(Arb1APri22),.PositionA(6'd22),.PriorityB(Arb1APri46), .PositionB(6'd46), .PriorityC(Arb2APri15), .PositionC(Arb2APos15));
Arbitrator Arb1AInst16 (.PriorityA(Arb1APri9),.PositionA(6'd9),.PriorityB(Arb1APri49), .PositionB(6'd49), .PriorityC(Arb2APri16), .PositionC(Arb2APos16));
Arbitrator Arb1AInst17 (.PriorityA(Arb1APri14),.PositionA(6'd14),.PriorityB(Arb1APri54), .PositionB(6'd54), .PriorityC(Arb2APri17), .PositionC(Arb2APos17));
Arbitrator Arb1AInst18 (.PriorityA(Arb1APri24),.PositionA(6'd24),.PriorityB(Arb1APri32), .PositionB(6'd32), .PriorityC(Arb2APri18), .PositionC(Arb2APos18));
Arbitrator Arb1AInst19 (.PriorityA(Arb1APri31),.PositionA(6'd31),.PriorityB(Arb1APri39), .PositionB(6'd39), .PriorityC(Arb2APri19), .PositionC(Arb2APos19));
Arbitrator Arb1AInst20 (.PriorityA(Arb1APri3),.PositionA(6'd3),.PriorityB(Arb1APri59), .PositionB(6'd59), .PriorityC(Arb2APri20), .PositionC(Arb2APos20));
Arbitrator Arb1AInst21 (.PriorityA(Arb1APri4),.PositionA(6'd4),.PriorityB(Arb1APri60), .PositionB(6'd60), .PriorityC(Arb2APri21), .PositionC(Arb2APos21));
Arbitrator Arb1AInst22 (.PriorityA(Arb1APri16),.PositionA(6'd16),.PriorityB(Arb1APri40), .PositionB(6'd40), .PriorityC(Arb2APri22), .PositionC(Arb2APos22));
Arbitrator Arb1AInst23 (.PriorityA(Arb1APri23),.PositionA(6'd23),.PriorityB(Arb1APri47), .PositionB(6'd47), .PriorityC(Arb2APri23), .PositionC(Arb2APos23));
Arbitrator Arb1AInst24 (.PriorityA(Arb1APri2),.PositionA(6'd2),.PriorityB(Arb1APri58), .PositionB(6'd58), .PriorityC(Arb2APri24), .PositionC(Arb2APos24));
Arbitrator Arb1AInst25 (.PriorityA(Arb1APri5),.PositionA(6'd5),.PriorityB(Arb1APri61), .PositionB(6'd61), .PriorityC(Arb2APri25), .PositionC(Arb2APos25));
Arbitrator Arb1AInst26 (.PriorityA(Arb1APri1),.PositionA(6'd1),.PriorityB(Arb1APri57), .PositionB(6'd57), .PriorityC(Arb2APri26), .PositionC(Arb2APos26));
Arbitrator Arb1AInst27 (.PriorityA(Arb1APri6),.PositionA(6'd6),.PriorityB(Arb1APri62), .PositionB(6'd62), .PriorityC(Arb2APri27), .PositionC(Arb2APos27));
Arbitrator Arb1AInst28 (.PriorityA(Arb1APri8),.PositionA(6'd8),.PriorityB(Arb1APri48), .PositionB(6'd48), .PriorityC(Arb2APri28), .PositionC(Arb2APos28));
Arbitrator Arb1AInst29 (.PriorityA(Arb1APri15),.PositionA(6'd15),.PriorityB(Arb1APri55), .PositionB(6'd55), .PriorityC(Arb2APri29), .PositionC(Arb2APos29));
Arbitrator Arb1AInst30 (.PriorityA(Arb1APri0),.PositionA(6'd0),.PriorityB(Arb1APri56), .PositionB(6'd56), .PriorityC(Arb2APri30), .PositionC(Arb2APos30));
Arbitrator Arb1AInst31 (.PriorityA(Arb1APri7),.PositionA(6'd7),.PriorityB(Arb1APri63), .PositionB(6'd63), .PriorityC(Arb2APri31), .PositionC(Arb2APos31));

// Level 2 Arbitrators
Arbitrator Arb2AInst0 (.PriorityA(Arb2APri0),.PositionA(Arb2APos0),.PriorityB(Arb2APri1), .PositionB(Arb2APos1), .PriorityC(Arb3APri0), .PositionC(Arb3APos0));
Arbitrator Arb2AInst1 (.PriorityA(Arb2APri2),.PositionA(Arb2APos2),.PriorityB(Arb2APri3), .PositionB(Arb2APos3), .PriorityC(Arb3APri1), .PositionC(Arb3APos1));
Arbitrator Arb2AInst2 (.PriorityA(Arb2APri4),.PositionA(Arb2APos4),.PriorityB(Arb2APri5), .PositionB(Arb2APos5), .PriorityC(Arb3APri2), .PositionC(Arb3APos2));
Arbitrator Arb2AInst3 (.PriorityA(Arb2APri6),.PositionA(Arb2APos6),.PriorityB(Arb2APri7), .PositionB(Arb2APos7), .PriorityC(Arb3APri3), .PositionC(Arb3APos3));
Arbitrator Arb2AInst4 (.PriorityA(Arb2APri8),.PositionA(Arb2APos8),.PriorityB(Arb2APri9), .PositionB(Arb2APos9), .PriorityC(Arb3APri4), .PositionC(Arb3APos4));
Arbitrator Arb2AInst5 (.PriorityA(Arb2APri10),.PositionA(Arb2APos10),.PriorityB(Arb2APri11), .PositionB(Arb2APos11), .PriorityC(Arb3APri5), .PositionC(Arb3APos5));
Arbitrator Arb2AInst6 (.PriorityA(Arb2APri12),.PositionA(Arb2APos12),.PriorityB(Arb2APri13), .PositionB(Arb2APos13), .PriorityC(Arb3APri6), .PositionC(Arb3APos6));
Arbitrator Arb2AInst7 (.PriorityA(Arb2APri14),.PositionA(Arb2APos14),.PriorityB(Arb2APri15), .PositionB(Arb2APos15), .PriorityC(Arb3APri7), .PositionC(Arb3APos7));
Arbitrator Arb2AInst8 (.PriorityA(Arb2APri16),.PositionA(Arb2APos16),.PriorityB(Arb2APri17), .PositionB(Arb2APos17), .PriorityC(Arb3APri8), .PositionC(Arb3APos8));
Arbitrator Arb2AInst9 (.PriorityA(Arb2APri18),.PositionA(Arb2APos18),.PriorityB(Arb2APri19), .PositionB(Arb2APos19), .PriorityC(Arb3APri9), .PositionC(Arb3APos9));
Arbitrator Arb2AInst10 (.PriorityA(Arb2APri20),.PositionA(Arb2APos20),.PriorityB(Arb2APri21), .PositionB(Arb2APos21), .PriorityC(Arb3APri10), .PositionC(Arb3APos10));
Arbitrator Arb2AInst11 (.PriorityA(Arb2APri22),.PositionA(Arb2APos22),.PriorityB(Arb2APri23), .PositionB(Arb2APos23), .PriorityC(Arb3APri11), .PositionC(Arb3APos11));
Arbitrator Arb2AInst12 (.PriorityA(Arb2APri24),.PositionA(Arb2APos24),.PriorityB(Arb2APri25), .PositionB(Arb2APos25), .PriorityC(Arb3APri12), .PositionC(Arb3APos12));
Arbitrator Arb2AInst13 (.PriorityA(Arb2APri26),.PositionA(Arb2APos26),.PriorityB(Arb2APri27), .PositionB(Arb2APos27), .PriorityC(Arb3APri13), .PositionC(Arb3APos13));
Arbitrator Arb2AInst14 (.PriorityA(Arb2APri28),.PositionA(Arb2APos28),.PriorityB(Arb2APri29), .PositionB(Arb2APos29), .PriorityC(Arb3APri14), .PositionC(Arb3APos14));
Arbitrator Arb2AInst15 (.PriorityA(Arb2APri30),.PositionA(Arb2APos30),.PriorityB(Arb2APri31), .PositionB(Arb2APos31), .PriorityC(Arb3APri15), .PositionC(Arb3APos15));

// Level 3 Arbitrators
Arbitrator Arb3AInst0 (.PriorityA(Arb3APri0),.PositionA(Arb3APos0),.PriorityB(Arb3APri1), .PositionB(Arb3APos1), .PriorityC(Arb4APri0), .PositionC(Arb4APos0));
Arbitrator Arb3AInst1 (.PriorityA(Arb3APri2),.PositionA(Arb3APos2),.PriorityB(Arb3APri3), .PositionB(Arb3APos3), .PriorityC(Arb4APri1), .PositionC(Arb4APos1));
Arbitrator Arb3AInst2 (.PriorityA(Arb3APri4),.PositionA(Arb3APos4),.PriorityB(Arb3APri5), .PositionB(Arb3APos5), .PriorityC(Arb4APri2), .PositionC(Arb4APos2));
Arbitrator Arb3AInst3 (.PriorityA(Arb3APri6),.PositionA(Arb3APos6),.PriorityB(Arb3APri7), .PositionB(Arb3APos7), .PriorityC(Arb4APri3), .PositionC(Arb4APos3));
Arbitrator Arb3AInst4 (.PriorityA(Arb3APri8),.PositionA(Arb3APos8),.PriorityB(Arb3APri9), .PositionB(Arb3APos9), .PriorityC(Arb4APri4), .PositionC(Arb4APos4));
Arbitrator Arb3AInst5 (.PriorityA(Arb3APri10),.PositionA(Arb3APos10),.PriorityB(Arb3APri11), .PositionB(Arb3APos11), .PriorityC(Arb4APri5), .PositionC(Arb4APos5));
Arbitrator Arb3AInst6 (.PriorityA(Arb3APri12),.PositionA(Arb3APos12),.PriorityB(Arb3APri13), .PositionB(Arb3APos13), .PriorityC(Arb4APri6), .PositionC(Arb4APos6));
Arbitrator Arb3AInst7 (.PriorityA(Arb3APri14),.PositionA(Arb3APos14),.PriorityB(Arb3APri15), .PositionB(Arb3APos15), .PriorityC(Arb4APri7), .PositionC(Arb4APos7));

// Level 4 Arbitrators
Arbitrator Arb4AInst0 (.PriorityA(Arb4APri0),.PositionA(Arb4APos0),.PriorityB(Arb4APri1), .PositionB(Arb4APos1), .PriorityC(Arb5APri0), .PositionC(Arb5APos0));
Arbitrator Arb4AInst1 (.PriorityA(Arb4APri2),.PositionA(Arb4APos2),.PriorityB(Arb4APri3), .PositionB(Arb4APos3), .PriorityC(Arb5APri1), .PositionC(Arb5APos1));
Arbitrator Arb4AInst2 (.PriorityA(Arb4APri4),.PositionA(Arb4APos4),.PriorityB(Arb4APri5), .PositionB(Arb4APos5), .PriorityC(Arb5APri2), .PositionC(Arb5APos2));
Arbitrator Arb4AInst3 (.PriorityA(Arb4APri6),.PositionA(Arb4APos6),.PriorityB(Arb4APri7), .PositionB(Arb4APos7), .PriorityC(Arb5APri3), .PositionC(Arb5APos3));

// level 5 Arbitrators
Arbitrator Arb5AInst0 (.PriorityA(Arb5APri0),.PositionA(Arb5APos0),.PriorityB(Arb5APri1), .PositionB(Arb5APos1), .PriorityC(Arb6APri0), .PositionC(Arb6APos0));
Arbitrator Arb5AInst1 (.PriorityA(Arb5APri2),.PositionA(Arb5APos2),.PriorityB(Arb5APri3), .PositionB(Arb5APos3), .PriorityC(Arb6APri1), .PositionC(Arb6APos1));

// Level 6 Arbitrators
Arbitrator Arb6AInst0 (.PriorityA(Arb6APri0),.PositionA(Arb6APos0),.PriorityB(Arb6APri1), .PositionB(Arb6APos1), .PriorityC(Arb7APri0), .PositionC(Arb7APos0));

0 Kudos
Highlighted
Moderator
Moderator
8,185 Views
Registered: ‎07-21-2014

@tloesch

 

What are the settings did you use for synthesis run? Try to set -keep_hierarchy to "yes" and check the utilization.

It would be better if you can share your project or small testcase.

 

Thanks,
Anusheel
-----------------------------------------------------------------------------------------------
Search for documents/answer records related to your device and tool before posting query on forums.
Search related forums and make sure your query is not repeated.

Please mark the post as an answer "Accept as solution" in case it helps to resolve your query.
Helpful answer -> Give Kudos
-----------------------------------------------------------------------------------------------

 

0 Kudos
Highlighted
Participant
Participant
15,813 Views
Registered: ‎09-11-2010

Thanks.  I had -keep_hierarcy = NO and Netlist_hierarcy = REBUILD.  When I changed keep_hierarcy to yes all of the instantiations look the same from an input/output perspective and have same utilization.

View solution in original post

0 Kudos