I'm playing around a bit with RLOC and I'm getting some weird results.
My top level file has these instantiations in it:
(* RLOC = "X0Y0" *) rloc_reg32 sourcefds(.clk_i(clk_i),.D(internal2),.Q(thebus)); (* RLOC = "X60Y0" *) rloc_reg32 destfds(.clk_i(clk_i),.D(thebus),.Q(internal4));
And rloc_reg32 looks like this:
module rloc_reg32(input clk_i, input [31:0] D, output [31:0] Q); (* RLOC = "X0Y0" *) FD fd00(.C(clk_i),.D(D[ 0]),.Q(Q[ 0])); (* RLOC = "X0Y0" *) FD fd01(.C(clk_i),.D(D[ 1]),.Q(Q[ 1])); (* RLOC = "X2Y0" *) FD fd02(.C(clk_i),.D(D[ 2]),.Q(Q[ 2])); (* RLOC = "X2Y0" *) FD fd03(.C(clk_i),.D(D[ 3]),.Q(Q[ 3])); (* RLOC = "X0Y2" *) FD fd04(.C(clk_i),.D(D[ 4]),.Q(Q[ 4])); (* RLOC = "X0Y2" *) FD fd05(.C(clk_i),.D(D[ 5]),.Q(Q[ 5])); (* RLOC = "X2Y2" *) FD fd06(.C(clk_i),.D(D[ 6]),.Q(Q[ 6])); (* RLOC = "X2Y2" *) FD fd07(.C(clk_i),.D(D[ 7]),.Q(Q[ 7])); (* RLOC = "X0Y4" *) FD fd08(.C(clk_i),.D(D[ 8]),.Q(Q[ 8])); (* RLOC = "X0Y4" *) FD fd09(.C(clk_i),.D(D[ 9]),.Q(Q[ 9])); // And so on... (* RLOC = "X0Y14" *) FD fd28(.C(clk_i),.D(D[28]),.Q(Q[28])); (* RLOC = "X0Y14" *) FD fd29(.C(clk_i),.D(D[29]),.Q(Q[29])); (* RLOC = "X2Y14" *) FD fd30(.C(clk_i),.D(D[30]),.Q(Q[30])); (* RLOC = "X2Y14" *) FD fd31(.C(clk_i),.D(D[31]),.Q(Q[31])); endmodule // rloc_reg32
Basically, I expect that I should be able to get two columns of CLBs with each CLB containing two flip flops.
However, if I look at the design the flip flops in "destfds" are not placed as I expect them to be. I have a screenshot of the placed design at
Have I misunderstood something about RLOC? I have tried to search the answer database at xilinx.com but haven't found anything which explains this. (I'm using ISE 8.1 if that matters.)
/Andreas