使用Ada,我可以使用.ads和.adb文件将模块化单元拆分为规格和主体。
是否可以分离VHDL实体和架构?如果是这样,是否有命名约定或推荐的样式?实体可以放在自定义库/包中吗?
答案 0 :(得分:6)
Everything 被编译到库中。默认情况下,这称为“工作”,但您可以覆盖它。我很少使用它 - 如果存在命名空间冲突,它偶尔会对外部IP有用。正如Chiggs评论的那样,使用库来创建命名空间是一种很好的做法。大多数合成器can deal with multiple libraries now,虽然并非总是如此。所有模拟器都可以(据我所知)。设置它们还有一些麻烦(你必须告诉编译器它们都在哪里)。
也许是一个例子 - 比如你有一个i2c控制器和一个spi控制器。您可以调用两个块controller
并将它们编译到自己的库i2c
和spi
中,然后像这样实例化它们:
i2c_instance:entity i2c.controller...etc
spi_instance:entity spi.controller...etc
或者您可以将其称为i2c_controller
和spi_controller
并执行:
i2c_instance:entity work.i2c_controller...etc
spi_instance:entity work.spi_controller...etc
并且库与硬盘文件夹“不一样”。它们由VHDL编译器管理,因此您可以使用该工具使用的任何语法来创建和映射它们。
例如使用Modelsim,vlib
在文件系统中的特定位置创建一个库(因此此时看起来像一个文件夹),vmap
告诉编译器如何映射use some_lib;
1}}子句到文件系统的特定位。
您可以将实体和体系结构(或每个实体甚至多个体系结构)分成多个文件,或将它们保存在一个文件中。将architecture
保存在单独的文件中意味着当您重新编译它时,不会重新编译entity
,这意味着您不必重新编译实例化它的所有内容。
与packages
和package body
类似 - 单独文件中的实体意味着您可以重新编译该部分而无需重新编译其他所有内容。请注意,package
不适用于放置实体。
(旁白 - Modelsim有一个-just
开关,允许您将所有内容保存在一个文件中,只编译文件的选定位,例如architecture
和/或{{1} } part(s))
body
库答案 1 :(得分:5)
实体和架构是单独的设计单元。它们可以位于同一文件中,也可以位于单独的文件中。文件扩展名保持不变:通常为.vhd
,但.vhdl
也是可能的。对于文件名,没有普遍接受的命名约定。 (实际上有数百种约定,所以没有任何约定一样有用)任何有效的东西;例如,您可以使用myEntity.vhd
和myEntity_RTL.vhd
。
您可以编译在自己的库中编写的实体和体系结构。您可以使用公司名称作为库名。
不要将库与包混淆!包是一个包含可重用声明的编译单元。库是一组命名的编译单元。