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

发布于 2024-12-04 07:12:26 字数 535 浏览 0 评论 0原文

我正在尝试将 2 位 2 比 1 多路复用器放入一个 LUT 中。看起来 LUT5_D 有 5 个输入和 2 个输出。我可以按照我想要的方式对 LUT 进行编程吗?

我之前用过LUT3LUT4。从 virtex-5 库指南来看,要实例化 LUT5_D,我需要编写一个适当的初始化值,但只有一个要编程的初始化值,因此实际上只有一个输出用过的?或者两个输出在任何时候都会给出相同的值?

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));

I am trying to fit a 2-bit 2-to-1 mux into one LUT. It seems that LUT5_D has 5 inputs and 2 outputs. Can I program the LUT as what I want?

I have used LUT3, LUT4 before. From the virtex-5 library guide, it seems that to instantiate LUT5_D, I need to program a proper init value, but there is only one init value to program, so only one of the outputs will actually be used? Or will both of the outputs give the same value any time?

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));

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梦里泪两行 2024-12-11 07:12:26

LUT5_D 不会执行您想要的操作:两个输出是相同的(库指南中的表显示了这一点)。

2 个输出选项是 LUT6_2

LUT6_2

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

  • 使用 I0 作为选择输入
  • Wire I5 以始终选择顶部 LUT5(逻辑 1 IIRC)。
  • I4:1 连接为 A0B0A1B1
  • O6 就是 Y0O5 就是 Y1

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

  • 导致顶部 LUT5 基于 I0I4I3 之间进行 MUX
  • 导致底部 LUT5 在 I2 之间进行 MUXI1 基于 I0

The LUT5_D is not going to do what you want: the two outputs are identical (the table in the libraries guide shows this).

The 2 output option is the LUT6_2:

LUT6_2

For your application, you have two inputs (A and B) each with two bits (0,1) and an output (Y) also with two bits.

  • Use I0 as the select input
  • Wire I5 to always select the top LUT5 (logic 1 IIRC).
  • Wire up I4:1 as A0,B0,A1,B1.
  • O6 is then Y0, O5 is Y1

I leave it as an exercise to the interested reader to come up with the INIT values which:

  • cause the top LUT5 to MUX between I4 and I3 based on I0
  • cause the bottom LUT5 to MUX between I2 and I1 based on I0
温柔戏命师 2024-12-11 07:12:26

不要对 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)切片。

Don't program INIT values. LUT_MAP is much easier and more maintainable:

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

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

With a common sel input signal, the mux2 above can be packed 8 to a (four 6-LUT) slice by splitting each of the four 6-LUTs into 2 5-LUTs.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文