【问题标题】:Explicitly define how LUTs and slices are used in Xilinx XST tool?明确定义如何在 Xilinx XST 工具中使用 LUT 和切片?
【发布时间】:2011-03-02 03:05:02
【问题描述】:

我正在尝试为使用 XST 工具合成的 Xilinx Virtex 5 FPGA 用 VHDL 编写的 LUT 和切片的一些非常具体的行为。我不知道我是否可以通过让工具推断我的意思来实现我的行为,那么我该如何明确地指导这种情况发生呢?

我说的是在 Virtex5 上使用 6 输入 LUT,其中一个 CLB 中有 4 个。

我想明确说明: - 一个 CLB 片内 4 个 LUT 中的每一个的输入 - 路由来自 4 个 XORCY 的“S”输出 - 指定“第一个”MUXCY (C0) 的 INPUT - '4th' MUXCY (Cn) 的路由输出 - 能够以特定顺序指定 CLB 的每个 LUT 的输入,因为它们显然是级联的..

理想情况下,我希望在 VHDL 中用所有输入和输出实例化一个“CLB”,并能够映射这些..

我对文档进行了大量研究,但没有真正找到任何东西

【问题讨论】:

  • 不是一个完整的答案,只是一个提示:是的,我认为这是可能的,我认为它被称为“宏”。它们在 Xilinx 文档的某处进行了描述(我知道,它很大而且排列不那么清晰)。有一节描述了所有 RTL 组件以及推断它们的不同方法。使用 Xilinx 库和那些宏,您应该可以做到。
  • xilinx.com/support/documentation/sw_manuals/xilinx12_2/… 寻找 LUT5/6。 LUT6 描述和实例化模块(Verilog/VHDL)在第 158 页。
  • 我带着它,今晚开始合成,效果很好。并且使用 LUT6_L 和 _D 和 _2 实例化,我认为可以完全确定您将在 CLB 中获得您想要的结果。我刚刚使用了 LUT6_2 和 MUXCY,得到的正是我想要的。

标签: vhdl fpga xilinx


【解决方案1】:

Saar 建议您使用 LUT6 显式实例化 LUT。我更喜欢使用 LUT_MAP 约束来控制技术映射。它需要较少的维护,并且您的 HDL 代码与设备无关且对模拟器友好。

这是一个例子。

(* LUT_MAP="yes" *)
module mux4(sel, a, b, c, d, o);
input [1:0] sel;
input       a;
input       b;
input       c;
input       d;
output reg  o;

always @* begin
    case(sel)
    2'b00: o <= a;
    2'b01: o <= b;
    2'b10: o <= c;
    2'b11: o <= d;
    endcase
end
endmodule

这让您可以编写任意组合逻辑并告诉综合 (XST) 这个(最多 6 个输入,一个输出)模块必须在单个 LUT 中实现。如果您将其与 KEEP_HIERARCHY 和 RLOC 约束结合起来,您可以构建 RPM(关系放置的宏)。

(* KEEP_HIERARCHY="true" *)
module mux4x4p4(sel, a, b, c, d, o);
input  [1:0] sel;
input  [3:0] a;
input  [3:0] b;
input  [3:0] c;
input  [3:0] d;
output [3:0] o;

(* RLOC="X0Y0" *)
mux4 m0(sel, a[0], b[0], c[0], d[0], o[0]);
(* RLOC="X0Y0" *)
mux4 m1(sel, a[1], b[1], c[1], d[1], o[1]);
(* RLOC="X0Y0" *)
mux4 m2(sel, a[2], b[2], c[2], d[2], o[2]);
(* RLOC="X0Y0" *)
mux4 m3(sel, a[3], b[3], c[3], d[3], o[3]);
endmodule

在我的旧网站 www.fpgacpu.org 上有更多关于数据路径 RPM 的信息。例如,高性能 FPGA 设计艺术:http://www.fpgacpu.org/log/aug02.html#art

黑客愉快!

【讨论】:

    【解决方案2】:

    您也许可以使用 RLOC 和 BEL 约束来实现所需的行为。您可以在 VHDL 中嵌入约束:

    VHDL Syntax
    
    Declare the VHDL constraint as follows:
    attribute bel : string;
    
    Specify the VHDL constraint as follows:
    attribute bel of {component_name| label_name}: {component|label} is {F|G|FFA|FFB|FFC|FFD|FFX|FFY|XORF|XORG|A6LUT|B6LUT|C6LUT|D6LUT|A5LUT|B5LUT|C5LUT|D5LUT}";
    

    查看 Xilinx 约束指南了解更多详细信息。

    有关 VHDL 示例,另请参阅 comp.arch.fpga 上的这篇文章:http://newsgroups.derkeiler.com/Archive/Comp/comp.arch.fpga/2008-05/msg00560.html

    【讨论】:

    • 这可能有效,但我犹豫是否尝试。我的原因是我之前尝试过使用属性来获取要使用的 DSP 资源,但发现它非常不可预测。它在某些情况下会起作用,但在其他情况下似乎完全被忽略了。我的同事也遇到了完全相同的问题。特别是当设计变大时,许多属性设置似乎不可靠。您的回答可能是正确的,但只是分享我的经验。不过还是谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多