0501-VHDL程序的基本结构
合集下载
vhdl程序的基本结构vhdl程序一般由5个部分组成
块语句
块标号:BLOCK[保护表达式] [类属子句;] [端口子句;] [块说明部分;] BEGIN
<块语句部分;>
; END BLOCK 块标号
类属子句用于参数的定义;端口子句用于信号的定义; 块说明部分对该块要用到的信号、常数、元件和子程序 等进行说明;块语句部分对该块的功能进行描述,块语 句部分的语句是并行执行的,和书写顺序无关。
缺省说明: library std; use std.standard.all;
常用库及其程序包
IEEE: IEEE认可的标准库 std_logic_1164:定义了 std_logic, std_logic_vector, std_ulogic, std_ulogic_vector 等数据类型
VHDL 程序的基本结构
设计实体
实体说明
构造体
设计实体的组成
实体说明
Entity <实体名> is
[类属说明;] [端口说明;]
[实体说明部分;] [实体语句部分;] End [entity]<实体名>;
最简单的例: entity nothing is end nothing;
实体说明--类属说明
类属为设计实体和外部环境通讯的静态通信提供通道。可以定
实体说明--实体语句部分
是设计实体接口的共同部分。只能由并行断 言语句、并行过程调用语句、被动进程语 句组成,且不能在语句中给信号赋值。
设计实体
实体说明
构造体
设计实体的组成
构造体
architecture <构造体名> of <实体名> is
[构造体说明语句;]
Begin
<功能描述语句;>
第三章 VHDL语言程序的基本结构2
4.缓冲(BUFFER) 缓冲模式允许信号输出到实体外部,但同时也可以在实体内
部引用该端口的信号。缓冲端口既能用于输出也能用于反馈。缓 冲模式用于在实体内部建立一个可读的输出端口,例如计数器输 出、计数器的现态用来决定计数器的次态。 端口模式可用图下说明,图中方框代表一个设计实体或模块。
IN
OUT
3.2 结构体
结构体也叫构造体,结构体描述了基本设计单元(实体) 的结构、行为、元件及内部连接关系,也就是说它定义了设 计实体的功能,规定了设计实体的数据流程,制定了实体内 部元件的连接关系。结构体对其基本设计单元的输入和输出 关系可用以下三种方式进行描述,即行为描述(基本设计单 元的数学模型描述)、寄存器传输描述(数据流描述)和结 构描述(逻辑元件连接描述)。
且不能改变,而类属参量的值可由设计实体的外部提
供。因此设计者可以从外面通过类属参量的重新设定 而容易的改变一个设计实体或一个元件的内部电路结 构和规模。
例: GENERIC (trise,tfall:TIME:=1ns; Addrwidth:INTEGER:=16); PORT(a0, a1 : IN STD_LOGIC; Add_bus:OUT STD_LOGIC_VECTOR(addrwidth-1 DOWNTO 0);
INOUT
BUFFER
在VHDL设计中,通常将输入信号端口指定为输 入模式,输出信号端口指定为输出模式,而双向数 据通信信号,如计算机PCI总线的地址/数据复用总
线,DMA控制器数据总线等纯双向的信号采用双向
端口模式。从端口的名称、模式就能一目了然地指
导信号的用途、性质、来源和去向。
Out与Buffer的区别
END rtl;
结构体--行为描述
VHDL语言的基本结构
1 实体说明 1)实体语句结构 ENTITY 实体名 IS [GENERIC(类属表);] [PORT(端口表);] END ENTITY 实体名 2)类属参数说明 GENERIC([常数名:数据类型[:设定值] {;常数名:数据类型[:设定值]};
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
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语言程序的基本结构
端口说明
端口说明是对基本设计实体(单元)与外部接口的描 述,也可以说是对外部引脚信号的名称,数据类型和 输入,输出方向的描述; 其一般书写格式为: 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程序基本结构
子程序调用语句用于调用一个已设计好的子程序。 信号赋值语句将设计实体内的处理结果向定义的信号或界 面端口进行赋值。 元件例化语句对其他的设计实体作元件调用说明。
1) BLOCK块语句
使用BLOCK语句描述的格式如下: [块标号:]BLOCK BEGIN END BLOCK [块标号];
【例2.6】 用块语句实现的二选一电路
结构体不能单独存在,它必须有一个界面说明,即一个 实体。
对于具有多个结构体的实体,必须用CONFIGURATION 配置语句指明用于综合的结构体和用于仿真的结构体,即 在综合后的可映射于硬件电路的设计实体中,一个实体只 对应一个结构体。
在电路中,如果实体代表一个器件符号,则结构体描述 了这个符号的内部行为。
类属说明的一般书写格式如下: GENERIC([常数名;数据类型[:设定值] {;常数名:数据类型[:设定值 ]});
【例2.2】2输入与门的实体描述
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY AND2 IS
GENERIC(RISEW:TIME:=1 ns; FALLW:TIME:=1 ns);
【例2.9】 PROCEDURE语句应用
PROCEDURE vector_to_int (q:IN INTEGER; x_flag :OUT BOOLEAN; z:IN STD_LOGIC_VECTOR) IS
BEGIN q:=0; x_flag:=FALSE;
FOR i IN z’RANGE LOOP q:=q*2;
PROCEDURE 过程名(参数1,参数2) IS [定义语句]; BEGIN [顺序处理语句];
END 过程名;
●函数语句 FUNCTION 函数名(参数1,参数2)RETURN数据类型名 IS
1) BLOCK块语句
使用BLOCK语句描述的格式如下: [块标号:]BLOCK BEGIN END BLOCK [块标号];
【例2.6】 用块语句实现的二选一电路
结构体不能单独存在,它必须有一个界面说明,即一个 实体。
对于具有多个结构体的实体,必须用CONFIGURATION 配置语句指明用于综合的结构体和用于仿真的结构体,即 在综合后的可映射于硬件电路的设计实体中,一个实体只 对应一个结构体。
在电路中,如果实体代表一个器件符号,则结构体描述 了这个符号的内部行为。
类属说明的一般书写格式如下: GENERIC([常数名;数据类型[:设定值] {;常数名:数据类型[:设定值 ]});
【例2.2】2输入与门的实体描述
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY AND2 IS
GENERIC(RISEW:TIME:=1 ns; FALLW:TIME:=1 ns);
【例2.9】 PROCEDURE语句应用
PROCEDURE vector_to_int (q:IN INTEGER; x_flag :OUT BOOLEAN; z:IN STD_LOGIC_VECTOR) IS
BEGIN q:=0; x_flag:=FALSE;
FOR i IN z’RANGE LOOP q:=q*2;
PROCEDURE 过程名(参数1,参数2) IS [定义语句]; BEGIN [顺序处理语句];
END 过程名;
●函数语句 FUNCTION 函数名(参数1,参数2)RETURN数据类型名 IS
VHDL 基本结构
库library: 存放已经编译好的实体、构造体、包集合和配置
U t Eq jIX d U t Eq jIX d
3.1 VHDL语言设计的基本单元及其构成
VHDL语言设计的基本单元就是一个设计实体。
初级设计单元
ENTITY ent1 IS }... BEGIN }... END ENTITY ent1; CONFIGURATION cfg1 OF ent1 IS }... END CONFIGURATION cfg1;
VHDL语言基本单元组成:实体说明+构造体说明 例如:二选一电路设计单元的VHDL描述:
LOGO
ENTITY mux IS generic(m:time:=1ns); PORT(d0,d1,sel:in bit; q:out bit); END mux;
d0 d1
q
sel
Architecture dataflow of mux is Begin process(d0,d1,sel) begin tmp1:=d0 and sel; tmp2:=d1 and (not sel); tmp3:=tmp1 or tmp2; q<=tmp3 after m; end process; End dataflow;
LOGO
构造体是用于描述设计实体的内部结构(元件及内部的 连接关系)以及实体端口间的逻辑关系(实体的行为)。
注意:构造体一定要跟在实体说明的后面。 构造体的描述方法:行为级描述、RTL(数据流)级 描述、结构描述(逻辑元件连接)
构造体
LOGO
1个实体可对应若干个结构体,每个结构分别代 表该实体功能的不同实现方案或不同描述方式。 同一时刻,只有一个结构体起作用,可以通过 配置来决定使用哪一个结构体进行仿真或综合。 同一结构体不能为不同的实体所拥有
第2章 VHDL语言程序的基本结构
第2章
VHDL语言程序的基本结构
1.设计思路
根据数字电子技术的知识,我们知道,74LS00是 一个四—2输入与非门,亦即该芯片由四个2输入与非门 组成,因此我们设计时可先设计一个2输入与非门(如 图2.1(a)所示),再由四个2输入与非门构成一个整体—— MY74LS00(如图2.1(b)所示)。
也就是说我们实际做的程序,并不象开始所 列的那样必须包含5部分,通常下面结构才是基 本的和必需的
Use定义区
Entity定义区
Architecture定义区
我们以一个实际的例子来看一下 VHDL语言基本语法结构 Use定义区应写成
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL;
48
7
Entity定义区写成
ENTITY example IS PORT( Pin48 : IN STD_LOGIC; Pin7 : OUT STD_LOGIC ); END example;
Architecture 定义区写成
ARCHITECTURE BEHAV OF example IS BEGIN Pin7<=Pin48; END BEHAV;
--元件连接说明
第2章
VHDL语言程序的基本结构
BEGIN
U1:NAND2 PORT MAP(A=>A1,B=>B1,Y=>Y1); U2:NAND2 PORT MAP(A=>A2,B=>B2,Y=>Y2); U3:NAND2 PORT MAP(A3, B3, Y3); U4:NAND2 PORT MAP(A4, B4, Y4);
《EDA技术应用》VHDL程序基本结构
3
1.VHDL语言概述
(2)VHDL语言特性
优点
覆盖面广,系统硬件描述能力强,是一个多层次的硬件描述语言; VHDL语言可以与工艺无关编程; VHDL语言具有良好的可读性,既可以被计算机识别,也容易被人们理解; VHDL语言已做为一种IEEE工业标准,应用十分广泛。
缺点
设计的最终实现取决于目标器件的编程器,开发工具的不同会导致项目综合的质量 有差异。
12
3.实体( ENTITY)
(2)端口说明
定义格式:
PORT( 端口名 {,端口名}:方向 数据类型; ……
端口名 {,端口名}:方向 数据类型);
PORT( a, b : IN BIT; s : IN BIT; y : OUT BIT ) ;
数据类型:在VHDL语言中共有10种数据类型,BIT和BIT_VECTOR是最常用的数据类 型。BIT:位逻辑数据类型,取值只能是逻辑1和逻辑0。BIT_VECTOR:用来定义总线, 取值是一组二进制数。
6
2.VHDL程序的组成
程序各部分作用
库(library):存放已经编译的实体、结构体、子程序包和配置。它可 由用户生成或由ASIC芯片制造商提供。使设计者可共享已经编译过的设 计结果。
程序包( package):用于存放各设计模块都能共享的数据类型、常数 和子程序等。用户可以调用IEEE标准程序包和自己设计的程序包。
VHDL是美国国防部在20世纪80年代初为实现高速集成电路硬件VHSIC计划提出的描 述语言;
IEEE从1986年开始,致力于VHDL语言标准化的工作,融合了其它ASIC设计硬件描述 语言的优点,于1993年形成了IEEE.STD_1164版标准VHDL语言。
1995年,我国国家技术监督局推荐VHDL做为电子设计自动化硬件描述语言的国家标准。
1.VHDL语言概述
(2)VHDL语言特性
优点
覆盖面广,系统硬件描述能力强,是一个多层次的硬件描述语言; VHDL语言可以与工艺无关编程; VHDL语言具有良好的可读性,既可以被计算机识别,也容易被人们理解; VHDL语言已做为一种IEEE工业标准,应用十分广泛。
缺点
设计的最终实现取决于目标器件的编程器,开发工具的不同会导致项目综合的质量 有差异。
12
3.实体( ENTITY)
(2)端口说明
定义格式:
PORT( 端口名 {,端口名}:方向 数据类型; ……
端口名 {,端口名}:方向 数据类型);
PORT( a, b : IN BIT; s : IN BIT; y : OUT BIT ) ;
数据类型:在VHDL语言中共有10种数据类型,BIT和BIT_VECTOR是最常用的数据类 型。BIT:位逻辑数据类型,取值只能是逻辑1和逻辑0。BIT_VECTOR:用来定义总线, 取值是一组二进制数。
6
2.VHDL程序的组成
程序各部分作用
库(library):存放已经编译的实体、结构体、子程序包和配置。它可 由用户生成或由ASIC芯片制造商提供。使设计者可共享已经编译过的设 计结果。
程序包( package):用于存放各设计模块都能共享的数据类型、常数 和子程序等。用户可以调用IEEE标准程序包和自己设计的程序包。
VHDL是美国国防部在20世纪80年代初为实现高速集成电路硬件VHSIC计划提出的描 述语言;
IEEE从1986年开始,致力于VHDL语言标准化的工作,融合了其它ASIC设计硬件描述 语言的优点,于1993年形成了IEEE.STD_1164版标准VHDL语言。
1995年,我国国家技术监督局推荐VHDL做为电子设计自动化硬件描述语言的国家标准。
VHDL主要内容概括
二、VHDL数据对象
数据对象有三种:常量(CONSTANT);
变量(VARIABLE);
信号(SIGNAL)。
三、VHDL数据类型
1. VHDL预定义数据类型(标准数据类型)
• 整数(INTEGER)
• 实数(REAL)
• 位(BIT)
• 位矢量(BIT_VECTOR) ) • 布尔量(BOOLEAN) • 字符(CHARACTER) • 字符串(STRING) • 时间(TIME)
表达式2 WHEN 条件2,
... 表达式n WHEN OTHERS;
六、重要的书写格式
LOOP语句 (1) 单个LOOP语句
[ LOOP标号:] LOOP
顺序语句; END LOOP [ LOOP标号 ]; (2) FOR_LOOP语句 [LOOP标号:] FOR 循环变量 IN 循环次数范围 LOOP
1、并行语句(Concurrent Statements)
并行信号赋值语句(简单信号赋值、条件信号赋值、 选择信号赋值语句) 进程语句(PROCESS) 块语句(BLOCK) 并行语句 元件例化语句 生成语句 子程序调用语句(过程调用、函数调用) REPORT语句 断言语句
顺序语句;
END LOOP [LOOP标号];
六、重要的书写格式
BLOCK 语句 [块标号]: BLOCK [(块保护表达式)] [接口说明;] [类属说明;] BEGIN
并行语句;
END BLOCK [块标号] ;
六、重要的书写格式
生成语句 [标号:] FOR 循环变量 IN 取值范围 GENERATE [说明部分;] BEGIN 并行语句;
六、重要的书写格式
第3章_VHDL语言程序的基本结构
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的基本结构
自 例如:
动
PORT(d0,d1,sel:IN BIT;
化
q:OUT BIT;
bus:OUT BIT_VECTOR(7 DOWNTO 0));
端口名:
定义外部引脚的名称,通常用一个或几个英文字
母,或者用英文字母加数字命名。例如例子中的外部引脚
为d0、d1、sel、q。
——EDA
电气 王昕
9
1.1.1 实体说明
动 信号称为端口,它对应于电路图上的一个引脚。
化
端口说明:对设计的外部引脚信号的名称、数
据类型和输入/输出方向的描述。与传统的电路图
相比,它描述的是器件的外观。
——EDA
电气 王昕
8
1.1.1 实体说明
电 端口说明的格式:
子
PORT(端口名{,端口名}:方向 数据类型名;
设
…
计
端口名{,端口名}:方向 数据类型名);
电 子
一、库的种类
设
计
当前在VHDL语言中存在的库大致可以
自 归纳为5种:
动
化
IEEE库
*STD库
*ASIC矢量库
*用户定义的库
*WORK库
——EDA
17
1.2.1 库
——EDA
电 (1)IEEE库
子
设 计
IEEE库是目前使用频度最高和应用最广泛的资源库。
自
其 中 包 括 程 序 包 STD_LOGIC_1164 、
序设计:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
所谓“并行”,指的是这些并行语句之间没有执 行顺序的先后之分。
并行处理语句的局部化
在实际逻辑设计时,我们不一定希望所有的逻辑 语句同时工作,怎么办? 换句话:如何能让不同部分的语句“有条件地” 起作用? 解决办法:挑出来、加条件! 使用条件语句吗? 不行!!! 用适当的语法来表达:就引入了
进程语句
1、为了用起来像个函数的样子,不妨加个 port关键词,把输入输出引脚象参数一样排列 起来。
2、很好地表达了4个输入引脚,1个输出引脚。 3、提供给别人调用。
1、内部功能实现的细节 2、T1、T2似乎有点奇怪,哪来的? 3、那我们也规定先定义,后使用!
VHDL语言如何做的?
Library IEEE; Use IEEE.STD_LOGIC_1164.ALL;
件互连关系。通常用于层次式设计。
结构体描述的三种方法
例 二选一数据选择器
ENTITY mux IS PORT(d0, d1:IN BIT; sel:IN BIT; Q:OUT BIT); END mux;
ARCHITECTURE behave OF mux IS BEGIN PROCESS(d0,d1,sel) BEGIN IF sel=’0’ THEN q<=d0; ELSE q<=d1; END IF; END PROCESS; END behave;
ENTITY mux IS PORT(d0,d1,sel:in bit; q:out bit); END mux; Architecture dataflow of mux is signal tmp1,tmp2,tmp3:bit; Begin tmp1<=d0 and sel; tmp2<=d1 and (not sel); tmp3<=tmp1 or tmp2; q<=tmp3; End dataflow;
1) 行为级描述:
只表示输入和输出 间转换的行为,它 不包含任何结构的 信息(硬件特性、 连线方式、逻辑行 为方式)。
RTL级描述(数据流描述方式)
举例: PORT(d0,d1,sel : IN BIT; q : OUT BIT; bus : OUT BIT_VECTOR(7 DOWNTO 0) );
…
(1)端口名:赋予每个外部引脚名称,通常用 一个或几个英文字母,或者用英文字母加数字 命名之,例如:d0,d1,sel。 (2)端口方向:用来定义外部引脚的信号方向。
端口数据类型
标准类型: BIT 单点
和
BIT_VECTOR
扩展类型: STD_LOGIC 和
STD_LOGIC_VECTOR
多点(总线)
扩展类型需要库和程序包的支持,并且需要在程序中指明 使用时需要加入以下两个语句:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
… …
结构体的语法格式
结构体中的说明语句是对结构体的功能描述语 句中将要用到的信号(SIGNAL)、数据类型 (TYPE)、常数(CONSTANT)、元件(COMPONENT)、 函数(FUNCTION)和过程(PROCEDURE)等加以说明 的语句。
在一个结构体中说明和定义的数据类型、常数、 元件、函数和过程只能用于这个结构体中,若 希望其能用于其他的实体或结构体中,则需要 将其作为程序包来处理。
仪器与电子学院
可编程逻辑器件应用
主讲人:刘文怡
第五讲 VHDL程序的基本结构
VHDL语言设计的基本单元及其构成 结构体的子结构描述 包集合、库及配置
要求: 掌握硬件描述语言的基本框架结构; 了解硬件描述语言的库、程序包和配置;
前节内容回顾
EDA,CPLD,FPGA,HDL,VHDL VHDL,VERILOG,AHDL FPGA芯片公司 Altera, Xilinx, Microsemi (Actel), lattice FPGA,CPLD,单片机,DSP,ARM
实体声明
实体声明语法:
ENTITY 实体名 IS [类属参数说明]; [端口说明]; END 实体名;
d0 d1 q sel
举例:
ENTITY mux IS PORT(d0,d1,sel:IN BIT; q:OUT BIT ); END mux;
实体的声明
实体名必须与文件名相同,否则编译时会出错。
结构体的描述方法:行为级描述、RTL(数据流)级 描述、结构描述(逻辑元件连接)
结构体的一般书写格式
ARCHITECTURE 结构体名 OF 实体名 IS
[定义语句]内部信号,常数,数据类型,函数等的定义;
BEGIN 功能描述语句[并行处理语句]; END 结构体名;
实体名必须是所在设计实体的名字,结构体名由 设计者定义,但当一个实体具有多个结构体时, 结构体的取名不可重复。
结构体的语法格式
常数说明 结 构 体 说 明 结 子程序说明 构 体 块语句 结 构 体 功 能 描 述 进程语句 信号赋值语句 子程序调用语句 元件例化语句 例化元件说明 数据类型说明 信号说明
结构体的并行处理语句
具体描述结构体的行为及其连接关系。 在结构体中的语句都可以是并行执行的, 语句的书写顺序不决定语句的执行顺序。
定义语句
定义语句位于ARCHITECTURE 和BEGIN之间,用 于对结构体内部所使用的信号、常数、数据类型和 函数进行定义。 举例:ARCHITECTURE behave OF mux IS SIGNAL tmp: BIT; BEGIN
END behave; 结构体的信号定义和实体的端口说明一样,应有信 号名称和数据类型定义,不用说明信号方向,因为 是结构体内部连接用信号。
配置Configuration)
VHDL程序的基本单元解释
实体:
描述所设计系统的外部接口信号,是可见的;
结构体:描述系统内部的结构和行为,是不可见的;
配置: 选取所需单元组成系统设 计的不同版本;
包集合:存放各种设计模块都能共享的数据类型、
常数、子程序和函数等;
库:
存放已经编译的实体、结构体、包集合和 配置。
process begin Output <= A or B; wait on A, B; end process;
进程语句举例
ENTITY mux IS PORT(d0,d1,sel :in q :out END mux;
bit; bit
);
Architecture dataflow of mux is SIGNAL tmp1,tmp2,tmp3:bit; Begin q<=tmp3; process(d0,d1,sel) begin tmp1<=d0 and sel; tmp2<=d1 and (not sel); tmp3<=tmp1 or tmp2; end process; End dataflow; 28
敏感信号d0,d1,sel 任一信号发生变 化就执行
进程里面的语句
可以放置任何信号代入语句; 可以放置一般并行语句; 可以放置条件、分支、循环语句;
不可以放置进程语句(嵌套);
结构体三种描述方式
行为描述:
对设计实体按算法的路径来描述。采用进程语句顺 序描述设计实体的行为和功能。 寄存器传输描述(数据流描述): 通过描述数据流程的运动路径、方向和运动结果, 实现设计实体的行为和功能。 结构描述(逻辑元件连接描述): 采用并行处理语句描述设计实体内的结构组织和元
方向定义 IN OUT INOUT BUFFER 含义 输入 输出(结构体内部不能再使用) 双向 输出(结构体内部可再使用)
请注意 OUT与 BUFFER 的区别
ENTITY test IS PORT(a: IN STD_LOGIC; b1,c1: OUT STD_LOGIC; b2: BUFFER STD_LOGIC; c2: OUT STD_LOGIC); END test; ARCHITECTURE a of test IS BEGIN b1 <= not(a); c1 <= b1; --Error b2 <= not(a); c2 <= b2; END a;
d0 d1 sel
q
d0 d1 sel
& &
≥ 1
q
VHDL程序的基本构成
一个完整的VHDL语言 程序通常包含5个部分: 库 (Library)
库、包集合 实体(Entity)
结构体1 (Architecture)
进程、 块、子程序
结构体n
包集合 (Package)
必 备 部 分
实体 (Entity) 结构体 (Architecture) 配置 (Configuration)
PROCESS语句的工作机理
任何一个敏感信号发生变化都将启动process内部的所有 并行语句执行一次。 Process语句可以不带敏感表,但是要在end process; 前加 入wait on 信号1,信号2,…; 注意:process语句敏感表 和wait on语句只能有一个。 process (A, B) begin Output <= A or B; end process;
实体用于定义电路的输入输出引脚,但并不描述 电路的具体结构和实现的功能。 大小写不敏感。
实体声明注意事项
实体的类属参数说明(了解)
类属参数说明是实体说明中的可选项,必须放在