当前课程知识点:EDA技术与应用 >  第四章 VHDL语言概述 >  4.5 结构体 >  4.5.2 结构体 教学视频

返回《EDA技术与应用》慕课在线视频课程列表

4.5.2 结构体 教学视频在线视频

下一节:4.5.3 结构体 讨论

返回《EDA技术与应用》慕课在线视频列表

4.5.2 结构体 教学视频课程教案、知识点、字幕

同学们好

本讲我们来学习VHDL代码中的结构体

在VHDL语言中

结构体和实体说明一样

都是一个设计中不可缺少的基本组成部分

他们共同完成了对电路的描述

下面我们就来了解有关结构体的知识

结构体是用来描述

当前设计电路的结构、行为和功能的部分

一个设计是否能够实现预期目标

关键在于结构体是否正确的描述了

电路的结构、行为和功能

在结构体中,根据设计的需要,可以包括

对数据类型、常数、信号

子程序、元件等元素的说明

结构体的主要内容是

以不同风格描述实体逻辑行为和功能的语句

另外,结构体中还可以包括

以元件例化语句为特征的

外部元件端口间的连接

在VHDL语中

对结构体的语法格式有着严格的规定

ARCHITECTURE

是VHDL中专门用于结构体定义的关键字

architecture_name是结构体的名字

一般来讲

结构体名称的选择没有严格的规定

但是要注意

不能与VHDL保留的关键字发生冲突

结构体的定义以关键字END加结构体名结束

前后两处结构体名要完全一致

从上述语法结构中可以看出

除了必要的语法框架外

结构体中主要包含两个部分

结构体声明部分和结构体代码部分

其中,结构体声明部分是可选的

主要用于对信号和常量的定义和声明

结构体代码是一个结构体的核心部分

用来描述电路的逻辑结构和行为

从而实现电路的逻辑功能

下面我们来看一个例子

用VHDL语言设计一个两输入与非门

我们可以这样编写它的结构体

从这个例子可以看出

这个结构体的名字是one

它属于设计实体nand_gate

电路的功能

是对两个输入信号A和B进行与非逻辑运算

运算结果由端口y进行输出

结构体代码部分的这条语句

y<=a nand b

就能够实现这种逻辑运算功能

需要注意的是

在这个例子中

没有需要定义的信号和常量等

因此,就没有必要书写

结构体声明部分的代码了

在VHDL语言中

对结构体的描述可以采用多种不同的形式

比较常用的有:

行为描述和数据流描述两种风格

行为描述是指

在结构体中只描述电路的逻辑行为

而不涉及实现这种行为所需要的硬件结构

结构体代码只表示输入输出之间的关系

而不包含任何硬件结构的信息

数据流描述也称为RTL寄存器传输级描述

是指对信号数据传输的路径

和流向进行描述的方法

一般来说

行为描述的抽象程度更高

设计者只需要了解

电路输入输出之间的逻辑关系就可以了

因此,行为描述风格的结构体更容易理解

是我们编写结构体代码的主要形式

但是

行为描述不涉及具体的硬件资源和结构

在综合时完全依靠软件自动适配实现

因此效率较低

数据流描述

需要清楚地表达

电路中信号传输的路径和流向

因此,要求设计者

除了对所设计电路的功能十分清楚之外

还必须熟悉电路的内部硬件结构

对设计者的要求较高

但是,由于数据流描述

直接针对电路的寄存器传输级进行描述

所以在综合时就会比较容易实现

综上所述

结构体描述的两种不同风格

分别具有各自的特点

在实际应用中

究竟采用哪一种方式

则要看具体设计内容

和设计者的实际情况而定

我们可以通过一个1位全加器的例子

来体会行为描述和数据流描述的特点

在1位全加器的设计中

端口A和B是两个进行加法运算的输入信号

Cin是来自低位的进位信号

S是全加器的和,Co是进位输出信号

真值表反映了全加器的逻辑功能

根据真值表

我们可以得到1位全加器的逻辑函数

我们先用行为描述的方法

来实现一位全加器的功能

首先是库声明和实体说明

然后是结构体

在结构体代码部分

我们通过一个进程process

来实现结构体的行为描述

在进程中先定义的一个整数类型的变量n

然后又定义了两个常量

S_vector和Co_vector

它们都是4位宽度的

std_logic_vector类型

S_vector的值为“0101”

Co_vector的值为“0011”

进程开始后

首先对变量n清零

然后是三个if语句

如果A是高电平‘1’,则n加1

如果B是高电平‘1’,则n再加1

如果Cin是高电平‘1’,则n再次加1

这样,如果A、B、Cin都是‘0’

则n=0

如果A、B、Cin中

只有一个为高电平‘1’,则n=1

如果A、B、Cin中

有两个高电平‘1’,则n=2

如果A、B、Cin全为高电平‘1’

则n=3

接下来

把S_vector的第n位赋值给S

前面已经定义了

常量S_vector的值为“0101”

所以我们可以看到

当全加器的三个输入全为低电平‘0’时

S=‘0’

当三个输入只有一个为高电平‘1’时

S=‘1’

当三个输入只有两个为高电平‘1’时

S=‘0’

当三个输入全为高电平‘1’时

S=‘1’

这个结果正好符合1位全加器真值表的要求

同理

把Co_vector的第n位赋值给Co

也能使进位输出信号Co符合真值表要求

从上面的例子可以看到

行为描述完全是通过

进程(process)内部的顺序语句

来描述真值表中所反映的全加器电路

输入、输出之间的转换行为

而没有任何涉及到电路硬件结构的信息

这就使得设计人员

只需要了解设计实体外部特性和功能

就可以进行正确的描述了

而无需关注实体内部电路组织和门级实现

因此,行为描述是VHDL结构体描述的核心

正是基于行为描述

这种对电路功能高度的抽象概括能力

才使得VHDL具有强大的系统描述能力

除了上述行为描述方式

我们还可以用数据流描述的方式来实现

1位全加器设计

我们已经从真值表中得到了

1位全加器的逻辑函数

如果我们能够在

结构体中描述电路的逻辑函数

也就相当于实现了电路的逻辑功能

首先

我们先定义两个信号tmp1和tmp2

然后通过四个并行信号赋值语句

实现电路逻辑函数

A异或B,然后赋值给信号tmp1

tmp1和Cin相与,结果赋值给tmp2

tmp1和Cin异或后

把结果赋值给设计实体的输出端S

这样,S就是

A、B、Cin三个输入信号相异或的结果

这和从真值表中得到的逻辑函数是一致的

A与B的结果和tmp2相或

然后赋值给全加器的进位输出信号 Co

这样就完成了

对全加器逻辑功能的数据流描述

可以看到

数据流描述

是建立在并行信号赋值语句基础上的

当语句中任意输入信号发生变化时

相应的赋值语句就被激活

而数据也就按照预定的传输途径和方式

产生了变化

最终实现预期的逻辑功能

数据流描述

要求设计人员必须熟悉电路内部组织结构

对硬件知识要求较高

但是由于数据流描述

基本上就是电路逻辑函数的直接体现

因此 具有直观性和可读性好的特点

结构体是VHDL代码中

不可缺少的重要组成部分

关系到电路的功能是不是能够正确地实现

结构体主要有:

行为描述和数据流描述两种形式

他们都是由各种不同功能的

语句、过程、函数、运算符、属性等构成的

在后面的课程中

我们就将陆续学习这些语法要素

本讲到这里就结束了

好,本讲到这里就结束了

EDA技术与应用课程列表:

第一章 EDA技术概述

-1.1 EDA技术概述

--1.1.1 EDA技术概述 导学

--1.1.2 EDA技术概述 教学视频

--1.1.3 EDA技术概述 单元测验

--1.1.4 EDA技术概述 讨论

第二章 可编程逻辑器件概述

-2.1 可编程逻辑器件(PLD)概述

--2.1.1 可编程逻辑器件 导学

--2.1.2 可编程逻辑器件概述 教学视频

--2.1.3 可编程逻辑器件概述 单元测验

--2.1.4 可编程逻辑器件概述 讨论

-2.2 CPLD的结构和原理

--2.2.1 CPLD结构和原理 导学

--2.2.2 CPLD的结构和原理 教学视频

--2.2.3 CPLD的结构和原理 单元测验

--2.2.4 CPLD的结构和原理 讨论

-2.3 FPGA的结构和原理

--2.3.1 FPGA的结构和原理 导学

--2.3.2 FPGA的结构和原理 教学视频

--2.3.3 FPGA的结构和原理 单元测验

--2.3.4 FPGA的结构和原理 讨论

-2.4 FPGA和CPLD的选用

--2.4.1 FPGA和CPLD的选用 导学

--2.4.2 FPGA和CPLD的选用 教学视频

--2.4.3 FPGA和CPLD的选用 单元测验

--2.4.4 FPGA和CPLD的选用 讨论

-2.5 FPGA与CPLD的编程和配置

--2.5.1 FPGA与CPLD的编程与配置 导学

--2.5.2 FPGA与CPLD的编程与配置 教学视频

--2.5.3 FPGA与CPLD的编程与配置 单元测验

--2.5.4 FPGA与CPLD的编程与配置 讨论

第三章 EDA开发平台——QuartusII应用

-3.1 QuartusII概述

--3.1.1 Quartus Ⅱ概述 导学

--3.1.2 Quartus Ⅱ概述 教学视频

--3.1.3 Quartus Ⅱ概述 单元测验

--3.1.4 Quartus Ⅱ概述 讨论

-3.2 新建工程

--3.2.1 新建工程 导学

--3.2.2 新建工程 教学视频

--3.2.3 新建工程 单元测验

-3.3 设计输入

--3.3.1 设计输入 导学

--3.3.2 设计输入 教学视频

--3.3.3 设计输入 单元测验

--3.3.4 设计输入 讨论

-3.4 设计编译

--3.4.1 设计编译 导学

--3.4.2 设计编译 教学视频

--3.4.3 设计编译 单元测验

--3.4.4 设计编译 讨论

-3.5 仿真验证

--3.5.1 仿真验证 导学

--3.5.2 仿真验证 教学视频

--3.5.3 仿真验证 单元测验

--3.5.4 仿真验证 讨论

-3.6 器件编程

--3.6.1 器件编程 导学

--3.6.2 器件编程1 教学视频

--3.6.3 器件编程2 教学视频

--3.6.4 器件编程 单元测验

--3.6.5 器件编程 讨论

-3.7层次化设计

--3.7.1 层次化设计 导学

--3.7.2 层次化设计 教学视频

--3.7.3 层次化设计 单元测验

--3.7.4 层次化设计 讨论

-3.8 宏功能模块的使用

--3.8.1 宏功能模块的使用 导学

--3.8.2 宏功能模块的使用 教学视频

--3.8.3 宏功能模块的使用 单元测验

--3.8.4 宏功能模块的使用 讨论

第四章 VHDL语言概述

-4.1 VHDL语言概述

--4.1.1 VHDL概述 导学

--4.1.2 VHDL语言概述 教学视频

--4.1.3 VHDL语言概述 单元测验

--4.1.4 VHDL概述 讨论

-4.2 VHDL代码的结构

--4.2.1 VHDL代码的结构 导学

--4.2.2 VHDL代码的结构 教学视频

--4.2.3 VHDL代码的结构 单元测验

--4.2.4 VHDL代码的结构 讨论

-4.3 库和库声明

--4.3.1 库和库声明 导学

--4.3.2 库和库声明 教学视频

--4.3.3 库和库声明 单元测验

--4.3.4库和库声明 讨论

-4.4 实体说明

--4.4.1 实体说明 导学

--4.4.2 实体说明 教学视频

--4.4.3 实体说明 单元测验

--4.4.4 实体说明 讨论

-4.5 结构体

--4.5.1 结构体 导学

--4.5.2 结构体 教学视频

--4.5.3 结构体 单元测验

--4.5.3 结构体 讨论

-4.6 VHDL预定义数据类型

--4.6.1 VHDL预定义数据类型 导学

--4.6.2 VHDL预定义数据类型 教学视频

--4.6.3 VHDL预定义数据类型 单元测验

--4.6.4 VHDL预定义数据类型 讨论

-4.7 常量、变量和信号

--4.7.1 常量、变量和信号 导学

--4.7.2 常量、变量和信号 教学视频

--4.7.3 常量、变量和信号 单元测验

--4.7.4 常量、变量和信号 讨论

-4.8 运算操作符和属性

--4.8.1 运算操作符和属性 导学

--4.8.2 运算操作符和属性 教学视频

--4.8.3 运算操作符和属性 单元测验

--4.8.4 运算操作符和属性 讨论

-4.9 IF语句和WAIT语句

--4.9.1 IF语句和WAIT语句 导学

--4.9.2 IF语句和WAIT语句 教学视频

--4.9.3 IF语句和WAIT语句 单元测验

--4.9.4 IF语句和WAIT语句 讨论

-4.10 CASE语句

--4.10.1 CASE语句 导学

--4.10.2 CASE语句 教学视频

--4.10.3 CASE语句 单元测验

--4.10.4 CASE语句 讨论

-4.11 LOOP循环语句

--4.11.1 LOOP循环语句 导学

--4.11.2 LOOP循环语句 教学视频

--4.11.3 LOOP循环语句 单元测验

--4.11.4 LOOP循环语句 讨论

-4.12 进程

--4.12.1 进程 导学

--4.12.2 进程 教学视频

--4.12.3 进程 单元测验

--4.12.4 进程 讨论

-4.13 条件信号赋值语句

--4.13.1 条件信号赋值语句 导学

--4.13.2 条件信号赋值语句 教学视频

--4.13.3 条件信号赋值语句 单元测验

-4.14 选择信号赋值语句

--4.14.1 选择信号赋值语句 导学

--4.14.2 选择信号赋值语句 教学视频

--4.14.3 选择信号赋值语句 单元测验

-4.15 元件例化语句

--4.15.1 元件例化语句 导学

--4.15.2 元件例化语句 教学视频

--4.15.3 元件例化语句 单元测验

--4.15.4 元件例化语句 讨论

-4.16 VHDL模块化设计

--4.16.1 VHDL模块化设计

--4.16.2 VHDL模块化设计 教学视频

--4.16.3 VHDL模块化设计 单元测验

--4.16.4 VHDL模块化设计 讨论

第五章 设计方法概述

-5.1 设计方法概述

--5.1.1 设计方法概述 导学

--5.1.2 设计方法概述 教学视频

--5.1.3 设计方法概述 单元测验

--5.1.4 设计方法概述 讨论

-5.2 EDA综合设计案例(1)— 数字钟的设计

--5.2.1 EDA综合设计案例1 导学

--5.2.2 EDA综合设计设计案例1— 数字钟的设计 教学视频

--5.2.3 EDA综合设计案例1 单元测验

--5.2.4 EDA综合设计案例1 讨论

-5.3 EDA综合设计案例(2)—16×16点阵控制器设计

--5.3.1 EDA综合设计案例2 导学

--5.3.2 EDA综合设计案例2—16×16点阵控制器设计 教学视频

--5.3.3 EDA综合设计案例2 单元测验

--5.3.4 EDA综合设计案例2 讨论

思政教育

-国产EDA技术如何突破?

4.5.2 结构体 教学视频笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。