1

我正在尝试将 2 位 2 对 1 多路复用器安装到一个 LUT 中。似乎LUT5_D有 5 个输入和 2 个输出。我可以根据需要对 LUT 进行编程吗?

以前用过LUT3LUT4从 virtex-5 library guide 看来,要实例化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));
4

2 回答 2

1

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

2 输出选项是LUT6_2

LUT6_2

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

  • 用作选择I0输入
  • 连线I5以始终选择顶部 LUT5(逻辑 1 IIRC)。
  • 连线I4:1A0, B0, A1, B1
  • O6Y0,O5Y1

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

  • 导致顶部 LUT5 到 MUX 之间I4I3基于I0
  • 导致底部 LUT5 到 MUX 之间I2I1基于I0
于 2011-10-07T15:37:44.220 回答
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 个(四个 6-LUT)切片。

于 2011-10-24T18:59:19.057 回答