明确定义如何在 Xilinx XST 工具中使用 LUT 和切片?

发布于 2024-10-19 17:38:34 字数 447 浏览 0 评论 0原文

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

我正在谈论 Virtex5 上 6 输入 LUT 的使用,其中 CLB 中有 4 个。

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

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

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

I'm trying to implement some very specific behavior of LUTs and slices, written in VHDL for Xilinx Virtex 5 FPGA synthesized using XST tool(s). I don't know if I can achieve my behavior by having the tools infer what I mean, so how do I explicitly direct this to happen?

I'm talking about use of the 6-input LUTs on Virtex5, of which there are 4 of them in a CLB.

I want to explicitly state:
- Inputs to each of the 4 LUTs within ONE CLB slice
- Route the 'S' outputs from the 4 XORCYs
- Specify INPUT of the 'first' MUXCY (C0)
- Route OUTPUT of the '4th' MUXCY (Cn)
- Be able to specify the inputs of each LUT of the CLB in a specific order, since they obviously cascade..

Ideally I'd love to just instantiate a 'CLB' in VHDL with all inputs and outputs, and be able to map these..

I researched the documentation pretty heavily and haven't found anything really

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

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

发布评论

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

评论(2

蓬勃野心 2024-10-26 17:38:34

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 个输入、1 个输出)必须在单个 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

黑客快乐!

Saar suggests you use LUT6 to explicitly instantiate a LUT. I prefer to control technology mapping with a LUT_MAP constraint. It requires less maintenance and your HDL code remains device agnostic and simulator friendly.

Here is an example.

(* 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

This lets you write arbitrary combinational logic and tell synthesis (XST) that this (up to 6-input, one output) module must be implemented in a single LUT. If you combine that with KEEP_HIERARCHY and RLOC constraints you can build up RPMs (relationally placed macros).

(* 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

There is more information on RPMs for datapaths on my old web site, www.fpgacpu.org. For example, The Art of High Performance FPGA Design: http://www.fpgacpu.org/log/aug02.html#art

Happy hacking!

雅心素梦 2024-10-26 17:38:34

您也许能够使用 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 约束指南。

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

You might be able to achieve the desired behaviour using RLOC and BEL constraints. You can embed the constraints in the 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}";

Look in the Xilinx Constraints Guide for more details.

See also this post on comp.arch.fpga for some example VHDL: http://newsgroups.derkeiler.com/Archive/Comp/comp.arch.fpga/2008-05/msg00560.html

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