![人工智能硬件电路设计基础及应用](https://wfqqreader-1252317822.image.myqcloud.com/cover/533/43738533/b_43738533.jpg)
1.2 实体、构造体和配置
设计实体(Design Entity)是VHDL中最主要的硬件抽象部分,是硬件设计中表示输入输出及该部分所执行功能的部分。设计实体可以表示任何级别的电路,包括逻辑门电路、宏单元、芯片、电路板,甚至完整的系统或子系统。
在VHDL程序中,设计实体包含了实体(Entity)和构造体(Architecture)两部分。一个设计实体内有且仅有一个实体,描述设计实体的输入输出等信息;但一个设计实体中可以存在一个或者多个构造体,每一个构造体都是实体的具体实现。
设计实体按照块的层次结构来进行设计,每一个块描述整体设计的一部分。这种层次结构的顶层块是实体本身,可以用作外部元件被其他设计调用。而其他的块是内部块,由块语句(BLOCK)定义。
设计实体还可以由互联的元件进行描述。为了定义元件的结构和行为,实体的每一个元件都被绑定到一个低级别的设计实体上。设计实体可以不断地分解为元件,而这些元件又与其他的低层次实体绑定,这就形成了一个完整的设计实体的层次结构。这样的层次结构通常被称为设计层次(Design Hierarchy)。设计层次中互相的绑定关系需要在顶层实体中进行说明,也就是配置(Configuration)。
图1.2是VHDL程序的结构框图。
![](https://epubservercos.yuewen.com/B3251C/23020659009785406/epubprivate/OEBPS/Images/43035_24_1.jpg?sign=1738910402-LicIu4CnPlgct540M3w4rSfmVSWKKVX1-0-d5c65ba787db92a5479b1596fbce62a9)
图1.2 VHDL程序的结构框图
1.2.1 实体
实体通常抽象地描述硬件的输入输出和所执行的功能。其语法结构如下。
![](https://epubservercos.yuewen.com/B3251C/23020659009785406/epubprivate/OEBPS/Images/43035_24_2.jpg?sign=1738910402-CQTYQU48mAwzbzjSvP7E6le68cbsB6Ok-0-94f0c7dfe4db20bb43b52174f6331b91)
类属语句定义实体工作的环境,定义一系列环境量值。端口语句定义了实体的输入输出端口,语法结构如下所示。其中,端口可以定义为以下4种模式:IN、OUT、INOUT和BUFFER。IN和OUT是单向引脚,分别表示输入和输出;INOUT是双向引脚;BUFFER是表示该引脚是可供电路内部使用的输出引脚。实体中的声明和实现还会定义一系列类型、子类型、常量等。
![](https://epubservercos.yuewen.com/B3251C/23020659009785406/epubprivate/OEBPS/Images/43035_24_3.jpg?sign=1738910402-45WeLHGYaLZqPA5bpZMyTj4CS7pcAi0a-0-9ce91dcfd0d598e35d84f9fdab0a5a84)
![](https://epubservercos.yuewen.com/B3251C/23020659009785406/epubprivate/OEBPS/Images/43035_25_1.jpg?sign=1738910402-iiFgmIVFEWci17B9ateDgRzU6qWQzNkZ-0-1139d22e3c1acdb104dd7d05516a7baa)
例1.1 8位计数器示例
![](https://epubservercos.yuewen.com/B3251C/23020659009785406/epubprivate/OEBPS/Images/43035_25_2.jpg?sign=1738910402-DU7VvyTz2UL7U1bxNGuSXVLRy757oZBV-0-df73b8e989498de16f84adf7cfc3e26f)
计数器示例中,上述代码段定义了一个具有清零和加载功能的8位计数器实体counter。实体counter有4个输入和2个输出,分别是时钟端(clk)、清零端(clear)、加载端(load)、加载数据(data_in)、计数器输出(data_out)和计数器进位(co)。上述实体描述的8位计数器如图1.3所示。
![](https://epubservercos.yuewen.com/B3251C/23020659009785406/epubprivate/OEBPS/Images/43035_25_3.jpg?sign=1738910402-jvjQKaHGjHLv0QnZuRh4XzVjQBz7UloE-0-e3c5258b4024a2fd3b7173160dc8e7f1)
图1.3 8位计数器示意图
1.2.2 构造体
构造体是对所描述电路的具体实现部分,是VHDL程序的重要组成部分,其语法结构如下。
![](https://epubservercos.yuewen.com/B3251C/23020659009785406/epubprivate/OEBPS/Images/43035_26_1.jpg?sign=1738910402-ew0i2gHHagPMsZHwUhFo8UzGz7JV5SHv-0-87361a385abab1de6d44dcbbd2688fc7)
声明部分主要是对类型、子类型、信号、常量的定义。描述部分则是对电路的行为描述;描述部分的顶层代码必须是并行语句,如:进程(Process)、When语句、Block语句等。顺序语句必须在进程(Process)、函数(Function)和过程(Procedure)中执行。
例1.2 全加器示例
![](https://epubservercos.yuewen.com/B3251C/23020659009785406/epubprivate/OEBPS/Images/43035_26_2.jpg?sign=1738910402-ezbydm30ME7OQBCnmkIkxvjym604QabU-0-51739fe71811f63180921af0846eb5c7)
全加器示例中,上述代码段定义了一个全加器实体adder和构造体f_adder。实体adder有3个输入和2个输出,分别是两个加数(a和b)、前一个进位(ci)、和(s)和输出进位(co)。构造体f_adder内的描述部分是对两个加数进行全加操作,将结果赋予s和co。上述实体和构造体描述的全加器如图1.4所示。
![](https://epubservercos.yuewen.com/B3251C/23020659009785406/epubprivate/OEBPS/Images/43035_26_3.jpg?sign=1738910402-K62dESm4h0yp5z9BF8wNzEY2AfO3W4yV-0-78ad4b5b8b60310faa8877d8eb55e8b3)
图1.4 全加器示意图
1.2.3 配置
配置是VHDL中将多个实体组合为一个完整的设计的代码段,是进行VHDL系统设计过程中非常重要的一部分。其语法结构如下。
![](https://epubservercos.yuewen.com/B3251C/23020659009785406/epubprivate/OEBPS/Images/43035_27_1.jpg?sign=1738910402-x8Cb53T3o4DPupxCskQwPQwJM0QCbK6u-0-8ce463376747c6bf49521236cd3e7f36)
VHDL程序中有默认配置,即使不编写配置,也可以进行综合。