我可以在具有2位2对1多路复用功能的virtex-5 FPGA中编程LUT5_D吗?

时间:2011-09-13 18:38:51

标签: fpga xilinx

我试图将2位2对1多路复用器装入一个LUT。似乎LUT5_D有5个输入和2个输出。我可以按照我的要求对LUT进行编程吗?

之前我使用过LUT3LUT4。从virtex-5库指南来看,似乎要实例化LUT5_D,我需要编写一个正确的init值,但是只有一个init值可以编程,所以实际上只会使用其中一个输出?或者两个输出都会随时给出相同的值?

LUT5_D #(
.INIT(32'h55550f0f),
) LUT5_D_inst
(.O(O), // General LUT output (1-bit)
.LO(LO), // Local LUT output (1-bit)
.I0(I0), // LUT input (1-bit)
.I1(I1), // LUT input (1-bit)
.I2(I2), // LUT input (1-bit)
.I3(I3), // LUT input (1-bit)
.I4(SEL));

2 个答案:

答案 0 :(得分:1)

LUT5_D不会做你想要的:两个输出是相同的(图书馆指南中的表格显示了这一点)。

2输出选项是LUT6_2

LUT6_2

对于您的应用,您有两个输入(A和B),每个输入有两位(0,1),输出(Y)也有两位。

  • 使用I0作为选择输入
  • 连接I5以始终选择顶部LUT5(逻辑1 IIRC)。
  • I4:1A0B0A1B1联系起来。
  • O6然后是Y0O5Y1

我把它作为练习留给感兴趣的读者来提出INIT值:

  • 根据I4
  • 导致I3I0之间的最高LUT5到MUX
  • 根据I2
  • I1I0之间导致底部LUT5到MUX

答案 1 :(得分:1)

不要编程INIT值。 LUT_MAP更容易,更易于维护:

(* LUT_MAP="yes" *)
module mux2(sel, a, b, o);
    input  sel;
    input  a;
    input  b;
    output o;

    assign o = (~sel&a) | (sel & b);
endmodule

使用公共sel输入信号,通过将四个6-LUT中的每一个分成2个5-LUT,上面的mux2可以打包8到(4个6-LUT)切片。