第五讲 VHDL语言程序的基本结构

合集下载

vhdl程序的基本结构vhdl程序一般由5个部分组成

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程序的编写流程
编写VHDL程序的流程包括定 义实体、编写架构、声明信 号和编写过程。
实体说明部分
ห้องสมุดไป่ตู้
1 实体声明
实体声明定义了模块的输入输出接口,包括 输入输出端口和内部信号。
2 输入端口声明
输入端口声明用于定义模块的输入信号和其 属性,如信号类型和位宽。
3 输出端口声明
输出端口声明用于定义模块的输出信号和其 属性,如信号类型和位宽。
4 端口映射
端口映射将模块的输入输出端口与上层设计 连接起来,以实现功能。
架构说明部分
1
架构声明
架构声明定义了模块的行为逻辑和组成元素,包括信号和过程。
2
参考文献
1. VHDL程序设计教程 2. VHDL语言基础与应用 3. VHDL编程入门
信号赋值语句
信号赋值语句用于给信号赋予特 定的值,以实现逻辑功能。
信号处理语句
信号处理语句用于处理信号的逻 辑运算和状态转换,以实现电路 功能。
过程描述部分
过程声明
过程声明用于定义过程的名称 和输入输出参数。
过程体

VHDL语言的基本结构

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

VHDL程序的基本结构

VHDL程序的基本结构

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程序基本结构
Q是16 BIT的三态输出总线 INT是输出信号,但其内部有反馈
AD是双向16 BIT总线
AS是三态输出信号
entity my_design is port ( d: in std_logic_vector (15 downto 0); clk, reset, oe: in std_logic; q: out std_logic_vector (15 downto 0); ad: inout std_logic_vector (15 downto 0); int: buffer std_logic; as: out std_logic); end my_design;
architecture behav of mux is begin q <= d0 when (sel=‘1’) else d1; end behav;
3、结构体的命名--应有明确意义
例如:behavioral(行为), dataflow(数据流), structure(结构)
结构体格式
4、定义语句
实体的格式
4、端口方向说明种类
PORT(端口名:端口方向 数据类型; …);

IN 输入:信号进入实体


OUT 输出:信号离开实体,且不会在内部反馈使用
INOUT 双向:信号可离开或进入实体 BUFFER 输出缓冲:信号离开实体,但在内部有反馈
实体的格式
5、数据类型说明
PORT(端口名:端口方向 数据类型;…);
architecture behav of mux is -- 结构体:行为、功能或电路结构描述; begin q <= (d0 and(not sel))or (d1 and sel); end behav;

VHDL程序基本结构

VHDL程序基本结构
(4)配置说明语句:主要用于以层次化的方式对特定的设计实 体进行元件例化,或是为实体选定某个特定的结构体。
2.2.1 实体
实体(ENTITY)是一个设计实体的表层设计单元,其功能是对 这个设计实体与外部电路进行接口描述。它规定了设计单元的输 入输出接口信号或引脚,是设计实体经封装后对外的一个通信界 面。 1.实体语句结构
中间在方括号内的语句描述,在特定的情况下并非是必须的。例 如构建一个VHDL仿真测试基准等情况中可以省去方括号中的语句。
2.类属(GENERIC)说明语句 类属(GENERIC)参量是一种端口界面常数,常以一种说明的形式
放在实体或块结构体前的说明部分。类属为所说明的环境提供了一种 静态信息通道,类属的值可以由设计实体外部提供。
【例2.4】端口模式及IEEE库数据类型定义
LIBRARY IEEE; USE IEEE.STD_LOGIC.1164.ALL;
ENTITY mm IS PORT(n0,n1,select:IN
STD_LOGIC; 例中端口数据类型Q取:自OIEUETE标S准T库D(_该L库O中G有IC数;据类型和 函数的说明B),us其:中OSTUDT_LOSGTIDC_取L值OG为I“C0_”,VE“C1”T,O“R(X”7和 “ZD”。OW因N为T使O用0了)库),;所以在实体说明前要增加库说明语句。 END ENTITY mm;
IN
OU T
BU F FE R
IN OUT
图2.5 端口模式符号图
【例2.3】端口模式及数据类型定义
PORT(n0,n1,select:IN BIT; q:OUT BIT; bus:OUT BIT_VECTOR(7 DOWNTO 0));
说明:n0, n1,select 是输入引脚,属于BIT型; q是输出引脚,BIT型; bus是一组8位二进制总线,属于BIT_VECTOR。

第五讲VHDL语言程序基本结构

第五讲VHDL语言程序基本结构

2.1.2 构造体
构造体(Architecture)具体指明了该设计 实体的行为,定义了该设计实体的功能,规 定了该设计实体的数据流程,指派了实体中 内部元件的连接关系。
第五讲VHDL语言程序基本结构
构造体对其基本设计单元的输入输出关系有三 种描述方式 :
(1) 行为描述: 对设计实体按算法的路径来描述。采用进程语
使用时需要加入以下两个语句: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;
第五讲VHDL语言程序基本结构
练习
试写出半加器的实体描述:
如右图所示
a
co
a,b为半加器的输入端口,s,co
b
s
为输出信号,s为和信号,co为
进位信号。
第五讲VHDL语言程序基本结构
PORT(d0,d1,sel:IN BIT;
d1
q
q:OUT BIT
sel
);
END mux;
第五讲VHDL语言程序基本结构
类属参数说明
类属参数说明是实体说明中的可选项,放在端口说 明之前,用于指定参数;
其一般书写格式为: GENERIC 常数名:数据类型 [:=设定值] ,…];
举例:GENETRIC(m:TIME:=1ns); 这个参数说明是指在VHDL程序中,构造体内的参 数m的值为1ns。
ARCHITECTURE 构造体名 OF 实体名 IS
[定义语句]内部信号,常数,数据类型,函数等的定义;
BEGIN [并行处理语句]; END 构造体名;
第五讲VHDL语言程序基本结构
构造体名称的命名
构造体名称由设计者自由命名,是构造体的唯一名 称。OF后面的实体名称表明该构造体属于哪个设计 实体,有些设计实体中可能含有多个构造体。这些 结构体的命名可以从不同侧面反映结构体的特色, 让人一目了然。例如:

第3章_VHDL语言程序的基本结构

第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语言程序的五个组成部分
库说明
包集合说明
基 实体说明
本 单
元 构造体描述
配置语句
库存放已编译的实体、构造体、包集合、和配 置。相当于书库。 包集合存放各设计模块能共享的数据类型、常数和 子程序。相当于书架。
实体用于说明所设计的系统的外部接口信号。
构造体用于描述系统内部的结构和行为。

2、VHDL程序的结构

2、VHDL程序的结构

architecture(结构体)
process(进程)
subprograms(子程序)
block(块)
procedure(过程)
function(函数)
一、实体(entity)


功能:描述电路的外部端口。 书写格式: entity 实体名 is port(端口名:端口方向 数据类型; ………… 端口名:端口方向 数据类型); end 实体名; 说明:
说明

语句格式中的方括号[ ]表示可选项。 程序中的注释使用“--”开头。 书写程序时,不同层次最好采用缩进格式。
★英文不区分大小写(单引号和双引号中的
英文除外)。 ★程序的文件名必须与程序中的实体名一致。
VHDL举例

程序(“设计实体”)的基本结构:

程序结构图:
entity(实体)
4、standard和textio程序包:对当前设计是可见的, 不必进行使用说明。 5、work库不必进行使用说明,但自定义程序包需要 使用说明:use work.程序包名.all;


常用库:
standard程序包 1、STD库 textio程序包 std_logic_1164程序包 std_logic_arith程序包 2、IEEE库 std_logic_signed程序包 std_logic_unsigned程序包 3、WORK库:自定义程序包
说明: 1、std_logic_1164程序包:数据类型std_logic和 std_logic_vector

2、std_Biblioteka ogic_arith程序包:数据类型unsigned和signed、 相关的算术运算符和类型转换函数。

VHDL语言的结构

VHDL语言的结构

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的基本结构

自 例如:

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;

VHDL语言程序的基本结构

VHDL语言程序的基本结构
qout:OUT INTEGER RANGE 0 TO 7); END count3;
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 输出端口
输出(构造体内部不能再使用)

第5章 VHDL 模块基本结构

第5章 VHDL 模块基本结构

第5章 行为描述(一):模块基本结构
从上面的格式定义可以看出,always过程块和initial过程块在格
式上的区别主要在于:always过程语句后面可以有一个敏感事件列 表,该敏感事件列表的作用是用来激活always过程语句的执行,而 initial过程语句的后面则不允许有敏感事件列表。
16
第5章 行为描述(一):模块基本结构
11
第5章 行为描述(一):模块基本结构
【例5-2】initial过程块用于对变量和存储器进行初始化。 module register_initialize (memory); inout areg; inout memory; parameter SIZE=1024; parameter BYTESIZE=8; reg[BYTESIZE-1:0] memory [SIZE-1:0] ; initial //initial过程语句 begin :SEQ_BLK_A //块定义语句,SEQ_BLK_A为块名 integer:index ; //计数变量,为块中的一个局部变量 for(index=0;index<SIZE;index=index+1) memory[index]=0; //对存储器memory进行初始化 areg=0; //对寄存器areg进行初始化 end //块结束标志 12 endmodule
2
5.1 行为描述的结构
第5章 行为描述(一):模块基本结构
与第2章中描述的模块的一般格式定义相比,我们可以看出:
在进行行为描述时,模块内不能出现模块实例和原语实例语句,
模块内只能存在过程块(initial过程块和always过程块)、连续赋值 语句、任务定义(task)和函数定义(function)这四种结构成分。对电 路进行行为描述主要是通过过程块和连续赋值语句来进行的,任 务和函数的使用也需要在过程块或连续赋值语句中进行调用。

VHDL基本结构与语法

VHDL基本结构与语法

第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的语法要求。

EDA

EDA

1.说明VHDL语言的基本结构。

VHDL语言程序的一般结构包括:实体(ENTITY)、构造体(ARCHITECTURE)、配置(CONFIGURATION)、包集合(PACKAGE)、库(LIBRARY)。

2.说明端口模式的INOUT与BUFFER的异同。

INOUT为输入输出双向端口,即从端口内部看,可以对端口进行赋值,即输出数据。

也可以从此端口读入数据,即输入。

BUFFER为缓冲端口,功能与INOUT类似,区别在于当需要读入数据时,只允许内部回读内部产生的输出信号,即反馈。

举个例子,设计一个计数器的时候可以将输出的计数信号定义为BUFFER,这样回读输出信号可以做下一计数值的初始值。

3.VHDL语言有几种数据对象,请说明他们的功能以及使用方法,举例说明数据对象与数据类型之间的关系。

1.常量(CONSTANT):常量为全局量,是指在设计描述过程中保持某一规定类型特定值不变的量。

常量名:数据类型:=表达式;2.变量(VARIABLE):变量为局部量,常用来存储中间数据,以便实现程序的算法。

它只能在进程语句、函数语句和过程语句的结构中使用。

变量名1[ , 变量名2, …]: 数据类型[ := 初始值] ;3.信号(SIGNAL):信号是描述硬件系统的基本数据对象,它是电子电路内部硬件连接的抽象,可以作为设计实体中并行语句模块间的信息交流通道。

信号名:数据类型[:=初值];4.试用结构描述方式来描述图4-18(P137)所示的硬件电路。

Library IEEE;USE IEEE SID_LOGIC_1164.ALLENTITY fadder 3 ISPORT,(a,b,c:IN SID_LOGICY:OUT SID_LOGIC);END fadder 3;ARCHLIECTURE SUM OF fadder3 isSIGNAL to ,t1:SID_LOGICBEGINTo <=(NOT a,ANI) c T1<=(NOT a, ANI) b T2<=(NOT to ANI) t1 END SUM;1.用VHDL语言设计一个8位二进制全加器。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。



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;
PROCESS语句的特点
(1) 进程内部的所有语句都是顺序执行的。
(2) 多进程之间,是并行执行的,并可访问构 造体或实体中所定义的信号。
(3) 进程的启动是由进程标识符 Process 后的 敏感信号来触发,也可用 WAIT 语句等待一个 触发条件的成立。
(4) 各进程之间的通信是由信号来传递的。

包集合:存放各种设计模块都能共享的数据类型、
常数和子程序等;

库:
存放已经编译的实体、构造体、包集合和
配置。
前四种是可分别编译的源设计单元
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; 实体说明部分
使用WAIT语句的PROCESS书写格式如下:
[进程名:]PROCESS 变量说明语句: BEGIN WAIT UNTIL (激活进程的条件) 顺序说明语句 END PROCESS [进程名];
2.2.3 SUBPROGRAM语句结构描述

子程序是主程序调用它以后,能将处理结果返回 给主程序的模块。子程序可以反复调用。调用时, 首先要初始化,执行结束后,子程序就终止。子 程序内部的值不能保持,子程序返回,才能被再 次调用。
练习

试写出半加器的实体描述: 如右图所示 a,b 为半加器的输入端口, s,co 为输出信号, s 为和信号, co 为 进位信号。
a b
co s
2.1.2 构造体
构造体(Architecture)具体指明了该设计 实体的行为,定义了该设计实体的功能,规 定了该设计实体的数据流程,指派了实体中 内部元件的连接关系。
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 用结构体的功能来命名

d0 d1 q
sel
类属参数说明

类属参数说明是实体说明中的可选项,放在端口说 明之前,用于指定参数; 其一般书写格式为:

GENERIC 常数名:数据类型 [:=设定值] ,…];

举例:GENETRIC(m:TIME:=1ns); 这个参数说明是指在VHDL程序中,构造体内的参 数m的值为1ns。
配置(Configuration) 包集合(Package) 库(Library)
(Architecture)
进程、 块、子程序
配置Configuration)


实体: 描述所设计的系统的外部接口信号;
构造体:描述系统内部的结构和行为; 配置: 用于从库中选取所需要单元来组成系统设 计的不同版本;
LINKAGE
不指定方向,无论哪一个方向都可连接
(3)数据类型:VHDL有10种数据类型(下一章详细介绍) BIT和BIT_VECTOR STD_LOGIC和STD_LOGIC_VECTOR
使用时需要加入以下两个语句:
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;



(1)端口名:赋予每个外部引脚名称,通常用一 个或几个英文字母,或者用英文字母加数字命名 之,例如:d0,d1,sel。 (2)端口方向:用来定义外部引脚的信号方向。
请注意 OUT与 BUFFER 的区别

方向定义 IN OUT INOUT BUFFER
含义 输入 输出(构造体内部不能再使用) 双向 输出(构造体内部可再使用)
构造体对其基本设计单元的输入输出关系有三 种描述方式 : (1) 行为描述: 对设计实体按算法的路径来描述。采用进程语 句顺序描述设计实体的行为和功能。 (2) 寄存器传输描述(数据流描述): 通过描述数据流程的运动路径、方向和运动 结果,实现设计实体的行为和功能。 (3) 结构描述(逻辑元件连接描述): 采用并行处理语句描述设计实体内的结构组 织和元件互连关系。通常用于层次式设计。
端口说明

端口说明是对基本设计实体(单元)与外部接口的描 述,也可以说是对外部引脚信号的名称,数据类型和 输入、输出方向的描述; 其一般书写格式为: PORT(端口名{,端口名}:方向 数据类型名; 端口名{,端口名}:方向 数据类型名); 举例: PORT(d0,d1,sel : IN BIT; q : OUT BIT; bus : OUT BIT_VECTOR(7 DOWNTO 0) );
子程序(SUBPROGRAM)结构。
2.2.1 BLOCK语句结构描述


块(BLOCK)可看作构造体中子模块,BLOCK可以把许多语 句包装在一起。在 VHDL 语言中,电路的构造体对应整个 电 路 图 , 而 构 造 体 可 以 由 多 个 BLOCK 块 构 成 , 每 一 个 BLOCK块对应一张子原理图。 BLOCK语句的一般格式如下: 块结构名: BLOCK BEGIN <并行语句A> … END BLOCK 块结构名;

PROCESS语句的书写格式如下:
[进程名:]PROCESS[敏感信号表] 变量说明语句: BEGIN … 顺序说明语句 … END PROCESS [进程名];
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语句 是同时并发运行的。


卫式BLOCK(Guarded BLOCK): 可实现BLOCK的执行控制,当满足一定条件时 BLOCK语句才被执行。 卫式BLOCK举例:
ARCHITECTURE latch_guard OF latch IS BEGIN 格式:BLOCK[卫式布尔表达式] 当卫式尔表达式为真时,BLOCK语 句被执行,否则不被执行。
第2章 VHDL语言程序的基本结构


主要内容
VHDL语言设计的基本单元及其构成 :
实体 + 构造体

VHDL语言构造体的子结构描述 :
块、进程、子程序

包集合、库及配置
一个完整的VHDL语言程序 通常包含5个部分:
必 备 部 分
库、包集合 实体(Entity)
实体(Entity)
结构体
构造体Architecture)

举例: 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;
定义语句


定义语句位于ARCHITECTURE 和BEGIN之间,用于 对构造体内部所使用的信号、常数、数据类型和函数 进行定义。 举例:ARCHITECTURE behav OF mux IS SIGNAL tmp:BIT; BEGIN END behav; 构造体的信号定义和实体的端口说明一样,应有信号 名称和数据类型定义,但不需要定义信号模式,不用 说明信号方向,因为是结构体内部连接用信号。

构造体的一般书写格式为: ARCHITECTURE 构造体名 OF 实体名 IS
相关文档
最新文档