- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic to the Top
- Bookmark
- Subscribe
- Printer Friendly Page
RLOC constraint s to specify range
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
04-14-2012 12:20 PM
Hello,
My design includes several instances of a component that performs some calculations on a pair of inputs.
The component is called AngleMassCalc. I use a nested for...generate statements to instantiate the the AngleMassCalcs
Each of these components includes 5 DSP48s and a (hefty) bunch of other logic. When I try to constrain the clock to relatively high frequency (320 MHz) the timing is not satisfied. Looking at the FPGA editor it's clear why - some of the components are placed rather far away causing the large route delays. I would like then to constrain the multipliers to be placed in what seems the most logical close placements (based on how the calculations are related to one another) and also all other logic to be placed close by. I don't want to constrain how the logic is placed exactly in relation to the multipliers or where exactly on the chip - all I care is that it's placed 'close by' . It seems to me that the most apropriate way to accomplish this is to create RLOC constraints.
To constrain the multipliers I think I should do something like this:
INST “gen_outer*gen_inner*AngleMassCalc/*” RPM_GRID = GRID INST "gen_outer[1].gen_inner[2].inst_AngleMassCalc/Mmult_etAetB" RLOC=X0Y0; INST "gen_outer[1].gen_inner[2].inst_AngleMassCalc/Mmul t_GND_7_o_OneTwoEight_CosDphi[8]_MuLt_42_OUT" RLOC=X0Y-5; INST "gen_outer[1].gen_inner[2].inst_AngleMassCalc/Madd sub_etAetB_reg_reg[19]_OneTwoEight_CoshDEta[13]_Mu Lt_43_OUT" RLOC=X0Y5; INST "gen_outer[1].gen_inner[2].inst_AngleMassCalc/Mmul t_dPhi_reg[5]_dPhi_reg[5]_MuLt_58_OUT" RLOC=X0Y10; INST "gen_outer[1].gen_inner[2].inst_AngleMassCalc/Mmul t_dEta_reg[5]_dEta_reg[5]_MuLt_59_OUT" RLOC=X0Y15; INST "gen_outer[0].gen_inner[2].inst_AngleMassCalc/Mmul t_etAetB" RLOC=X0Y0; INST "gen_outer[0].gen_inner[2].inst_AngleMassCalc/Mmul t_GND_7_o_OneTwoEight_CosDphi[8]_MuLt_42_OUT" RLOC=X0Y-5; INST "gen_outer[0].gen_inner[2].inst_AngleMassCalc/Madd sub_etAetB_reg_reg[19]_OneTwoEight_CoshDEta[13]_Mu Lt_43_OUT" RLOC=X0Y5; INST "gen_outer[0].gen_inner[2].inst_AngleMassCalc/Mmul t_dPhi_reg[5]_dPhi_reg[5]_MuLt_58_OUT" RLOC=X0Y10; INST "gen_outer[0].gen_inner[2].inst_AngleMassCalc/Mmul t_dEta_reg[5]_dEta_reg[5]_MuLt_59_OUT" RLOC=X0Y15; INST "gen_outer[0].gen_inner[1].inst_AngleMassCalc/Mmul t_etAetB" RLOC=X0Y0; INST "gen_outer[0].gen_inner[1].inst_AngleMassCalc/Mmul t_GND_7_o_OneTwoEight_CosDphi[8]_MuLt_42_OUT" RLOC=X0Y-5; INST "gen_outer[0].gen_inner[1].inst_AngleMassCalc/Madd sub_etAetB_reg_reg[19]_OneTwoEight_CoshDEta[13]_Mu Lt_43_OUT" RLOC=X0Y5; INST "gen_outer[0].gen_inner[1].inst_AngleMassCalc/Mmul t_dPhi_reg[5]_dPhi_reg[5]_MuLt_58_OUT" RLOC=X0Y10; INST "gen_outer[0].gen_inner[1].inst_AngleMassCalc/Mmul t_dEta_reg[5]_dEta_reg[5]_MuLt_59_OUT" RLOC=X0Y15;
As I understand every component belonging to gen_outer[1].gen_inner[2].inst_AngleMassCalc/ will be in the same H_SET but in distinct H_SET from e.g. gen_outer[0].gen_inner[1].inst_AngleMassCalc/ components - is that correct?
How do I accomplish the second part of the problem - i.e. constraining the other components to lie within some rectangle from Mmult_etAetB, but without specifying placement of each exactly? Something like AREA_GROUP RANGE constraint seems apropriate but I want a relative constraint. RLOC_RANGE does not seem apropriate since according to the constraints ug it specifies the absolute location on the die. Any ideas?
Thank you,
Wojtek
Re: RLOC constraint s to specify range
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
04-15-2012 10:05 AM
Yes, the instances with HU_SET (not H_SET) properties will create seperate RPMs but only for the instances with RLOC properties applied. The seperate RPMs can be merged if there is an RLOC on every hierarchy above them up to a common hierarchy.
The RPM Grid property only needs to be assigned to one instance of the macro to define the grid system used. The wildcard constraint you are using isn't necessary but probably does no harm.
There is no relative range constraint. The RPM logic can be assigned to an area group the same as other logic and you can mix RPM logic with non-RPM logic in the same area group and then the area group can be range constrained.
Re: RLOC constraint s to specify range
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
04-16-2012 03:03 AM
Hello,
So the wildcard causes a syntax error for translate - I removed the line and converted the coordinates.
I have further questions...
I don't understand why the components in each group are not already members of separate H_SETs.
As I understand it they should be on the same 'level' in the hierarchy tree but in different 'branches' - where is my misunderstanding?
If I run map with the ucf as before (just converting the coordinates) I get an error stating that two elements have to be packed into a single component - which leads me to believe that they are somehow within the same H_SET...
When I declare the components to be members of a separate HU_SETs like this:
INST "gen_outer[1].gen_inner[2].inst_AngleMassCalc/Mmult_etAetB" HU_SET=hu_g12; INST "gen_outer[1].gen_inner[2].inst_AngleMassCalc/Mmul t_etAetB" RLOC=X0Y0; INST "gen_outer[1].gen_inner[2].inst_AngleMassCalc/Mmul t_GND_7_o_OneTwoEight_CosDphi[8]_MuLt_42_OUT" HU_SET=hu_g12; INST "gen_outer[1].gen_inner[2].inst_AngleMassCalc/Mmul t_GND_7_o_OneTwoEight_CosDphi[8]_MuLt_42_OUT" RLOC=X0Y-1; INST "gen_outer[1].gen_inner[2].inst_AngleMassCalc/Madd sub_etAetB_reg_reg[19]_OneTwoEight_CoshDEta[13]_Mu Lt_43_OUT" HU_SET=hu_g12; INST "gen_outer[1].gen_inner[2].inst_AngleMassCalc/Madd sub_etAetB_reg_reg[19]_OneTwoEight_CoshDEta[13]_Mu Lt_43_OUT" RLOC=X0Y1; INST "gen_outer[1].gen_inner[2].inst_AngleMassCalc/Mmul t_dPhi_reg[5]_dPhi_reg[5]_MuLt_58_OUT" HU_SET=hu_g12; INST "gen_outer[1].gen_inner[2].inst_AngleMassCalc/Mmul t_dPhi_reg[5]_dPhi_reg[5]_MuLt_58_OUT" RLOC=X0Y2; INST "gen_outer[1].gen_inner[2].inst_AngleMassCalc/Mmul t_dEta_reg[5]_dEta_reg[5]_MuLt_59_OUT" HU_SET=hu_g12; INST "gen_outer[1].gen_inner[2].inst_AngleMassCalc/Mmul t_dEta_reg[5]_dEta_reg[5]_MuLt_59_OUT" RLOC=X0Y3; INST "gen_outer[0].gen_inner[2].inst_AngleMassCalc/Mmul t_etAetB" HU_SET=hu_g02; INST "gen_outer[0].gen_inner[2].inst_AngleMassCalc/Mmul t_etAetB" RLOC=X0Y0; INST "gen_outer[0].gen_inner[2].inst_AngleMassCalc/Mmul t_GND_7_o_OneTwoEight_CosDphi[8]_MuLt_42_OUT" HU_SET=hu_g02; INST "gen_outer[0].gen_inner[2].inst_AngleMassCalc/Mmul t_GND_7_o_OneTwoEight_CosDphi[8]_MuLt_42_OUT" RLOC=X0Y-1; INST "gen_outer[0].gen_inner[2].inst_AngleMassCalc/Madd sub_etAetB_reg_reg[19]_OneTwoEight_CoshDEta[13]_Mu Lt_43_OUT" HU_SET=hu_g02; INST "gen_outer[0].gen_inner[2].inst_AngleMassCalc/Madd sub_etAetB_reg_reg[19]_OneTwoEight_CoshDEta[13]_Mu Lt_43_OUT" RLOC=X0Y1; INST "gen_outer[0].gen_inner[2].inst_AngleMassCalc/Mmul t_dPhi_reg[5]_dPhi_reg[5]_MuLt_58_OUT" HU_SET=hu_g02; INST "gen_outer[0].gen_inner[2].inst_AngleMassCalc/Mmul t_dPhi_reg[5]_dPhi_reg[5]_MuLt_58_OUT" RLOC=X0Y2; INST "gen_outer[0].gen_inner[2].inst_AngleMassCalc/Mmul t_dEta_reg[5]_dEta_reg[5]_MuLt_59_OUT" HU_SET=hu_g02; INST "gen_outer[0].gen_inner[2].inst_AngleMassCalc/Mmul t_dEta_reg[5]_dEta_reg[5]_MuLt_59_OUT" RLOC=X0Y3; INST "gen_outer[0].gen_inner[1].inst_AngleMassCalc/Mmul t_etAetB" HU_SET=hu_g01; INST "gen_outer[0].gen_inner[1].inst_AngleMassCalc/Mmul t_etAetB" RLOC=X0Y0; INST "gen_outer[0].gen_inner[1].inst_AngleMassCalc/Mmul t_GND_7_o_OneTwoEight_CosDphi[8]_MuLt_42_OUT" HU_SET=hu_g01; INST "gen_outer[0].gen_inner[1].inst_AngleMassCalc/Mmul t_GND_7_o_OneTwoEight_CosDphi[8]_MuLt_42_OUT" RLOC=X0Y-1; INST "gen_outer[0].gen_inner[1].inst_AngleMassCalc/Madd sub_etAetB_reg_reg[19]_OneTwoEight_CoshDEta[13]_Mu Lt_43_OUT" HU_SET=hu_g01; INST "gen_outer[0].gen_inner[1].inst_AngleMassCalc/Madd sub_etAetB_reg_reg[19]_OneTwoEight_CoshDEta[13]_Mu Lt_43_OUT" RLOC=X0Y1; INST "gen_outer[0].gen_inner[1].inst_AngleMassCalc/Mmul t_dPhi_reg[5]_dPhi_reg[5]_MuLt_58_OUT" HU_SET=hu_g01; INST "gen_outer[0].gen_inner[1].inst_AngleMassCalc/Mmul t_dPhi_reg[5]_dPhi_reg[5]_MuLt_58_OUT" RLOC=X0Y2; INST "gen_outer[0].gen_inner[1].inst_AngleMassCalc/Mmul t_dEta_reg[5]_dEta_reg[5]_MuLt_59_OUT" HU_SET=hu_g01; INST "gen_outer[0].gen_inner[1].inst_AngleMassCalc/Mmul t_dEta_reg[5]_dEta_reg[5]_MuLt_59_OUT" RLOC=X0Y3;
I get thte following errors (in map) which I have trouble parsing:
Phase 1.1 Initial Placement Analysis
ERROR:Place:346 - The components related to The RPM "sizetest_top/hu_g01" can
not be placed in the required relative placement form
The following components are part of this structure:
DSP48E1
gen_outer[0].gen_inner[1].inst_AngleMassCalc/Mmult
Lt_59_OUT 0 4
DSP48E1
gen_outer[0].gen_inner[1].inst_AngleMassCalc/Madds
oEight_CoshDEta[13]_MuLt_43_OUT 0 2
DSP48E1 gen_outer[0].gen_inner[1].inst_AngleMassCalc/Mmult
DSP48E1
gen_outer[0].gen_inner[1].inst_AngleMassCalc/Mmult
i[8]_MuLt_42_OUT 0 0
DSP48E1
gen_outer[0].gen_inner[1].inst_AngleMassCalc/Mmult
Lt_58_OUT 0 3
The reason for this issue is the following:
The component
gen_outer[0].gen_inner[1].inst_AngleMassCalc/Mmult
i[8]_MuLt_42_OUT is already contained in an RPM that will not allow the logic
to be placed in this relative form.
ERROR:Place:346 - The components related to The RPM "sizetest_top/hu_g02" can
not be placed in the required relative placement form
The following components are part of this structure:
DSP48E1
gen_outer[0].gen_inner[2].inst_AngleMassCalc/Mmult
Lt_59_OUT 0 4
DSP48E1
gen_outer[0].gen_inner[2].inst_AngleMassCalc/Madds
oEight_CoshDEta[13]_MuLt_43_OUT 0 2
DSP48E1 gen_outer[0].gen_inner[2].inst_AngleMassCalc/Mmult
DSP48E1
gen_outer[0].gen_inner[2].inst_AngleMassCalc/Mmult
i[8]_MuLt_42_OUT 0 0
DSP48E1
gen_outer[0].gen_inner[2].inst_AngleMassCalc/Mmult
Lt_58_OUT 0 3
The reason for this issue is the following:
The component
gen_outer[0].gen_inner[2].inst_AngleMassCalc/Mmult
i[8]_MuLt_42_OUT is already contained in an RPM that will not allow the logic
to be placed in this relative form.
ERROR:Place:346 - The components related to The RPM "sizetest_top/hu_g12" can
not be placed in the required relative placement form
The following components are part of this structure:
DSP48E1
gen_outer[1].gen_inner[2].inst_AngleMassCalc/Mmult
Lt_59_OUT 0 4
DSP48E1
gen_outer[1].gen_inner[2].inst_AngleMassCalc/Madds
oEight_CoshDEta[13]_MuLt_43_OUT 0 2
DSP48E1 gen_outer[1].gen_inner[2].inst_AngleMassCalc/Mmult
DSP48E1
gen_outer[1].gen_inner[2].inst_AngleMassCalc/Mmult
i[8]_MuLt_42_OUT 0 0
DSP48E1
gen_outer[1].gen_inner[2].inst_AngleMassCalc/Mmult
Lt_58_OUT 0 3
The reason for this issue is the following:
The component
gen_outer[1].gen_inner[2].inst_AngleMassCalc/Mmult
i[8]_MuLt_42_OUT is already contained in an RPM that will not allow the logic
to be placed in this relative form.
Phase 1.1 Initial Placement Analysis (Checksum:1dc649) REAL time: 2 mins 32 secs
ERROR:Pack:1654 - The timing-driven placement phase encountered an error.
Mapping completed.
See MAP report file "sizetest_top_map.mrp" for details.
Problem encountered during the packing phase.
Design Summary
--------------
Number of errors : 4
Number of warnings : 0
Process "Map" failed
WARNING:ProjectMgmt - File /home/wfedorko/L1Calo/sizetest/sizetest_top_map.nc
where am I going wrong?
Thanks,
Wojtek
Re: RLOC constraint s to specify range
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
04-16-2012 08:38 AM
If the instances are in different branches of the hierarchy then they will only be in the same macro if the are tied together with RLOC constraints on the parent hierarchies. Maybe the netlist is flat and they aren't really in seperate hierarchies?











