首页 文章

VHDL实体和架构设计

提问于
浏览
4

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

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

2 回答

  • 6

    图书馆

    一切都被编译成一个库 . 默认情况下,这称为"work",但您可以覆盖它 . 我很少使用它 - 如果存在命名空间冲突,它偶尔会对外部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; 子句映射到文件系统的特定位 .

    实体,架构,包

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

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

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

    摘要

    • 将可重用的核心编译到自己的库中以保护其命名空间

    • 将其他所有内容编译到 work 库中

    • 将有用的常量,函数,过程,类型定义放入一个或多个包中

    • 将实体和体系结构放在一个或多个文件中是一种品味和发展风格的问题

    • 将包和包体放入一个或多个文件是一个品味和发展风格的问题比什么都重要

  • 5

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

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

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

相关问题