从makefile生成VHDL条件
我有一个vhdl设计,需要适应不同的变体。 如果能够从makefile生成配置,那就太好了。用于生成一个项目的makefile已准备就绪并正在工作 我想避免为不同的项目使用不同的非常相似的文件。 两个项目之间的唯一区别是某个地方有几行,其中一行包含一组vhdl文件(和组件),而另一行不需要这些文件 例如,我希望避免使用两个不同的顶级vhd文件。相反,我希望在顶层文件中使用条件,以便包含(或不包含)其他vhdl文件和组件,具体取决于项目 关于如何做,你有什么建议吗 我曾尝试使用外部预编译器(gcc),但无法使其工作。此外,我并不想强迫其他开发人员安装gcc,也不想让vhdl文件在Xilinx IDE中不可用从makefile生成VHDL条件,makefile,conditional,vhdl,xilinx,Makefile,Conditional,Vhdl,Xilinx,我有一个vhdl设计,需要适应不同的变体。 如果能够从makefile生成配置,那就太好了。用于生成一个项目的makefile已准备就绪并正在工作 我想避免为不同的项目使用不同的非常相似的文件。 两个项目之间的唯一区别是某个地方有几行,其中一行包含一组vhdl文件(和组件),而另一行不需要这些文件 例如,我希望避免使用两个不同的顶级vhd文件。相反,我希望在顶层文件中使用条件,以便包含(或不包含)其他vhdl文件和组件,具体取决于项目 关于如何做,你有什么建议吗 我曾尝试使用外部预编译器(gcc
编辑:添加示例 我有两个产品,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
您在这里有几个选项:
generate
语句、包、配置等等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)源代码修改。”我会试试,让你知道它是怎么回事。我正在尝试类似的东西,我很好奇你是否能让它工作?我可以让它生成不同数量的我需要的组件,但我不能让它使用这种技术完全删除一个组件。你有没有找到办法让它做那样的事?谢谢