第五讲VHDL语言程序的基本结构详解
《VHDL程序基本结构》课件
![《VHDL程序基本结构》课件](https://img.taocdn.com/s3/m/641d52c9d1d233d4b14e852458fb770bf78a3b9b.png)
VHDL程序基本结构示意图
VHDL程序基本结构
这是一张示意图,展示了VHDL程序的基本结构和各个部分之间的关系。
VHDL程序编写实例
这里将展示一个简单的VHDL程序编写实例,以帮助理解VHDL程序的应用和编 写方法。
总结
通过本课程,我们了解了VHDL程序的基本结构和编写方法,以及各个部分的功能和关系。希望这些知识对你 的学习和工作有所帮助。
VHDL程序的基本组成
VHDL程序由实体说明部分、 架构说明部分、信号声明与 处理部分和过程描述部分组 成。
VHDL程序的编写流程
编写VHDL程序的流程包括定 义实体、编写架构、声明信 号和编写过程。
实体说明部分
ห้องสมุดไป่ตู้
1 实体声明
实体声明定义了模块的输入输出接口,包括 输入输出端口和内部信号。
2 输入端口声明
输入端口声明用于定义模块的输入信号和其 属性,如信号类型和位宽。
3 输出端口声明
输出端口声明用于定义模块的输出信号和其 属性,如信号类型和位宽。
4 端口映射
端口映射将模块的输入输出端口与上层设计 连接起来,以实现功能。
架构说明部分
1
架构声明
架构声明定义了模块的行为逻辑和组成元素,包括信号和过程。
2
参考文献
1. VHDL程序设计教程 2. VHDL语言基础与应用 3. VHDL编程入门
信号赋值语句
信号赋值语句用于给信号赋予特 定的值,以实现逻辑功能。
信号处理语句
信号处理语句用于处理信号的逻 辑运算和状态转换,以实现电路 功能。
过程描述部分
过程声明
过程声明用于定义过程的名称 和输入输出参数。
过程体
VHDL语言的基本结构
![VHDL语言的基本结构](https://img.taocdn.com/s3/m/f66868fb770bf78a65295449.png)
4
一、VHDL语言设计的基本单元及其构成
3)端口说明 PORT(端口名{,端口名}:方向 数据类型; 是对设计实体与外部接口 的描述,即对元件引脚、 ┇ 数据类型和I/O方向的描述 端口名{,端口名}:方向 数据类型); 1端口名
设计实体
进程 或其它并行结构 结构体 n (ARCHITECTURE 进程 或其它并行结构
配置(CONFIGURATION)
VHDL程序设计实体的一般结构
2
VHDL语言的基本结构
主要内容
一、 VHDL语言设计的基本单元及其构成 二、 VHDL语言构造体的子结构描述 三、 包集合、库及配置
3
一、VHDL语言设计的基本单元及其构成
VHDL语言
15
二、VHDL语言构造体的子结构描述
【例】4位二进制加法计数器构造体逻辑描述。
SIGNAL cnt4:INTEGER RANGE O TO 15; ... PROCESS(clk,clear,Stop) BEGIN IF clear='0' THEN cnt4<=0; ELSIF clk'EVENT AND clk='1' THEN IF stop='0' THEN cnt4<=cnt4+1; END IF; END IF; END PROCESS; --注意cnt4的数据类型
存盘文件 为 bpac.vhd
VHDL程序的基本结构
![VHDL程序的基本结构](https://img.taocdn.com/s3/m/5d12facad05abe23482fb4daa58da0116c171ff5.png)
VHDL程序的基本结构(1)LIBRARY和PACHAGE的声明部分作⽤:库(Library)是⽤于存放预先编译好的程序(package),程序包中定义了数据集合体、逻辑操作和元件等。
主要是声明在设计或实体中将⽤到的常数,数据类型,元件及⼦系统等。
使⽤格式:LIBRARY 库名;USE 库名.程序包名.ALL;例如: LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;(2)ENTITY定义作⽤:定义本设计的输⼊/出端⼝,即定义电路的外观,即I/O接⼝的类型和数量使⽤格式:格式:ENTITY 实体名 ISport( 端⼝名:端⼝模式数据类型;........端⼝名:端⼝模式数据类型;)END 实体名;例:ENTITY MUX41A ISPORT (A,B,C,D,s0,s1,s2,s3 :IN STD_LOGIC;Y : OUT STD_LOGIC);END ENTITY MUX41A;(3)ARCHITECTURE定义作⽤:定义实体的实现。
即电路的具体描述,说明电路执⾏什么动作或实现功能。
使⽤格式:ARCHITECTURE 结构体名 of 实体名 ISbegin描述语句;end 结构体名;例如:ARCHITECTURE BHV OF MUX41A ISSIGNAL S:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINS <= s3 & s2 & s1 & s0 ;Y<=A WHEN S="1110" ELSEB WHEN S="1101" ELSEC WHEN S="1011" ELSED WHEN S="0111" ELSE‘1’;END BHV;。
VHDL程序结构
![VHDL程序结构](https://img.taocdn.com/s3/m/9f72ba7e51e79b89680226ee.png)
过程(PROCEDURE)
过程语句的结构:
PROCEDURE 过程名(参数1;参数2;… )IS [定义语句];
BEGIN [顺序处理语句];
END 过程名;
过程语句的调用格式: 过程名(实际参数表);
例: 设计一个从两个整数中求取最大值的过程。
PROCEDURE max(a, b: IN INTEGER;
E
C
T
PROCESSn
进进程程和和进进程程 之之间间是的并数行据 的交换通过信 号完成
U
进程内部是
R E
顺序语句
2.5 子程序( SUBPROGRAM )
过程(PROCEDURE) VHDL的子程序有两种类型: 函数(FUNCTION)
子程序的特点:
➢ 子程序可以在结构体或程序包的任何位置被调用,而且可以 反复调用。
端口模式 端口数 据类型
端口模式
用来说明数据传输通过该端口
的方向。
Entity
IN: 数据只能从端口流入实体
OUT: 数据只能从端口流出实体
INOUT: 数据从端口流入或流出实体
BUFFER:
数据从端口流出实体,同时
可被内部反馈
IN OUT
INOUT
BUFFER
Out与Buffer的区别
• Entity test1 is port(a: in std_logic; b,c: out std_logic ); end test1;
黑盒
co:
OUT std_logic);
END端b口la模ck式_box; 端口数
据类型
rst d[7:0] clk
q[7:0] co
实体结束
第五讲 VHDL语言程序的基本结构
![第五讲 VHDL语言程序的基本结构](https://img.taocdn.com/s3/m/a1974ea20029bd64783e2c40.png)
端口说明
端口说明是对基本设计实体(单元)与外部接口的描 述,也可以说是对外部引脚信号的名称,数据类型和 输入,输出方向的描述; 其一般书写格式为: PORT(端口名{,端口名}:方向 数据类型名; 端口名{,端口名}:方向 数据类型名); 举例: PORT(d0,d1,sel : IN BIT; q : OUT BIT; bus : OUT BIT_VECTOR(7 DOWNTO 0) );
敏感信号: 只要有一个发 生变化(如由 "0"变成"1" 或由"1"变为 "0")都将启 动PROCESS语 句.
PROCESS语句的特点
(1) 进程内部的所有语句都是顺序执行的. (2) 多进程之间,是并行执行的,并可访问构 造体或实体中所定义的信号. (3) 进程的启动是由进程标识符Process后的 敏感信号来触发,也可用WAIT语句等待一个 触发条件的成立. (4) 各进程之间的通信是由信号来传递的.
第2章 VHDL语言程序的基本结构 章 语言程序的基本结构
主要内容
VHDL语言设计的基本单元及其构成 : 语言
实体 + 构造体
VHDL语言构造体的子结构描述 : 语言
块,进程,子程序
包集合, 包集合,库及配置
一个完整的VHDL语言程序 通常包含5个部分:
必 备 部 分
库,包集合 实体(Entity)
构造体:描述系统内部的结构和行为;
包集合:存放各种设计模块都能共享的数据类型, 常数和子程序等; 库: 存放已经编译的实体,构造体,包集合和 配置.
前四种是可分别编译的源设计单元
2.1 VHDL语言设计的基本单元及其构成 语言 实体+构造体 构造体) (实体 构造体)
vhdl 程序的基本结构 vhdl程序一般由5个部分组成
![vhdl 程序的基本结构 vhdl程序一般由5个部分组成](https://img.taocdn.com/s3/m/b521593c4a7302768f99390d.png)
块语句
块标号:BLOCK[保护表达式] [类属子句;] [端口子句;] [块说明部分;] BEGIN <块语句部分;> END BLOCK 块标号;
类属子句用于参数的定义;端口子句用于信号的定义; 块说明部分对该块要用到的信号、常数、元件和子程序 等进行说明;块语句部分对该块的功能进行描述,块语 句部分的语句是并行执行的,和书写顺序无关。
IEEE: IEEE认可的标准库 std_logic_1164:定义了 std_logic, std_logic_vector, std_ulogic, std_ulogic_vector 等数据类型
VHDL 程序的基本结构
VHDL程序一般由5个部分组成: Library(库) Package(程序包)
CONFIGURATION small_count OF counter IS FOR count_255 END FOR; END small_count; CONFIGURATION big_count OF counter IS FOR count_64K END FOR; END big_count;
Library(程序库) Package(程序包)
Entity(实体) Architecture(构造体) Configuration(配置)
库和程序包
库 :存放已编译过的实体、构造体、 程序包和配置 程序包:由一组对外可见的信号、常量、 数据类型、子程序、属性等组成 的程序集合
库和程序包的使用
子程序调用语句 过程名(参数表);
子程序调用语句若位于 “构造体” 或 “块语句” 中,它就是并发语句; 若位于 “进程语句” 或 另一个“子 程序”中,它就是顺序语句;
VHDL语言的程序结构与数据类型
![VHDL语言的程序结构与数据类型](https://img.taocdn.com/s3/m/096bef63842458fb770bf78a6529647d272834bd.png)
VHDL语言的程序结构与数据类型VHDL语言的程序结构与数据类型第2节 VHDL语言的程序结构与数据类型[学习要求] 掌握VHDL硬件描述语言的基本语法和源文件的结构,学会用VHDL硬件描述语言设计典型数字逻辑电路。
[重点与难点]重点:VHDL语言的程序结构;VHDL语言的数据类型及数据对象。
难点:VHDL的数据对象中的变量和信号的区别。
[理论内容]一、VHDL的程序结构图1 VHDL的程序结构图图1中是VHDL的全部结构,但实际上并不需要全部的结构,就像在许多设计项目中,大部分工程师只用到VHDL其中的30%的语法。
通常图2的结构才是基本和必需的。
USE定义区ENTITY定义区ARCHITECTURE定义区图2 VHDL程序的基本结构由于VHDL已是IEEE规定的标准,所以只是CPLD、FPGA等芯片公司,它们都会提供这个标准的定义库(Library IEEE),而且由于这里面写了许多的定义和参数,初学者一时之间也不容易全部了解,所以全部写上以减轻负担,后面的章节的程序默认也这么写。
程序如: USE IEEE.STD_LOGIC_1164.ALL; 代表本程序引用IEEE 标准定义库的STD_LOGIC_1164全部定义。
VHDL语言编写是属于自由格式,所以在一个完整命令叙述写完时,必须为它加上“;”,作为前后命令的分界,如上述的Use定义命令。
程序的注释采用“--”Entity部分是用来定义电路的输入和输出所用。
定义区的命令格式为:Architecture部分是描述这个电路的功能部分,其书写的语法因具体电路的功能而定,下一节将详细介绍。
_以下是一个简单的例子:library ieee; --采用ieee标准库use ieee.std_logic_1164.all; --使用其中的定义包,以后照着写即可use IEEE.STD_LOGIC_UNSIGNED.all; --同上use IEEE.STD_LOGIC_ARITH.all; --同上entity test is --定义实体名port( --以下是定义输入输出端口pin1 : in std_logic; --pin1为输入端口,数据类型为std_logic pin2 : in std_logic; --同上pin3 : out std_logic --pin3为输出端口,数据类型为std_logic ); --端口定义完成end test; --实体描述完成architecture behavior of test is --定义结构体begin --结构体开始pin3<=pin1 and pin2; --该语法表示将pin1和pin2相与送至pin3end behavior; --结构体描述完成其实VHDL语言在书写上和高级语言的描述十分相似(风格更似于Ada语言),与C语言的比较如图3所示,大家不要把它看得很神秘。
第3章_VHDL语言程序的基本结构
![第3章_VHDL语言程序的基本结构](https://img.taocdn.com/s3/m/5ed640a0360cba1aa911da18.png)
VARIABLE tmp1,tmp2,tmp3:BIT;
BEGIN tmp1:=d0 AND sel;
构造体
tmp2:=d1 AND (NOT sel);
tmp3:=tmp1 OR tmp2;
tmp<=tmp3;
q<=tmp AFTER m;
END PROCESS cale;
END ARCHITECTURE connect;
该 例 中 BIT 类 型 用 STD_LOGIC 说 明 , 而 bus 则 用 STD_LOGIC_VECTOR(7 DOWNTO 0)说明。 在用STD_LOGIC和STD_LOGIC_VECTOR说明时,在实体说明以前 必须增加例中所示的两个语句,以便在对VHDL语言程序编译时,从 指定库的包集合中寻找数据类型的定义。
END BLOCK cale; END connect;
END ARCHITECTURE behav;
信号定义和端口说明的语句一样,应有信号名和 数据类型的说明。因它是内部连接用的信号,故没有 也不需要有方向说明。
3、 并行处理语句
并行处理语句处于语句BEGIN和END之间,这 些语句具体地描述了构造体的行为及其连接关系。例 如,二选一的数据流方式描述可以写为:
第三章 VHDL语言程序的基本结构
VHDL语言程序的五个组成部分
库说明
包集合说明
基 实体说明
本 单
元 构造体描述
配置语句
库存放已编译的实体、构造体、包集合、和配 置。相当于书库。 包集合存放各设计模块能共享的数据类型、常数和 子程序。相当于书架。
实体用于说明所设计的系统的外部接口信号。
构造体用于描述系统内部的结构和行为。
VHDL语言程序的结构.
![VHDL语言程序的结构.](https://img.taocdn.com/s3/m/ae9d326f7fd5360cba1adb5e.png)
方向定义 IN 输入 含 义
OUT
INOUT BUFFER
输出(结构体内不能再使用)
双向(可以输入,也可以输出) 输出(结构体内可再使用),可以读或写
其中, BUFFER 是 INOUT 的子集,它与 INOUT 的区别在于: INOUT是双向信号,既可以输入,也可以输出,而BUFFER也是实 体的输出信号。
VHDL语言及应用(三)
实体说明——端口说明
端口类型: 指的是端口信号的取值类型。
BIT 二进位类型,取值只能是0、1,由STANDARD程序包定义。 BIT_VECTOR 位向量类型,表示一组二进制数,常用来描述地址 总线、数 据总线等端口。
STD_LOGIC 工 业标 准的 逻 辑 类 型 ,取值 0 、 1 、 X 、 Z 等,由 STD_LOGIC_1164程序包定义。 STD_LOGIC_VECTOR STD_LOGIC的组合。 INTEGER 信号。 工业标准的逻辑向量类型,是
器 件 and2的 外 ENTITY and2 IS --实 体 名 称 为 and2 部引脚说明, PORT(a, b: IN BIT; --a、 b是 两 个 输 入 引 脚 这部分称为实 c: OUT BIT); --c为 输 出 引 脚 体 END and2;
AND2 A B 0 A B C C
AND2的电路符号
VHDL语言及应用(三)
VHDL程序的一般结构
结构体部分给出了该器件的内部功能信息,是对实体
功能的具体描述。
ARCHITECTURE exam1 OF and2 IS --结 构 体 exam1是 对 实 体 器 件 and2的 内 BEGIN --and2的 内 部 描 述 , 描 述 部功能说明, c<=a AND b; --了 and2器 件 的 内 部 功 能 这部分称为结 --为 实 现 一 个 2输 入 端 与 门 构体 END exam1;
VHDL语言的结构
![VHDL语言的结构](https://img.taocdn.com/s3/m/c0e353bb960590c69ec376d0.png)
BEGIN
[功能描述语句]
END 结构体名;
2.1 结构体名 结构体名由设计者自行定义,OF后面的 实体名指明了该结构体所对应的是哪个实体。 有些设计实体有多个结构体,这些结构体的 结构体名不可相同,通常用dataflow(数据 流)、behavior(行为)、structural(结构)
命名。这3个名称体现了3种不同结构体的描
实体语句结构如下:
ENTITY 实体名 IS [GENERIC(类属表);] [PORT(端口表);]
END ENTITY 实体名;
例: ENTITY or2 IS
PORT(a,b:IN STD_LOGIC;
C: OUT STD_LOGIC);
END ENTITY or2;
注意:实体应以语句“ENTITY 实体名 IS”开始,语句“END ENTITY 实体名;” 结束。 在层次化系统设计中,实体说明是整个 模块或整个系统的输入输出(I/O)接口; 在一个器件级的设计中,实体说明是一个 芯片的输入输出(I/O)。
图中5种功能描述语句的基本组成和功能分别 是:
块语句是由一系列并行语句构成的组合体, 它的功能是将结构体中的并行语句组成一个 或多个子模块。
进程语句定义顺序语句模块,用以将从外部 获得的信号值或内部运算数据向其他的信号 进行赋值。
信号赋值语句将设计实体内的处理结果向定 义的信号或界面端口进行赋值。 子程序调用语句可以调用进程或参数,并将 获得的结果赋值于信号。 元件例化语句对其他的设计实体做元件调用 说明,并将此元件的端口与其他元件、信号 或高层实体的界面端口进行连接。 各语句后面将介绍
PROCESS语句的结构
[进程标号] PROCESS [(敏感信号表)] [IS] [进程说明语句] BEGIN 顺序描述语句
简述VHDL的基本结构及每部分的基本功能。
![简述VHDL的基本结构及每部分的基本功能。](https://img.taocdn.com/s3/m/2f58fa3cabea998fcc22bcd126fff705cc175cf3.png)
简述VHDL的基本结构及每部分的基本功能。
1.1. 简述VHDL的基本结构及每部分的基本功能。
(1)库库是经编译后的数据集合,库中存放的是各种程序包、实体定义、结构体描述等。
设计人员在用VHDL 语言设计系统时,库中内容有的可作为标准,有的可作为资源被引用。
库的作用就在于使设计者可以共享已经编译过的设计文件及有用数据。
(2)程序包程序包是VHDL程序的公共存储区,在程序包内说明的数据对实体是透明的。
程序包由程序包说明和程序包体组成。
(3)实体实体可以表示小到一个与门,也可以大到一个数字系统,这个系统可以像微处理器一样的复杂。
在实体的说明部分主要完成设计对象的输入输出端口名称、传输方向、数据类型的定义,即端口的定义。
(4)结构体结构体是设计实体的具体描述,如果把设计实体抽象为一个功能方块图,结构体则描述这个功能方块图内部的具体逻辑实现细节。
一个设计实体的内部实现细节通过结构体的具体描述表现出来。
(5)配置配置是用于描述设计不同层次之间的关系和实体与结构体之间的连接关系。
在实体与结构体之间的连接关系配置说明中,设计者可以利用配置语句为实体提供不同的结构体与之相匹配。
在仿真设计中,可以利用不同配置方式选择不同结构体,分别对不同结构体进行仿真测试。
2. 简述VHDL语言实体申明中:IN、OUT、BUFFER和INOUT 等端口模式各自的特点。
IN:输入型,只读模式。
OUT:输出型,只写。
BUFFER:缓冲型,带有读功能的输出模式,即输出并向内部反馈,out相似,但可读。
INOUT:输入输出型,可读可写,可以通过该端口读入或写出信息。
3. 在VHDL语言中,标识符必须遵循一些规则,有哪些规则?(1)标示符的第一个字母必须是英文字母。
(2)标示符的最后一个字母不能使下划线字符。
(3)标示符不允许连续出现两个下划线字符。
(4)标示符不区分字母的大小写。
(5)VHDL的保留字不能用于作为标示符使用。
4. VHDL的数据对象有哪几种,它们之间有什么不同?答:VHDL的数据对象包括信号、常量、变量和文件4类。
VHDL语言程序的基本结构
![VHDL语言程序的基本结构](https://img.taocdn.com/s3/m/0dbdb880a417866fb94a8e83.png)
d0
&
≥1 q
d1
&
1 sel
图2-1 二选一选择器的电原理图
【例2-5】 图2-1的VHDL语言描述: ENTITY mux2 IS GENERIC(m: TIME:=1ns); PORT(d0,d1,sel: IN BIT;
bus: OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END mu;
该例中BIT类型用STD_LOGIC替代,而bus则用 STD_LOGIC_VECTOR(7 DOWNTO 0)说明。这样做在语法上都是 对的,所不同的是BIT、BIT_VECTOR与STD_LOGIC、 STD_LOGIC_VECTOR尽管都同样描述位和位矢量,但是它们的数 据类型是不一样的,前者只有两种状态“1”和“0”;而后者却有9 种状态(这一点在后面详述)。BIT和BIT_VECTOR在VHDL语言的 标准库(STD库)中定义,使用该类型数据可以不作任何说明。 STD_LOGIC和STD_LOGIC_VECTOR在IEEE库的 1164 包集合中定 义。在该包集合中专门对STD_LOGIC和STD_LOGIC_VECTOR数 据类型的定义作了具体说明,其作用像C语言中的include文件一样。 正如例2-7 所示那样,如果在实体和构造体中要使用这种类型的数 据,就必须在实体描述前加两条语句:库说明语句和使用包集合的 说明语句。这样可以使VHDL语言的编译器在对实体编译时从指定 库的包集合中找到数据类型的定义。
表2-1 端口方向说明
方向定义
含义
IN 输入端口
输入
OUT 输出端口
输出(构造体内部不能再使用)
EDA技术及应用 (5)
![EDA技术及应用 (5)](https://img.taocdn.com/s3/m/fe3360b4a26925c52dc5bf53.png)
第 5 章 VHDL程序结构
表 5-1 端口模式说明
端口模式
端口模式说明(以设计实体为主体)
IN
OUT
BUFFER INOUT LINKAGE
输入,只读模式,将变量或信号信息通过该端口读入,与 IN、INOUT 及 BUFFER 型端口连接
输出,单向赋值模式,将信号通过该端口输出,与 OUT、INOUT 及 BUFFER 型端 口连接
第 5 章 VHDL程序结构
3. PORT端口 端口类似于原理图部件符号上的管脚,实体通过端口与外界 通信。 实体端口格式如下:
PORT(端口名:端口模式 数据类型; 端口名:端口模式 数据类型);
第 5 章 VHDL程序结构
(1) 端口名:由设计者定义的与外部通信的引脚名称,命名 应符合VHDL命名规则。
(5) 为了使同一个VHDL源程序文件能适应各个EDA开发软件 的使用要求,建议各个源程序文件的命名均与其实体名 一致。
第 5 章 VHDL程序结构
5.1 实 体
1. 实体语句结构 实体语句结构如下: ENTITY 实体名 IS
[GENERIC(类属表);] [PORT(端口表);] END [ENTITY] 实体名;
第 5 章 VHDL程序结构 (2) STD库。VHDL语言定义了两个标准程序包,即STANDARD
和TEXTIO程序包,它们都被收入在STD库中。只要在VHDL应用环 境中,可随时调用这两个程序包中的所有内容,即在编译和综合 过程中,VHDL的每一项设计都自动地将其包含进去了。由于STD 库符合VHDL语言标准,因而在应用中不必如IEEE库那样显式表达 出来。
第 5 章 VHDL程序结构 【例5.3】 构造体功能描述举例。 ARCHITECTURE bhv OF dff2 IS Signal Q1:STD_LOGIC; BEGIN PROCESS(clk0,cl) BEGIN
VHDL基本结构与语法
![VHDL基本结构与语法](https://img.taocdn.com/s3/m/de6fe4350740be1e650e9aa3.png)
第5章 VHDL 基本结构与语法本章通过几个例题介绍VHDL 语言的基本结构和语法规则5.1 VHDL 基本结构一个相对完整的VHDL 设计由以下四部分组成:(1) 库LIBRARY 、程序包PACKAGE :库用于存储预先完成的程序包和数据集合体;程序包用于声明在设计中将要用到的常数、数据类型、元件及子程序等。
(2) 实体ENTITY :定义设计的输入输出端口。
(3) 结构体ARCHITECTURE :定义实体的实现,即电路的具体描述。
可有多个结构体,但只有一个起作用。
(4) 配置CONFIGURA TION :为实体选定某个特定的结构体。
以上四个部分不是每个VHDL 程序必须的,但每个VHDL 程序至少含有1个实体和1个结构体。
1个实体可有多个结构体,通过配置选择1个结构体对实体起作用,其他结构体不起作用。
当只有1个结构体时不要实体。
【例5-1】2选1多路数据选择器,其功能见图5-1。
功能描述为当S=0时A 送Y , S=1时B 送Y 。
其对应的VHDL 描述为:ENTITY mux21a IS --给出实体名mux21a 和管脚定义 PORT (a,b : IN BIT ;s : INBIT ; y : OUT BIT );END mux21a ;ARCHITECTURE one OF mux21a IS --结构体,描述电路器件的内部逻辑 BEGIN功能或电路结构。
y <=a WHEN s=’0’ ELSE b;END one ;综合后结构体的门电路见图5-3。
5.1.1 实体ENTITY :定义本设计的输入输出端口/信号。
图5-1 例5-1功能示意图图5-3 例5-1综合后的门电路A S约定:[]表示为可选项;--开始的语句为注释,不参与编译和综合;黑体单词为保留字。
1、实体框架:ENTITY实体名IS--此处无分号[GENERIC(常数名:数据类型[:设定值]);]PORT - -端口定义(端口1:端口模式端口类型;…端口n:端口模式端口类型- -最后一个无分号);END[ENTITY] 实体名;注:END中带ENTITY、ARCHITECTURE为IEEESTDl076_1993版的语法要求,不带为IEEESTD1076 1987的语法要求。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
•
主要内容
VHDL语言设计的基本单元及其构成 :
实体 + 构造体
•
VHDL语言构造体的子结构描述 :
块、进程、子程序
•
包集合、库及配置
一个完整的VHDL语言程序 通常包含5个部分:
必 备 部 分
库、包集合 实体(Entity)
实体(Entity)
结构体
构造体Architecture)
构造体的一般书写格式为: ARCHITECTURE 构造体名 OF 实体名 IS
[定义语句]内部信号,常数,数据类型,函数等的定义;
BEGIN [并行处理语句]; END 构造体名;
构造体名称的命名
构造体名称由设计者自由命名,是构造体的唯一名 称。OF后面的实体名称表明该构造体属于哪个设计 实体,有些设计实体中可能含有多个构造体。这些 结构体的命名可以从不同侧面反映结构体的特色, 让人一目了然。例如:
子程序(SUBPROGRAM)结构。
2.2.1 BLOCK语句结构描述
块(BLOCK)可看作构造体中子模块,BLOCK可以把许多语 句包装在一起。在 VHDL 语言中,电路的构造体对应整个 电 路 图 , 而 构 造 体 可 以 由 多 个 BLOCK 块 构 成 , 每 一 个 BLOCK块对应一张子原理图。 BLOCK语句的一般格式如下: 块结构名: BLOCK BEGIN <并行语句A> … END BLOCK 块结构名;
子程序(subprogram)分两类:
过程(PROCEDURE)和函数(FUNCTION)。
过程语句的一般书写格式为: PROCEDURE 过程名(参数1;参数2;…) IS [定义语句]; --变量等定义 BEGIN [顺序处理语句] --过程语句 END 过程名;
举例: 用过程实现:把位矢量转换为整数类型。
PROCESS语句的特点
(1) 进程内部的所有语句都是顺序执行的。
(2) 多进程之间,是并行执行的,并可访问构 造体或实体中所定义的信号。
(3) 进程的启动是由进程标识符 Process 后的 敏感信号来触发,也可用 WAIT 语句等待一个 触发条件的成立。
(4) 各进程之间的通信是由信号来传递的。
端口说明
端口说明是对基本设计实体(单元)与外部接口的描 述,也可以说是对外部引脚信号的名称,数据类型和 输入、输出方向的描述; 其一般书写格式为: PORT(端口名{,端口名}:方向 数据类型名; 端口名{,端口名}:方向 数据类型名); 举例: PORT(d0,d1,sel : IN BIT; q : OUT BIT; bus : OUT BIT_VECTOR(7 DOWNTO 0) );
PROCEDURE Bitvector_to_integer (z: IN STD_LOGIC_VECTER; X_flag: OUT Boolean; q: INOUT INTEGER) IS BEGIN q := 0; X_falg := FALSE; FOR i IN Z' RANGE LOOP q := q * 2; IF (Z(i) = 1) THEN q := q + 1; ELSE IF (Z(i) /= 0 ) THEN X_flag := TRUE; ENDIF; END LOOP; END Bitvector_to_integer;
卫式BLOCK(Guarded BLOCK): 可实现BLOCK的执行控制,当满足一定条件时 BLOCK语句才被执行。 卫式BLOCK举例:
ARCHITECTURE latch_guard OF latch IS BEGIN 格式:BLOCK[卫式布尔表达式] 当卫式尔表达式为真时,BLOCK语 句被执行,否则不被执行。
包集合:存放各种设计模块都能共享的数据类型、
常数和子程序等;
库:
存放已经编译的实体、构造体、包集合和
配置。
前四种是可分别编译的源设计单元
2.1 VHDL语言设计的基本单元及其构成 (实体+构造体)
ENTITY mux IS GENERIC(m:TIME:=1 ns); PORT(d0,d1,sel:IN BIT; q:OUT BIT); END mux; ARCHITECTURE connect OF mux IS SIGNAL tmp:BIT; BEGIN cale:PROCESS(d0,d1,sel) VARIABLE tmp1,tmp2,tmp3:BIT; BEGIN tmp1:=d0 AND sel; tmp2:=d1 AND (NOT sel); tmp3:=tmp1 OR temp2; tmp<=tmp3; q<=tmp AFTER m; END PROCESS; END connect; 实体说明部分
构造体定义部分
注意:一个电路系统的程序设计中只有一个实体,可以有多个构造体。
2.1.1 实体说明
实体说明具有如下结构: ENTITY 实体名 IS [类属参数说明]; [端口说明]; END 实体名; 举例: ENTITY mux IS GENERIC(m:TIME:=1 ns); PORT(d0,d1,sel:IN BIT; q:OUT BIT ); END mux;
ARCHITECTURE behacvioral OF mux IS 用结构体行为命名 ARCHITECTURE dataflow OF mux IS 用结构体数据流命名
ARCHITECTURE structural OF mux IS
用结构体组织结构命名
ARCHITECTURE bool OF mux IS 用结构体的数学表达方式命名 ARCHITECTURE latch OF mux IS 用结构体的功能来命名
构造体对其基本设计单元的输入输出关系有三 种描述方式 : (1) 行为描述: 对设计实体按算法的路径来描述。采用进程语 句顺序描述设计实体的行为和功能。 (2) 寄存器传输描述(数据流描述): 通过描述数据流程的运动路径、方向和运动 结果,实现设计实体的行为和功能。 (3) 结构描述(逻辑元件连接描述): 采用并行处理语句描述设计实体内的结构组 织和元件互连关系。通常用于层次式设计。
LINKAGE
不指定方向,无论哪一个方向都可连接
(3)数据类型:VHTD_LOGIC和STD_LOGIC_VECTOR
使用时需要加入以下两个语句:
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;
练习
试写出半加器的实体描述: 如右图所示 a,b 为半加器的输入端口, s,co 为输出信号, s 为和信号, co 为 进位信号。
a b
co s
2.1.2 构造体
构造体(Architecture)具体指明了该设计 实体的行为,定义了该设计实体的功能,规 定了该设计实体的数据流程,指派了实体中 内部元件的连接关系。
定义语句
定义语句位于ARCHITECTURE 和BEGIN之间,用于 对构造体内部所使用的信号、常数、数据类型和函数 进行定义。 举例:ARCHITECTURE behav OF mux IS SIGNAL tmp:BIT; BEGIN END behav; 构造体的信号定义和实体的端口说明一样,应有信号 名称和数据类型定义,但不需要定义信号模式,不用 说明信号方向,因为是结构体内部连接用信号。
块结构举例:
ENTITY mux IS PORT(d0,d1,sel:IN BIT; q:OUT BIT); END mux; ARCHITECTURE connect OF mux IS SIGNAL tmp1,tmp2,tmp3:BIT; BEGIN Cale: BLOCK -- BLOCK语句无条件执行 BEGIN tmp1<=d0 AND sel; -- BLOCK语句中各个语句是 --并行执行的 tmp2<=d1 AND(NOT sel); tmp3<=temp1 OR tmp2; q<=tmp3; END BLOCK cale; END connect;
配置(Configuration) 包集合(Package) 库(Library)
(Architecture)
进程、 块、子程序
配置Configuration)
实体: 描述所设计的系统的外部接口信号;
构造体:描述系统内部的结构和行为; 配置: 用于从库中选取所需要单元来组成系统设 计的不同版本;
… …
并行处理语句
具体描述构造体的行为及其连接关系。
在构造体中的语句都是可以是并行执行的, 语句的书写顺序不决定语句的执行顺序。 所谓“并行”,指的是这些并行语句之间没 有执行顺序的先后之分。
2.2 构造体的子结构描述
构造体子结构描述的三种形式:
块(BLOCK)语句结构;
进程(PROCESS)语句结构;
G1:
BLOCK(clk=‘1’) BEGIN
q<=GUARDED d AFTER 5 ns; qb<= GUARDED NOT(d) AFTER 7 ns; END BLOCK g1; END latch_guard;
2.2.2 PROCESS语句结构描述
进程语句是并行处理语句,即各个进程是同 时处理的,在一个结构体中多个Process语句 是同时并发运行的。
使用WAIT语句的PROCESS书写格式如下:
[进程名:]PROCESS 变量说明语句: BEGIN WAIT UNTIL (激活进程的条件) 顺序说明语句 END PROCESS [进程名];