VHDL实体和架构设计

时间:2011-05-22 12:19:20

标签: vhdl

使用Ada,我可以使用.ads和.adb文件将模块化单元拆分为规格和主体。

是否可以分离VHDL实体和架构?如果是这样,是否有命名约定或推荐的样式?实体可以放在自定义库/包中吗?

2 个答案:

答案 0 :(得分:6)

Everything 被编译到库中。默认情况下,这称为“工作”,但您可以覆盖它。我很少使用它 - 如果存在命名空间冲突,它偶尔会对外部IP有用。正如Chiggs评论的那样,使用库来创建命名空间是一种很好的做法。大多数合成器can deal with multiple libraries now,虽然并非总是如此。所有模拟器都可以(据我所知)。设置它们还有一些麻烦(你必须告诉编译器它们都在哪里)。


也许是一个例子 - 比如你有一个i2c控制器和一个spi控制器。您可以调用两个块controller并将它们编译到自己的库i2cspi中,然后像这样实例化它们:

i2c_instance:entity i2c.controller...etc
spi_instance:entity spi.controller...etc

或者您可以将其称为i2c_controllerspi_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,这意味着您不必重新编译实例化它的所有内容。

packagespackage body类似 - 单独文件中的实体意味着您可以重新编译该部分而无需重新编译其他所有内容。请注意,package不适用于放置实体。

(旁白 - Modelsim有一个-just开关,允许您将所有内容保存在一个文件中,只编译文件的选定位,例如architecture和/或{{1} } part(s))

摘要

  • 将可重用的核心编译到自己的库中以保护其命名空间
  • 将其他所有内容编译到body
  • 将有用的常量,函数,过程,类型定义放入一个或多个包中
  • 将实体和体系结构放在一个或多个文件中比品味和开发风格更重要
  • 将包和包体放入一个或多个文件是一个品味和发展风格的问题

答案 1 :(得分:5)

实体和架构是单独的设计单元。它们可以位于同一文件中,也可以位于单独的文件中。文件扩展名保持不变:通常为.vhd,但.vhdl也是可能的。对于文件名,没有普遍接受的命名约定。 (实际上有数百种约定,所以没有任何约定一样有用)任何有效的东西;例如,您可以使用myEntity.vhdmyEntity_RTL.vhd

您可以编译在自己的库中编写的实体和体系结构。您可以使用公司名称作为库名。

不要将混淆!包是一个包含可重用声明的编译单元。库是一组命名的编译单元。