![人工智能硬件电路设计基础及应用](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=1738907451-SKI2wrI7dmE7IUFEMqz28ACarnmNLLfX-0-1091a7fad59fc0c76d2db5fceeee6dfe)
图1.2 VHDL程序的结构框图
1.2.1 实体
实体通常抽象地描述硬件的输入输出和所执行的功能。其语法结构如下。
![](https://epubservercos.yuewen.com/B3251C/23020659009785406/epubprivate/OEBPS/Images/43035_24_2.jpg?sign=1738907451-QQewb3vA2SLtqa9iA4VLtwz8bd0phRwY-0-24a6668c4c69a12d12633f623ef8049d)
类属语句定义实体工作的环境,定义一系列环境量值。端口语句定义了实体的输入输出端口,语法结构如下所示。其中,端口可以定义为以下4种模式:IN、OUT、INOUT和BUFFER。IN和OUT是单向引脚,分别表示输入和输出;INOUT是双向引脚;BUFFER是表示该引脚是可供电路内部使用的输出引脚。实体中的声明和实现还会定义一系列类型、子类型、常量等。
![](https://epubservercos.yuewen.com/B3251C/23020659009785406/epubprivate/OEBPS/Images/43035_24_3.jpg?sign=1738907451-evLyIvSfd1KhiHG1x5WWTPoRsePBHpwo-0-da11141380facd7e58cf7cb5ec00fba1)
![](https://epubservercos.yuewen.com/B3251C/23020659009785406/epubprivate/OEBPS/Images/43035_25_1.jpg?sign=1738907451-S1mpEkUVgnnKgoqyd7LxsqrZZAQi8RA4-0-750787c349a5ce900a49404257560bd3)
例1.1 8位计数器示例
![](https://epubservercos.yuewen.com/B3251C/23020659009785406/epubprivate/OEBPS/Images/43035_25_2.jpg?sign=1738907451-KXUvDM8M56Ha3ZekIQs98sr1K4PbG0YZ-0-3bef36a440084298ae0c8ae4e62afed9)
计数器示例中,上述代码段定义了一个具有清零和加载功能的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=1738907451-E6ad0IFUZMvkX0mQkXt1XI6oohjYB5ch-0-e8f3fcbc90c66e2fea0eec367f8134c6)
图1.3 8位计数器示意图
1.2.2 构造体
构造体是对所描述电路的具体实现部分,是VHDL程序的重要组成部分,其语法结构如下。
![](https://epubservercos.yuewen.com/B3251C/23020659009785406/epubprivate/OEBPS/Images/43035_26_1.jpg?sign=1738907451-TDzkL8xaO5Ga31Vty4LWp6C6jVB9pwIy-0-347d5eb9ca2710c230f7408b1b2bb2d0)
声明部分主要是对类型、子类型、信号、常量的定义。描述部分则是对电路的行为描述;描述部分的顶层代码必须是并行语句,如:进程(Process)、When语句、Block语句等。顺序语句必须在进程(Process)、函数(Function)和过程(Procedure)中执行。
例1.2 全加器示例
![](https://epubservercos.yuewen.com/B3251C/23020659009785406/epubprivate/OEBPS/Images/43035_26_2.jpg?sign=1738907451-AC3pOD1d0wz6JOGUjalqtKUanHmHWbmJ-0-f37f7796e974e82a964927416f64ec42)
全加器示例中,上述代码段定义了一个全加器实体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=1738907451-pFB05A1lrpALLFa2Mwtg0bpjYwK5tMXY-0-b92b335e87ca0c2871fa78c749bff3e6)
图1.4 全加器示意图
1.2.3 配置
配置是VHDL中将多个实体组合为一个完整的设计的代码段,是进行VHDL系统设计过程中非常重要的一部分。其语法结构如下。
![](https://epubservercos.yuewen.com/B3251C/23020659009785406/epubprivate/OEBPS/Images/43035_27_1.jpg?sign=1738907451-jzBzIbhI6XM8mIOC0qsI4ZqrdO0JwRx3-0-dffc6520fb41b43517c858f9b85500ed)
VHDL程序中有默认配置,即使不编写配置,也可以进行综合。