第五讲VHDL语言程序的基本结构详解
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
d0 d1 q
sel
类属参数说明
类属参数说明是实体说明中的可选项,放在端口说 明之前,用于指定参数; 其一般书写格式为:
GENERIC 常数名:数据类型 [:=设定值] ,…];
举例:GENETRIC(m:TIME:=1ns); 这个参数说明是指在VHDL程序中,构造体内的参 数m的值为1ns。
定义语句
定义语句位于ARCHITECTURE 和BEGIN之间,用于 对构造体内部所使用的信号、常数、数据类型和函数 进行定义。 举例:ARCHITECTURE behav OF mux IS SIGNAL tmp:BIT; BEGIN END behav; 构造体的信号定义和实体的端口说明一样,应有信号 名称和数据类型定义,但不需要定义信号模式,不用 说明信号方向,因为是结构体内部连接用信号。
构造体定义部分
注意:一个电路系统的程序设计中只有一个实体,可以有多个构造体。
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;
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;
块结构举例:
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;
包集合:存放各种设计模块都能共享的数据类型、
常数和子程序等;
库:
存放已经编译的实体、构造体、包集合和
配置。
前四种是可分别编译的源设计单元
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; 实体说明部分
构造体对其基本设计单元的输入输出关系有三 种描述方式 : (1) 行为描述: 对设计实体按算法的路径来描述。采用进程语 句顺序描述设计实体的行为和功能。 (2) 寄存器传输描述(数据流描述): 通过描述数据流程的运动路径、方向和运动 结果,实现设计实体的行为和功能。 (3) 结构描述(逻辑元件连接描述): 采用并行处理语句描述设计实体内的结构组 织和元件互连关系。通常用于层次式设计。
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语句 是同时并发运行的。
子程序(SUBPROGRAM)结构。
2.2.1 BLOCK语句结构描述
块(BLOCK)可看作构造体中子模块,BLOCK可以把许多语 句包装在一起。在 VHDL 语言中,电路的构造体对应整个 电 路 图 , 而 构 造 体 可 以 由 多 个 BLOCK 块 构 成 , 每 一 个 BLOCK块对应一张子原理图。 BLOCK语句的一般格式如下: 块结构名: BLOCK BEGIN <并行语句A> … END BLOCK 块结构名;
配置(Configuration) 包集合(Package) 库(Library)
(Architecture)
进程、 块、子程序
配置Configuration)
实体: 描述所设计的系统的外部接口信号;
构造体:描述系统内部的结构和行为; 配置: 用于从库中选取所需要单元来组成系统设 计的不同版本;
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 用结构体的功能来命名
练习
试写出半加器的实体描述: 如右图所示 a,b 为半加器的输入端口, s,co 为输出信号, s 为和信号, co 为 进位信号。
a b
co s
2.1.2 构造体
构造体(Architecture)具体指明了该设计 实体的行为,定义了该设计实体的功能,规 定了该设计实体的数据流程,指派了实体中 内部元件的连接关系。
子程序(subprogram)分两类:
过程(PROCEDURE)和函数(FUNCTION)。
过程语句的一般书写格式为: PROCEDURE 过程名(参数1;参数2;…) IS [定义语句]; --变量等定义 BEGIN [顺序处理语句] --过程语句 END 过程名;
举例: 用过程实现:把位矢量转换为整数类型。
… …
并行处理语句
具体描述构造体的行为及其连接关系。
在构造体中的语句都是可以是并行执行的, 语句的书写顺序不决定语句的执行顺序。 所谓“并行”,指的是这些并行语句之间没 有执行顺序的先后之分。
2.2 构造体的子结构描述
构造体子结构描述的三种形式:
块(BLOCK)语句结构;
进程(PROCESS)语句结构;
第2章 VHDL语言程序的基本结构
•
主要内容
VHDL语言设计的基本单元及其构成 :
实体 + 构造体
•
VHDL语言构造体的子结构描述 :
块、进程、子程序
•
包集合、库及配置
一个完整的VHDL语言程序 通常包含5个部分:
必 备 部 分
库、包集合 实体(Entity)
实体(Entity)
结构体
构造体Architecture)
PROCESS语句的书写格式如下:
[进程名:]PROCESS[敏感信号表] 变量说明语句: BEGIN … 顺序说明语句 … END PROCESS [进程名];
PROCESS语句的执行过程
当进程的敏感信号参数表中的任一敏感信号 发生变化时,进程被激活,开始从上而下按 顺序执行进程中的顺序语句,当最后一条语 句执行完毕,进程挂起,等待下一次敏感信 号的变化。从系统上电开始,这个过程周而 复始的进行。
构造体的一般书写格式为: ARCHITECTURE 构造体名 OF 实体名 IS
[定义语句]内部信号,常数,数据类型,函数等的定义;
BEGIN [并行处理语句]; END 构造体名;
构造体名称的命名
构造体名称由设计者自由命名,是构造体的唯一名 称。OF后面的实体名称表明该构造体属于哪个设计 实体,有些设计实体中可能含有多个构造体。这些 结构体的命名可以从不同侧面反映结构体的特色, 让人一目了然。例如:
使用WAIT语句的PROCESS书写格式如下:
[进程名:]PROCESS 变量说明语句: BEGIN WAIT UNTIL (激活进程的条件) 顺序说明语句 END PROCESS [进程名];
2.2.3 SUBPROGRAM语句结构描述
子程序是主程序调用它以后,能将处理结果返回 给主程序的模块。子程序可以反复Байду номын сангаас用。调用时, 首先要初始化,执行结束后,子程序就终止。子 程序内部的值不能保持,子程序返回,才能被再 次调用。
举例: ENTITY mux IS
PORT(d0,d1,sel:IN BIT; q:OUT BIT); END mux;
敏感信号: 只要有一个发 生变化(如由 “0”变成“1” 或由“1”变为 “0”)都将启 动PROCESS语 句。
ARCHITECTURE connect OF mux IS
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; q<= tmp3; END PROCESS; END connect;
端口说明
端口说明是对基本设计实体(单元)与外部接口的描 述,也可以说是对外部引脚信号的名称,数据类型和 输入、输出方向的描述; 其一般书写格式为: PORT(端口名{,端口名}:方向 数据类型名; 端口名{,端口名}:方向 数据类型名); 举例: PORT(d0,d1,sel : IN BIT; q : OUT BIT; bus : OUT BIT_VECTOR(7 DOWNTO 0) );
PROCESS语句的特点
(1) 进程内部的所有语句都是顺序执行的。
(2) 多进程之间,是并行执行的,并可访问构 造体或实体中所定义的信号。
(3) 进程的启动是由进程标识符 Process 后的 敏感信号来触发,也可用 WAIT 语句等待一个 触发条件的成立。
(4) 各进程之间的通信是由信号来传递的。
函数语句的一般书写格式为: FUNCTION 函数名(参数1;参数2;…) RETURN 数据类型名 IS [定义语句]; BEGIN [顺序处理语句] RETURN [返回变量名]; END [函数名];
…
(1)端口名:赋予每个外部引脚名称,通常用一 个或几个英文字母,或者用英文字母加数字命名 之,例如:d0,d1,sel。 (2)端口方向:用来定义外部引脚的信号方向。
请注意 OUT与 BUFFER 的区别
方向定义 IN OUT INOUT BUFFER
含义 输入 输出(构造体内部不能再使用) 双向 输出(构造体内部可再使用)
LINKAGE
不指定方向,无论哪一个方向都可连接
(3)数据类型:VHDL有10种数据类型(下一章详细介绍) BIT和BIT_VECTOR STD_LOGIC和STD_LOGIC_VECTOR
使用时需要加入以下两个语句:
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;
卫式BLOCK(Guarded BLOCK): 可实现BLOCK的执行控制,当满足一定条件时 BLOCK语句才被执行。 卫式BLOCK举例:
ARCHITECTURE latch_guard OF latch IS BEGIN 格式:BLOCK[卫式布尔表达式] 当卫式尔表达式为真时,BLOCK语 句被执行,否则不被执行。