VHDL实体和架构设计

Dr.*_*son 4 vhdl

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

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

Mar*_*son 6

图书馆

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


也许一个例子 - 比如你有一个i2c控制器和一个spi控制器.你可以把两个块controller,并编译成自己叫自己的图书馆i2cspi然后实例他们是这样的:

i2c_instance:entity i2c.controller...etc
spi_instance:entity spi.controller...etc
Run Code Online (Sandbox Code Playgroud)

或者你可以打电话给他们i2c_controller,并spi_controller做:

i2c_instance:entity work.i2c_controller...etc
spi_instance:entity work.spi_controller...etc
Run Code Online (Sandbox Code Playgroud)

并且库与硬盘文件夹"不一样".它们由VHDL编译器管理,因此您可以使用该工具使用的任何语法来创建和映射它们.

例如,使用Modelsim,vlib在文件系统中的特定位置创建一个库(因此它在此时看起来像一个文件夹)并vmap告诉编译器如何将use some_lib;子句映射到文件系统的特定位.

实体,架构,包

您可以将实体和体系结构(或每个实体甚至多个体系结构)分成多个文件,或将它们保存在一个文件中.保留architecture在一个单独的文件中意味着当您重新编译它时,您不会重新编译它entity,这意味着您不必重新编译实例化它的所有内容.

同样与packagespackage body秒-尸体一个单独的文件意味着你可以重新编译部分无需重新编译一切.请注意,packages不适用于放置实体.

(旁白 - Modelsim有一个-just开关,允许你将所有内容保存在一个文件中,只编译文件的选定位,例如,只有architecture和/或body部分)

摘要

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


Phi*_*ppe 5

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

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

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