Подскажите пожалуйста, как правильно написать код, что бы ISE 14.7 понял что я хочу поставить два SRL16E блока в одном люте, как это изображено на рисунке №19, под названием Dual 16-bit Shift Register Configuration в ug384.pdf Spartan-6 FPGA Configurable Logic Block?
сделал так
Код
generate
for (i = 0; i < pDAT_W/4; i = i + 1) begin
srl16
srl16_0
(
.clk ( iclk ) ,
//
.clkena ( iclkena & iwrite ) ,
.idat ( iwdat0 [i] ) ,
//
.addr ( idat [4*i +: 4] ) ,
//
.odat ( srl16__odat0 [i] )
);
srl16
srl16_1
(
.clk ( iclk ) ,
//
.clkena ( iclkena & iwrite ) ,
.idat ( iwdat1 [i] ) ,
//
.addr ( idat [4*i +: 4] ) ,
//
.odat ( srl16__odat1 [i] )
);
end
endgenerate
for (i = 0; i < pDAT_W/4; i = i + 1) begin
srl16
srl16_0
(
.clk ( iclk ) ,
//
.clkena ( iclkena & iwrite ) ,
.idat ( iwdat0 [i] ) ,
//
.addr ( idat [4*i +: 4] ) ,
//
.odat ( srl16__odat0 [i] )
);
srl16
srl16_1
(
.clk ( iclk ) ,
//
.clkena ( iclkena & iwrite ) ,
.idat ( iwdat1 [i] ) ,
//
.addr ( idat [4*i +: 4] ) ,
//
.odat ( srl16__odat1 [i] )
);
end
endgenerate
Все требования выполнил, данные пишутся одновременно в два SRL16, чтение зашарено. Но смотрю FPGA Editor, ISE пихает их в разные LUT

ЗЫ. Сам SRL16 вставлял не как компонент, а кодом
Код
module srl16
(
clk ,
clkena ,
idat ,
addr ,
odat
);
//------------------------------------------------------------------------------------------------------
//
//------------------------------------------------------------------------------------------------------
input wire clk;
input wire clkena;
input wire idat ;
input wire [3 : 0] addr ;
output wire odat ;
//------------------------------------------------------------------------------------------------------
//
//------------------------------------------------------------------------------------------------------
reg [15 : 0] ram;
//------------------------------------------------------------------------------------------------------
//
//------------------------------------------------------------------------------------------------------
// synthesis translate_off
initial ram = 16'h0;
// synthesis translate_on
always @(posedge clk) begin
if (clkena) begin
ram <= {ram[14 : 0], idat};
end
end
assign odat = ram[addr];
endmodule
(
clk ,
clkena ,
idat ,
addr ,
odat
);
//------------------------------------------------------------------------------------------------------
//
//------------------------------------------------------------------------------------------------------
input wire clk;
input wire clkena;
input wire idat ;
input wire [3 : 0] addr ;
output wire odat ;
//------------------------------------------------------------------------------------------------------
//
//------------------------------------------------------------------------------------------------------
reg [15 : 0] ram;
//------------------------------------------------------------------------------------------------------
//
//------------------------------------------------------------------------------------------------------
// synthesis translate_off
initial ram = 16'h0;
// synthesis translate_on
always @(posedge clk) begin
if (clkena) begin
ram <= {ram[14 : 0], idat};
end
end
assign odat = ram[addr];
endmodule