2

我有一个需要适应不同变体的 vhdl 设计。能够从 makefile 生成配置会很好。用于生成一个项目的 makefile 已准备好并可以正常工作。

我想避免为不同的项目使用不同的非常相似的文件。项目之间的唯一区别是某处的几行,其中一个包含一堆 vhdl 文件(和组件),另一个不需要。

例如,我想避免拥有两个不同的顶级 vhd 文件。相反,我想在顶层文件中使用条件来包含(或不包含)其他 vhdl 文件和组件,具体取决于项目。

你对如何做到这一点有什么建议吗?

我曾尝试使用外部预编译器(gcc),但无法使其工作。此外,我真的不想强迫其他开发人员安装 gcc,或者在 Xilinx IDE 中无法使用 vhdl 文件。


编辑:添加示例

我有两个产品,A 和 B。我想对这两个产品使用相同的文件,使用条件来排除产品 B 的某些部件,生成不同硬件部件的配置,当然还有其他东西。

我想从命令行生成配置: make product_Amake product_B.

如果我generates根据目标在我的 vhdl 中包含/排除代码,那么 xst 需要知道正在构建什么目标。问题是关于如何将当前目标从 makefile 传递给 xst。

在使用 gcc 编译的 C 代码中,我会放入源代码:

#if defined(product_B)
    ...
#elsif defined(product_A)
    ...
#endif

,然后在makefile中设置define:

product_A: source.c
    gcc -Dproduct_A source.c

product_B: source.c
    gcc -Dproduct_B source.c
4

3 回答 3

7

您是否考虑过使用 vhdl GENERATE 语句并将其包装在您希望可配置的逻辑周围。

name : FOR N IN 1 TO 8 GENERATE

  concurrent statements here

END GENERATE name;

然后,如果您将一些配置泛型添加到顶级文件,您可以控制生成的运行方式。

编辑

您可以使用以下命令从 XST 中的命令行设置 GENERICS:

-泛型{名称=值名称=值}

仅从 9.1 开始添加对此的支持。

于 2010-02-10T16:50:25.787 回答
3

你有几个选择:

  1. 尽量不要有不同的文件,而是在一个文件中实现所有不同的版本。这是迄今为止最稳健的方法。VHDL 有一些有用的结构可以帮助您解决这个问题:泛型、generate语句、包、配置等。
  2. 使用外部宏预处理器拥有 VHDL 文件“模板”。一些强化的 Unixoid 使用古老的m4工具。我会采取不同的方式,并使用像 Python 这样的成熟编程语言和一些模板库。然后,您可以轻松地将这些模板生成的真实 VHDL 文件合并到您的 makefile 中。

无论如何,首先尝试使用选项(1)。差异可能没有你想象的那么糟糕。

于 2010-02-10T16:30:17.010 回答
2

生成是执行此操作的方法 - 要编译或不编译某些内容,您需要一个 if 生成:

product_a_gen: if product_a='1' generate
    -- some code in here
end generate product_a_gen;
product_b_gen: if product_b='1' generate
    -- some code in here
end generate product_b_gen;

VHDL2008添加了扩展生成,所以你可以拥有caseelse零件。Doulos对此有一个附注。

注意 XST 并传入泛型,它们受支持的类型的限制。

于 2010-03-04T12:04:59.883 回答