- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic to the Top
- Bookmark
- Subscribe
- Printer Friendly Page
Xilinx RLOC fails mapping
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
03-17-2012 09:00 AM
Hi all,
I try to create a two level mux which contains two wide muxes. Each wide mux has 8 2-to-1 muxes which share the same select signals. Since I can use RLOC to pack one wide mux (= 8 2-to-1 muxes) which share the select signal into one Virtex-5 slice. I want to pack these two wide muxes into 2 slices. But the following code gives me a map error: ERROR:Pack:679 - Unable to obey design constraints (MACRONAME=hset, RLOC=X2Y2)
Anyone know how to solve this?
module mux_8(a, c, d, sel, o);
input [7:0] a;
input [7:0] d;
input [7:0] c;
input [1:0] sel;
output [7:0] o;
wire [7:0] b;
(* RLOC = "X0Y0" *)
mux mux_0(.a(a[0]), .b(b[0]), .sel(sel[0]), .o(o[0]));
(* RLOC = "X0Y0" *)
mux mux_1(.a(a[1]), .b(b[1]), .sel(sel[0]), .o(o[1]));
(* RLOC = "X0Y0" *)
mux mux_2(.a(a[2]), .b(b[2]), .sel(sel[0]), .o(o[2]));
(* RLOC = "X0Y0" *)
mux mux_3(.a(a[3]), .b(b[3]), .sel(sel[0]), .o(o[3]));
(* RLOC = "X0Y0" *)
mux mux_4(.a(a[4]), .b(b[4]), .sel(sel[0]), .o(o[4]));
(* RLOC = "X0Y0" *)
mux mux_5(.a(a[5]), .b(b[5]), .sel(sel[0]), .o(o[5]));
(* RLOC = "X0Y0" *)
mux mux_6(.a(a[6]), .b(b[6]), .sel(sel[0]), .o(o[6]));
(* RLOC = "X0Y0" *)
mux mux_7(.a(a[7]), .b(b[7]), .sel(sel[0]), .o(o[7]));
(* RLOC = "X2Y2" *)
mux mux_8 (.a(c[0]), .b(d[0]), .sel(sel[1]), .o(b[0]));
(* RLOC = "X2Y2" *)
mux mux_9 (.a(c[1]), .b(d[1]), .sel(sel[1]), .o(b[1]));
(* RLOC = "X2Y2" *)
mux mux_10(.a(c[2]), .b(d[2]), .sel(sel[1]), .o(b[2]));
(* RLOC = "X2Y2" *)
mux mux_11(.a(c[3]), .b(d[3]), .sel(sel[1]), .o(b[3]));
(* RLOC = "X2Y2" *)
mux mux_12(.a(c[4]), .b(d[4]), .sel(sel[1]), .o(b[4]));
(* RLOC = "X2Y2" *)
mux mux_13(.a(c[5]), .b(d[5]), .sel(sel[1]), .o(b[5]));
(* RLOC = "X2Y2" *)
mux mux_14(.a(c[6]), .b(d[6]), .sel(sel[1]), .o(b[6]));
(* RLOC = "X2Y2" *)
mux mux_15(.a(c[7]), .b(d[7]), .sel(sel[1]), .o(b[7]));
endmodule
(* LUT_MAP = "yes" *)
module mux(a, b, sel, o);
input a;
input b;
input sel;
output o;
assign o = (~sel & a) | (sel & b);
endmodule
Re: Xilinx RLOC fails mapping
[ Edited ]- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
03-17-2012 09:44 AM - edited 03-17-2012 09:48 AM
You didn't post the entire Pack:679 error. Besides listing the constraint involved, it also lists all instances involved and provides a summary describing why the constraint could not be obeyed. Is it complaining about a connectivity issue? Check to see that you are using the correct MUX input pin in each case for the pack to work.
Re: Xilinx RLOC fails mapping
[ Edited ]- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
03-18-2012 11:24 AM - edited 03-18-2012 11:24 AM
Hi,
I paste the detail error message below. I could not understand the message completely. Please give me some hints. Thank you!
Using target part "5vlx330tff1738-2".
Mapping design into LUTs...
Running directed packing...
ERROR: Pack:679 - Unable to obey design constraints (MACRONAME=hset, RLOC=X2Y2)
which require the combination of the following symbols into a single SLICE
component:
LUT symbol "mux_0" (Output Signal = o_0_OBUF)
LUT symbol "mux_1" (Output Signal = o_1_OBUF)
LUT symbol "mux_2" (Output Signal = o_2_OBUF)
LUT symbol "mux_3" (Output Signal = o_3_OBUF)
LUT symbol "mux_4" (Output Signal = o_4_OBUF)
LUT symbol "mux_5" (Output Signal = o_5_OBUF)
LUT symbol "mux_6" (Output Signal = o_6_OBUF)
LUT symbol "mux_7" (Output Signal = o_7_OBUF)
The function generators were found to have incompatible input signals.
Please correct the design constraints accordingly.
Mapping completed.
See MAP report file "mux_8_map.mrp" for details.
Problem encountered during the packing phase.
Re: Xilinx RLOC fails mapping
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
03-18-2012 10:04 PM
Eight LUTs in a slice will require LUT combining (2 LUTs per slice) in all 4 LUT complexes and that requires shared signal connectivity between the 2 combined LUTs. That's what the Pack:679 error is complaining about.
Re: Xilinx RLOC fails mapping
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
03-19-2012 03:58 PM
Now, that I've run the test case I see that the design should have worked as it is. I was able to get it to work by adding some LUT combining constraints to guide the packing. This is odd since all of the LUTs were LUT3s with one shared input and so all should have been eligible to be combined with any other. I suspect that my constraints blocked a LUT optimization that was breaking the unconstrained (from LUT combining POV) pack.
INST "mux_0" LUTNM = LP0;
INST "mux_1" LUTNM = LP0;
INST "mux_2" LUTNM = LP1;
INST "mux_3" LUTNM = LP1;
INST "mux_4" LUTNM = LP2;
INST "mux_5" LUTNM = LP2;
INST "mux_6" LUTNM = LP3;
INST "mux_7" LUTNM = LP3;
Re: Xilinx RLOC fails mapping
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
04-03-2012 06:17 PM
Hi bwade,
Sorry about the late reply! I still have one more question.
After I read the constraint guide from Xilinx about LUTNM, I understand that we can use it to group instances to physical resources.
My question is for the following constraint:
INST "mux_0" LUTNM = LP0;
1. What is LP0?
2. Does LP1 have any correlation with LP0?
Thank you!
Re: Xilinx RLOC fails mapping
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
04-03-2012 10:45 PM
LP0 was just an arbitrary name that I assigned to the LUT pair.
Re: Xilinx RLOC fails mapping
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
04-05-2012 10:42 AM
Just came up with another related two questions:
1. What about the RLOC constraint I add? I thought RLOC already did the job to pack 4 muxes into one slices.
How does these two constraints interact with each other?
For another example in which I only have 8 muxes (share select signals), I can use RLOC to pack them into 1 slice. But remove the RLOC constraint and only put the LUTNM constraint, it turns out to use 4 slices. So I am really confuse about the purpose of LUTNM.
2. What is a LUT pair? I only see the term LUT-FF pair in Xilinx software. Why do I need to specify which mux maps to which LUT pair?
Re: Xilinx RLOC fails mapping
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
04-06-2012 05:26 PM
I packed 8 muxes in one slice and instantiate it whenever I need it. It solves the problem.











