从makefile生成VHDL条件

从makefile生成VHDL条件,makefile,conditional,vhdl,xilinx,Makefile,Conditional,Vhdl,Xilinx,我有一个vhdl设计,需要适应不同的变体。 如果能够从makefile生成配置,那就太好了。用于生成一个项目的makefile已准备就绪并正在工作 我想避免为不同的项目使用不同的非常相似的文件。 两个项目之间的唯一区别是某个地方有几行,其中一行包含一组vhdl文件(和组件),而另一行不需要这些文件 例如,我希望避免使用两个不同的顶级vhd文件。相反,我希望在顶层文件中使用条件,以便包含(或不包含)其他vhdl文件和组件,具体取决于项目 关于如何做,你有什么建议吗 我曾尝试使用外部预编译器(gcc

我有一个vhdl设计,需要适应不同的变体。 如果能够从makefile生成配置,那就太好了。用于生成一个项目的makefile已准备就绪并正在工作

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

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

关于如何做,你有什么建议吗

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


编辑:添加示例

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

我想通过以下命令行生成配置:
制造产品A
制造产品B

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

在使用gcc编译C代码时,我输入了源代码:

#if defined(product_B)
    ...
#elsif defined(product_A)
    ...
#endif
,然后在makefile中设置定义:

product_A: source.c
    gcc -Dproduct_A source.c

product_B: source.c
    gcc -Dproduct_B source.c

您在这里有几个选项:

  • 尽量不要有不同的文件,而是在一个文件中实现所有不同的版本这是迄今为止最稳健的方法。VHDL提供了一些有用的结构来帮助您实现这一点:泛型、
    generate
    语句、包、配置等等
  • 使用外部宏预处理器生成VHDL文件“模板”。一些硬化的Unixoid使用古老的
    m4
    工具。我会选择另一条路,使用一种成熟的编程语言,比如Python和一些模板库。然后,您可以轻松地将从这些模板生成的真实VHDL文件合并到makefiles中

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

    您是否考虑过使用vhdl GENERATE语句并将其包装在您想要配置的逻辑中

    name : FOR N IN 1 TO 8 GENERATE
    
      concurrent statements here
    
    END GENERATE name;
    
    然后,如果向顶层文件添加一些配置泛型,则可以控制生成的运行方式

    编辑

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

    -泛型{name=value name=value}


    仅从9.1以后才添加了对该功能的支持。

    生成是实现该功能的方法-要在中编译或不编译某些内容,您需要一个if-Generate:

    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添加了要生成的扩展,因此您可以拥有
    case
    else
    部分。杜洛斯有一个朋友


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

    是的,选项一感觉最好。简单就是好。但是,如何在不修改文件的情况下更改条件的值(例如,在generate语句中)?通常,从makefile中?@Gauthier:我不确定你是否知道makefiles的用途。Makefiles通常用于按特定顺序运行工具和命令序列。为什么需要从外部更改generate语句中条件的值?generate语句用于根据预设条件选择各种状态。也许你应该详细解释一下(编辑原始问题)你需要什么我需要预设条件,以便从同一组文件生成不同的目标。Makefiles也用于构建不同的目标,因此需要控制要包含什么和不包含什么。我正在编辑原始帖子以使其更清晰。看起来很有趣:“泛型(-Generics)允许您重新定义顶级设计块中定义的泛型(VHDL)或参数(Verilog)值。这允许您轻松修改设计配置,而无需任何硬件描述语言(HDL)源代码修改。”我会试试,让你知道它是怎么回事。我正在尝试类似的东西,我很好奇你是否能让它工作?我可以让它生成不同数量的我需要的组件,但我不能让它使用这种技术完全删除一个组件。你有没有找到办法让它做那样的事?谢谢