VHDL

2019-03-15 12:56

第四章 VHDL简明教程

§4.1 VHDL基本结构与语法

·VHDL是VHSIC Hardware Description Language的缩写

□ VHSIC—Very High Speed Integrated Circuit(1982年)

·由美国国防部(DOD)制定,以作为各合同商之间提交复杂电路设计文档的一种标准方案 ·1987年被采纳为IEEE 1076标准 ·1993年被更新为IEEE 1164标准

HDL 的出现是为了适应电子系统设计的日益复杂性。若以计算机软件的设计与电路设计做个类比,机器码好比晶体管/MOS管;汇编语言好比网表;则HDL语言就如同高级语言,VHDL在语法和风格上类似与现代高级编程语言,如C语言。但要注意,VHDL毕竟描述的是硬件,它包含许多硬件特有的结构。 ·现在VHDL被广泛用于: 电路设计的文档记录 设计描述的逻辑综合 电路仿真

采用VHDL及自顶向下方法在大型数字系统设计中被广泛采用。在设计中你可采用较抽象的语言(行为/算法)来描述系统结构,然后细化成各模块,最后可借助编译器将VHDL描述综合为门级。

本教程仅对用于CPLD/FPGA设计描述的VHDL语言作一简单说明。其设计过程一般如下:

1. 代码编写;

2. 由综合器(如Synplify,Synopsys等)综合成门级网表; 3. 前仿真/功能仿真;

4. 布局/布线至某一类CPLD/FPGA中; 5. 后仿真/时序仿真。

4.1.1 VHDL的组成

一个VHDL设计由若干个VHDL文件构成,每个文件主要包含如下三个部分中的一个或全部:

1.程序包(Package); 2.实体(Entity);

3.结构体(Architecture).

120 — —

其各自作用如下图所示: VHDL设计 VHDL文件 程序包(Packages) 声明在设计或实体中将用到的常数,数据类型,元件及子程序等 实体(Entities) 声明到其他实体及其他设计的接口,即定义本设计的输入/出端口。 结构体(Architectures) 定义了实体的实现。即电路的具体描述

一个完整的VHDL设计必须包含一个实体和一个与之对应的结构体。一个实体可对应多个结构体,以说明采用不同方法来描述电路。

以下以具有异步清零、进位输入/输出的四位计数器为例,讲解VHDL的基本构件:以下为此计数器的VHDL代码:(黑体为关键字)

library ieee; --库,程序包调用 use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all;

ENTITY cntm16 IS --实体 PORT ( ci : IN std_logic; nreset : IN std_logic; clk : IN std_logic;

co : out std_logic; qcnt : buffer std_logic_vector(3 downto 0) --此处无;号 ); END cntm16;

ARCHITECTURE behave OF cntm16 IS --结构体 BEGIN

121 — —

co<='1' when (qcnt=\ and ci='1') else '0'; PROCESS (clk,nreset) --进程(敏感表) BEGIN IF(nreset='0') THEN qcnt<=\ ELSIF (clk'EVENT AND clk = '1') THEN if(ci='1') then qcnt<=qcnt+1; end if; END IF; --end if _reset END PROCESS; END behave;

*注:基本的标识符由字母、数字以及下划线组成,且具有如下特征:

第一个字符必须为字母; 最后一个字符不能是下划线; 不允许连续2个下划线。

最长32个字符,不区分大小写;不能和VHDL的保留字相同。

各完整语句均以“;”结尾,以“--” 开始的语句为注释语句,不参与编译。

下面将分别对程序包,实体,结构体做细致说明。

4.1.2 实体(Entity)

VHDL表达的所有设计均与实体有关,实体是设计中最基本的模块。设计的最顶层是顶层实体。如果设计分层次,那么在顶级实体中将包含较低级别的实体。 实体中定义了该设计所需的输入/输出信号,信号的输入/输出类型被称为端口模式,同时,实体中还定义他们的数据类型。 实体的格式如下:

entityis

port

end;

以上述的四位计数器为例,则该计数器的实体部分如下:

122 — —

ENTITY cntm16 IS

PORT ( ci nreset clk co qcnt

--实体

: IN

: IN : IN : out : buffer std_logic; std_logic; std_logic; std_logic;

std_logic_vector(3 downto 0) --此处无;号

); END cntm16; 端口模式 端口类型 信号名 由此看出,实体(ENTITY)类似于原理图中的符号(Symbol ),它并不描述模块的具体功能。 实体的通信点是端口(PORT),它与模块的输入/输出或器件的引脚相关联。 上述实体对应的原理图符号如下:

每个端口必须定义:

信号名:端口信号名在实体中必须是唯一的。信号名应是合法的标识符*。 属性:它包括

模式(MODE):决定信号的流向

类型(TYPE): 端口所采用的数据类型

端口模式(MODE)有以下几种类型: · IN 信号进入实体但并不输出; · OUT 信号离开实体但并不输入;并且不会在内部反馈使用; · INOUT 信号是双向的(既可以进入实体,也可以离开实体); · BUFFER 信号输出到实体外部,但同时也在实体内部反馈。 BUFFER(缓冲)是INOUT(双向)的子集,但不是由外部驱动

端口模式可用下图说明:(黑框代表一个设计或模块)

IN

OUT BUFFER INOUT

123 — —

端口类型(TYPE)定义端口的数据类型,包括以下几种: · integer 可用作循环的指针或常数,通常不用于I/O信号,

例如:

SIGNAL count :integer range 0 to 255 count <= count + 1 · bit 可取值‘0’或‘1’ · std_logic 工业标准的逻辑类型,取值‘0’,‘1’,‘X’,和‘Z’ --由IEEE std 1164标准定义 · std_logic_vector std_logic的组合,工业标准的逻辑类型

VHDL是与类型高度相关的语言,不允许将一种信号类型赋予另一种信号类型。在此教程中主要采用std_logic和std_logic_vector。若对不同类型的信号进行赋值需使用类型转换函数。

在VHDL中除上述常用于端口类型的数据类型外,还有其他多种数据类型用于定义内部信号,变量等:如

可枚举类型Enumeration(常用于定义状态机的状态)

存取型(Access Types),文件型(File Types)常用于建立模拟模型 物理类型(Physical Types)定义测量单位,用于模拟。 ??

其中可枚举类型Enumeration常用于定义状态机的状态,可枚举类型语法结构如下: type is (); 使用时和其他类型一样:

signal sig_name : type_name; 例:

定义: type traffic_light_state is (red, yellow, green); 使用: signal present_state, next_state :traffic_light_state; 此外,还可定义二维数组,详见第二部分的例子。

4.1.3 结构体(Architecture)

所有能被仿真的实体都由一个结构体描述, 结构体描述实体的行为功能。即设计的功能。一个实体可以有多个结构体,一种结构体可能为行为描述,而另一种结构体可能为设计的结构描述或数据通道的描述。结构体是VHDL设计中最主要部分,它一般由一些各子部分构成,如下图所示:

124 — —


VHDL.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:河北省2015年中考化学试题(word版,含答案)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: