第三章 VHDL语言程序的基本结构2
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程序基本结构》课件

VHDL程序基本结构示意图
VHDL程序基本结构
这是一张示意图,展示了VHDL程序的基本结构和各个部分之间的关系。
VHDL程序编写实例
这里将展示一个简单的VHDL程序编写实例,以帮助理解VHDL程序的应用和编 写方法。
总结
通过本课程,我们了解了VHDL程序的基本结构和编写方法,以及各个部分的功能和关系。希望这些知识对你 的学习和工作有所帮助。
VHDL程序的基本组成
VHDL程序由实体说明部分、 架构说明部分、信号声明与 处理部分和过程描述部分组 成。
VHDL程序的编写流程
编写VHDL程序的流程包括定 义实体、编写架构、声明信 号和编写过程。
实体说明部分
ห้องสมุดไป่ตู้
1 实体声明
实体声明定义了模块的输入输出接口,包括 输入输出端口和内部信号。
2 输入端口声明
输入端口声明用于定义模块的输入信号和其 属性,如信号类型和位宽。
3 输出端口声明
输出端口声明用于定义模块的输出信号和其 属性,如信号类型和位宽。
4 端口映射
端口映射将模块的输入输出端口与上层设计 连接起来,以实现功能。
架构说明部分
1
架构声明
架构声明定义了模块的行为逻辑和组成元素,包括信号和过程。
2
参考文献
1. VHDL程序设计教程 2. VHDL语言基础与应用 3. VHDL编程入门
信号赋值语句
信号赋值语句用于给信号赋予特 定的值,以实现逻辑功能。
信号处理语句
信号处理语句用于处理信号的逻 辑运算和状态转换,以实现电路 功能。
过程描述部分
过程声明
过程声明用于定义过程的名称 和输入输出参数。
过程体
第3章 VHDL基础

3.2 时序电路描述
图3-5 例3-7的电路图 的电路图
3.2 时序电路描述
【例3-8】 】 ... IF a1 > b1 THEN q1 <= '1' ; ELSE q1 <= '0' ; END IF; ...
图3-6 例3-8的电路图 的电路图
3.2.3 时序电路的不同表述
3.2 时序电路描述
y <= d OR
e
3.1 VHDL 基本语法
组合电路描述 3.1.1 组合电路描述
【例3-3】 】 ENTITY mux21a IS PORT ( a, b, s: IN BIT; y : OUT BIT ); END ENTITY mux21a; ARCHITECTURE one OF mux21a IS BEGIN PROCESS (a,b,s) BEGIN IF s = '0' THEN y <= a ; END IF; END PROCESS; END ARCHITECTURE one ;
or_gate, Or_gate, Qr_Gate, OR_GATE. 不合法的: 不合法的: 2illegal_name, _illegal_name, illegal#name, Illegal_name_
3.1.2 扩展标识符
扩展标识符(Extended Identifier)是VHDL’93版扩展的 扩展标识符 是 版扩展的 书写规则和识别都有新规定,扩展标识符具有以下特性: 书写规则和识别都有新规定,扩展标识符具有以下特性: (1)扩展标识符用反斜杠来界定。 扩展标识符用反斜杠来界定。 扩展标识符用反斜杠来界定 例如: 是合法的。 例如:\invalid\,\controller_decode\是合法的。 , 是合法的 (2)允许包含图形符号、空格符,但没有格式的作用。 允许包含图形符号、 允许包含图形符号 空格符,但没有格式的作用。 例如: 是合法的。 例如:\$5000&T\,\mode A and B\是合法的。 & , 是合法的 (3) 2个反斜杠之问的字可以和保留字相同。 个反斜杠之问的字可以和保留字相同。 个反斜杠之问的字可以和保留字相同
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
EDAVHDL第三章VHDL基本结构

EDAVHDL第三章VHDL基本结构VHDL(VHSIC Hardware Description Language)是一种硬件描述语言,用于描述和设计数字电路。
本章将介绍VHDL的基本结构,包括实体、体系结构和实例化。
一、实体(Entity)实体是VHDL设计的最基本单位,用于描述模块的输入输出信号以及模块的功能。
实体由实体头、实体规范和实体体构成。
实体头定义了实体的名称,如下所示:```entity module_name is```其中,module_name为实体的名称。
实体规范定义了实体的输入输出接口以及信号的类型和方向,如下所示:```portsignal_name : signal_type;...```其中,signal_name为信号的名称,signal_type为信号的类型,如std_logic、std_logic_vector等。
实体体定义了实体的功能实现,如下所示:```begin...end entity_name;```其中,entity_name为实体的名称。
二、体系结构(Architecture)体系结构用于具体描述实体的功能实现,一个实体可以对应多个体系结构。
体系结构由体系结构头、信号声明和过程声明组成。
体系结构头定义了体系结构的名称以及对应的实体名称,如下所示:```architecture arch_name of entity_name is```其中,arch_name为体系结构的名称,entity_name为对应的实体名称。
信号声明用于声明体系结构内部使用的信号,如下所示:```signal signal_name : signal_type;```其中,signal_name为信号的名称,signal_type为信号的类型。
过程声明用于定义体系结构的功能实现,如下所示:```beginprocess (sensitivity_list)begin...end process;end arch_name;```其中,sensitivity_list为灵敏列表,指定了过程中响应信号的变化和时钟信号等。
第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语言程序的结构.

方向定义 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)

(1)体内配置指定
(2)体外配置说明
由于体外配置语句是一个独立的编译单位, 故需给它指定一个单位名—配置名。实体 名和结构体名为需对例元做配置的实体及 相应的结构体。
(3)直接例化
二. VHDL语言的数据对象,数据类型
TYPE week IS(sum,mon,tue,wed,thu,fri,sat);
2.整数,实数(Integer,Real)类型 格式:TYPE 数据类型名 IS 数据类型定义约束范围
TYPE twos IS INTEGER RANGE –32768 TO 32767; TYPE voltage IS REAL RANGE 0.0 TO 10.0;
结构体的子结构描述:
BLOCK,PROCESS,SUBPROGRAM三种语句结构
1. BLOCK语句结构描述
格式: 块结构名: BLOCK BEGIN ….
END BLOCK 块结构名;
在对程序进行仿真时,BLOCK语句中所描述的各个语 句是可以并发执行的,它与书写顺序无关。 卫式BLOCK语句的格式::BLOCK [卫式布尔表达式]; 当卫式布尔表达式为真时,BLOCK语句执行。
为了能重复使用这些函数和过程,这些程 序通常组织在包集合库中。 (1)多个过程和函数汇集在一起就构成一个 包集合(Package)。 (2)n个包集合汇集在一起就形成一个库 (Library)。
(三) 包集合,库及配置
1.库(Library):它是一个经过编译后的数据的集合, 存放包集合EE库,STD库,ASIC矢量库, WORK库,用户定义库。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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;
结构体--行为描述
Architecture behavioral of eqcomp4 is begin comp: process (a,b) begin if a=b then equal <= ‘1’; else equal <=‘0’; end if; end process comp; end behavioral ;
允许信号进入实体,主要用于时钟输入、控制输入(如 load、reset、enable、clk)和单向的数据输入(如地址数 据信号address)等。
2.输出(OUT) 输出模式只允许信号离开实体,常用于计数输出、单向 数据输出、被设计实体产生的控制其他实体的信号等。注意: 输出模式不能用于被设计实体的内部反馈,因为输出端口在 实体内不能看做是可读的。 3.双向模式(INOUT) 双向模式允许信号双向传输(既可以进入实体,也可以离开 实体),双向模式端口允许引入内部反馈。
三种描述方式的比较
描述方式
结构化描 述
优点
连接关系清 晰,电路模 块化清晰
缺点
适用场合
电路不易理解、 电路层次化设 繁琐、复杂 计
数据流描 述 行为描述
布尔函数定 义明白 电路特性清 楚明了
不易描述复杂电 小门数设计 路,修改不易 进行综合效率相 大型复杂的电 对较低 路模块设计
3.2.3 结构体功能描述语句
结构体是对实体功能的具体描述,因此它一定要跟在实 体的后面 。
结构体一般由两大部分组成:
1.对数据类型、常数、信号、子程序和元件等因素进行说 明的部分; 2.描述实体的逻辑行为、以各种不同的描述风格表达的功 能描述语句,包括各种顺序语句和并行语句。
结构体的语句格式为: ARCHITECTURE 结构体名 OF 实体名 IS [定义语句]
结构体功能描述语句位于BEGIN和END之间,
具体地描述了构造体的行为及其连接关系。结构
体的功能描述语句可以含有5种不同类型的并行
语句,如图所示。每一语句结构内部可以使用并 行语句,也可以是顺序语句。
结构体构造图:
结构体 (ARCHI TECTURE) 说明语句 功能描述语句 块语句(BLOCK) 进程语句(PROCESS) 信号赋值语句 子程序调用语句 元件例化语句
(PACKAGE)和库(LIBRARY)5个部分。其
中实体和结构体这两个基本结构是必需的,他们 可以构成最简单的VHDL程序。
3.1 实体
设计实体是VHDL语言设计的基本单元,简单 的可以是一个与门,复杂的可以是一个微处理器或 一个数字系统,其结构基本是一致的,都是由实体 说明和结构体两部分组成。实体说明是对这个设计 实体与外部电路进行接口的描述,它规定了设计单
元件例化语句对其他的设计实体做元件调用说明,并将此元件的端口与 其他元件、信号或高层实体的界面端口进行连接。
各语句后面将介绍
例: 2选1数据选择器
ENTTITY mux2 IS PORT (d0,d1:IN BIT;
sel:IN BIT;
s:OUT BIT); END mux2;
ARCHITECTURE dataflow OF mux2 IS
结构体中的信号定义和端口说明一样,应有信号名称和数 据类型定义。因为它是内部连接用的信号,因此不需要方向说 明。
结构体名
例:结构体的信号定义实例。 ARCHITECTURE rtl OF muj IS 实体名
SIGNAL s1:BIT
结构体信号定义语句
SIGNAL s2,s3:STD_LOGIC_VECTOR (0 TO 3); ┇ BEGIN ┇ 功能描述语句
Entity test1 is port(a: in std_logic; b,c: out std_logic ); end test1; architecture a of test1 is begin b <= not(a); c <= b;--Error end a; Entity test2 is port(a: in std_logic; b : buffer std_logic; c: out std_logic ); end test2; architecture a of test2 is begin b <= not(a); c <= b; end a;
图中5种功能描述语句的基本组成和功能分别是:
块语句是由一系列并行语句构成的组合体,它的功能是将结构体中的并 行语句组成一个或多个子模块。 进程语句定义顺序语句模块,用以将从外部获得的信号值或内部运算数 据向其他的信号进行赋值。
信号赋值语句将设计实体内的处理结果向定义的信号或界面端口进行赋 值。
子程序调用语句可以调用进程或参数,并将获得的结果赋值于信号。
元的输入输出接口信号或引脚,是设计实体对外的
一个通信界面。结构体用于描述此设计实体的逻辑 结构和逻辑功能。
实体语句结构如下:
ENTITY 实体名 IS [GENERIC(类属表);]
[PORT(端口表);]
END ENTITY 实体名; 例:
ENTITY or2 IS PORT(a,b:IN STD_LOGIC;
高层次的功能描述, 不必考虑在电路中到 底是怎样实现的。
结构体--数据流描述 描述输入信号经过怎样的变换得到输出信号
Architecture dataflow1 of eqcomp4 is begin equal <= ‘1’ when a=b else ‘0’; end dataflow1; Architecture dataflow2 of eqcomp4 is begin equal <= not(a(0) xor b(0)) and not(a(1) xor b(1)) and not(a(2) xor b(2)) and not(a(3) xor b(3)); end dataflow2;
结构体的描述方式,使得阅读VHDL语言程序时,
能直接了解设计者采用的描述方式。
3.2.2 结构体信号定义语句
结构体信号定义语句必须放在关键词ARCHITECTURE和 BEGIN之间,用于对结构体内部将要使用的信号、常数、数 据类型、元件、函数和过程加以说明。需要注意的是实体说明 中定义的信号是外部信号,而结构体定义的信号为该结构体的 内部信号,它只能用于这个结构体中。
SIGNAL sig:BIT; BEGIN Sig <= (d0 AND sel) OR (NOT sel AND d1); S<=sig; END dataflow;
信号定义语句(内部信号,无方向)
功能描述语句
3.3
块、子程序和进程
3.3.1块语句(BLOCK)
在较大规模的电子系统设计中,传统的硬件电路设计通
这里类属参量中参数trise为上升沿宽度,tfall为下 降沿宽度,用于仿真模块的设计;定义地址总线的宽 度为Addrwidth位,类属值Addrwidth的改变将使结构 体中所有相关的总线定义同时改变,由此使整个设计 实体的硬件结构发生变化。
3.1.2 端口说明(PORT) 端口为设计实体和其外部环境提供动态通信的通道, 是对基本设计单元与外部接口的描述,其功能相当电路图 符号的外部引脚。端口可以被赋值,也可以当做逻辑变量 用在逻辑表达式中。 其一般书写格式为: PORT (端口名 :端口模式 数据类型;
端口名 :端口模式 数据类型;
… …);
其中端口名是设计者为实体的每一个对外通道所取的 名字,通常为英文字母加数字,名字的定义有一定的惯例, 如clk 表示时钟,D开头的端口名表示数据,A开头的端口 名表示地址。端口模式是指这些通道上的数据流动的方式, 如输入或输出等。 端口模式有以下几种类型: 1.输入(IN)
1.1.1类属参量(GENERIC)
类属参量是实体说明组织中的可选项,放在端口说明之前,
其一般格式为:
GENERIC [CONSTANT] 名字表:[IN] 子类型标识 [:= 静 态表达式],…]
类属参量是一种端口界面常数,常用来规定端口 的大小、实体中子元件的数目及实体的定时特性等。 它和常数不同,常数只能从设计实体的内部得到赋值