5

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

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

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

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

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

4

2 回答 2

7

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

快乐黑客!

于 2011-05-08T15:32:24.093 回答
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}";

查看赛灵思约束指南了解更多详细信息。

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

于 2011-03-02T10:23:54.120 回答