完整word版vhdl基本语法文档格式.docx

上传人:b****6 文档编号:8356386 上传时间:2023-05-11 格式:DOCX 页数:64 大小:99.26KB
下载 相关 举报
完整word版vhdl基本语法文档格式.docx_第1页
第1页 / 共64页
完整word版vhdl基本语法文档格式.docx_第2页
第2页 / 共64页
完整word版vhdl基本语法文档格式.docx_第3页
第3页 / 共64页
完整word版vhdl基本语法文档格式.docx_第4页
第4页 / 共64页
完整word版vhdl基本语法文档格式.docx_第5页
第5页 / 共64页
完整word版vhdl基本语法文档格式.docx_第6页
第6页 / 共64页
完整word版vhdl基本语法文档格式.docx_第7页
第7页 / 共64页
完整word版vhdl基本语法文档格式.docx_第8页
第8页 / 共64页
完整word版vhdl基本语法文档格式.docx_第9页
第9页 / 共64页
完整word版vhdl基本语法文档格式.docx_第10页
第10页 / 共64页
完整word版vhdl基本语法文档格式.docx_第11页
第11页 / 共64页
完整word版vhdl基本语法文档格式.docx_第12页
第12页 / 共64页
完整word版vhdl基本语法文档格式.docx_第13页
第13页 / 共64页
完整word版vhdl基本语法文档格式.docx_第14页
第14页 / 共64页
完整word版vhdl基本语法文档格式.docx_第15页
第15页 / 共64页
完整word版vhdl基本语法文档格式.docx_第16页
第16页 / 共64页
完整word版vhdl基本语法文档格式.docx_第17页
第17页 / 共64页
完整word版vhdl基本语法文档格式.docx_第18页
第18页 / 共64页
完整word版vhdl基本语法文档格式.docx_第19页
第19页 / 共64页
完整word版vhdl基本语法文档格式.docx_第20页
第20页 / 共64页
亲,该文档总共64页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

完整word版vhdl基本语法文档格式.docx

《完整word版vhdl基本语法文档格式.docx》由会员分享,可在线阅读,更多相关《完整word版vhdl基本语法文档格式.docx(64页珍藏版)》请在冰点文库上搜索。

完整word版vhdl基本语法文档格式.docx

一位全加器的逻辑表达式是:

S=A⊕B⊕Ci

Co=AB+ACi+BCi

全加器的VHDL程序的文件名称是fulladder.VHD,其中VHD是VHDL程序的文件扩展名,

程序如下:

LIBRARYIEEE;

--IEEE标准库

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_ARITH.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYfulladderIS--fulladder是实体名称

PORT(

A,B,Ci:

INSTD_LOGIC;

--定义输入/输出信号

Co,S:

OUTSTD_LOGIC

);

ENDfulladder;

ARCHITECTUREaddstrOFfulladderIS--addstr是结构体名

BEGIN

S<

=AXORBXORCi;

Co<

=(AANDB)OR(AANDCi)OR(BANDCi);

ENDaddstr;

从这个例子中可以看出,一段完整的VHDL代码主要由以下几部分组成:

第一部分是程序包,程序包是用VHDL语言编写的共享文件,定义在设计结构体和实体

中将用到的常数、数据类型、子程序和设计好的电路单元等,放在文件目录名称为IEEE的

程序包库中。

第二部分是程序的实体,定义电路单元的输入/输出引脚信号。

程序的实体名称fulladder

是任意取的,但是必须与VHDL程序的文件名称相同。

实体的标识符是ENTITY,实体以

ENTITY开头,以END结束。

其中,定义A、B、Ci是输入信号引脚,定义Co和S是输出信号引脚。

第三部分是程序的结构体,具体描述电路的内部结构和逻辑功能。

结构体有三种描述方

式,分别是行为(BEHAVIOR)描述、数据流(DATAFLOW)描述方式和结构(STRUCTURE)

描述方式,其中数据流(DATAFLOW)描述方式又称为寄存器(RTL)描述方式,例中结

构体的描述方式属于数据流描述方式。

结构体以标识符ARCHITECTURE开头,以END结

尾。

结构体的名称addstr是任意取的。

小提示:

VHDL每条语句是以分号“;

”作为结束符的,并且VHDL对空格是不敏感的,所以符合

之间空格的数目是可以自己设定的。

可以按自己的习惯任意添加,增强代码可读性。

1.1.3VHDL语言的实体(ENTITY)说明语句

实体是VHDL程序设计中最基本的组成部分,在实体中定义了该设计芯片中所需要的输

入/输出信号引脚。

端口信号名称表示芯片的输入/输出信号的引脚名,这种端口信号通常被

称为外部信号,信号的输入/输出状态被称为端口模式,在实体中还定义信号的数据类型。

实体说明语句的格式为:

ENTITY实体名称IS

GENERIC(

常数名称1:

类型[:

=缺省值];

常数名称2:

常数名称N:

);

端口信号名称1:

输入/输出状态数据类型;

端口信号名称2:

端口信号名称N:

输入/输出状态数据类型

END实体名称;

VHDL语言具有87标准与93标准两种格式,以上为VHDL的87标准,对于93标准要

使用ENDENTITY实体名称;

结束实体。

注意为了保证代码的可综合性与通用性,最

好采用87标准的VHDL格式,有些EDA工具不一定支持93标准的VHDL语言格式。

(QuartusII支持VHDL93、87标准)

类属GENERIC常用来定义实体端口大小,数据宽度,元件例化数目等。

一般在简单的

设计中不常用。

例1-1-2一个同步十六进制加法计数器,带有计数控制、异步清零、和进位输出等功能。

电路有三个输入端和五个输出端,分别是时钟脉冲输入端CLK,计数器状态控制端EN,异

步清零控制端Rd,四位计数输出端Q0,Q1,Q2,Q3和一个进位输出端Co。

当计数器输出

0000~1110时,Co=0,只有当计数器输出1111时,Co=1。

该设计的实体部分如下:

ENTITYcntm16IS

EN:

Rd:

CLK:

Co:

OUTSTD_LOGIC;

Q:

BUFFERSTD_LOGIC_VECTOR(3DOWNTO0)

ENDcntm16;

1.实体名称表示所设计电路的电路名称,必须与VHDL文件名相同,实体名称是“cntm16”,

所存的VHDL文件名必须是“cntm16.VHD”。

2.端口信号名称表示芯片的输入/输出信号的引脚名,这种端口信号通常被称为外部信号,

端口信号名称可以表示一个信号,也可以表示一组信号(BUS),由数据类型定义,如

EN,Rd,CLK,Co分别表示计数允许信号,异步清零信号,时钟输入信号和进位输出

信号,Q是一组输出信号,用来表示四位同步二进制计数器的四位计数输出信号。

3.端口信号输入/输出状态有以下几种状态:

IN信号进入电路单元。

OUT信号从电路单元输出。

INOUT信号是双向的,既可以进入电路单元也可以从电路单元输出。

BUFFER信号从电路单元输出,同时在电路单元内部可以使用该输出信号。

OUT与BUFFER信号的区别就在于信号是否往内部有反馈,将输出端口定义为

BUFFER型,可以省去一个用于中间运算的一个临时信号,但是并不推荐这么做。

4.端口数据类型(TYPE)定义端口信号的数据类型,在VHDL中,常用的端口信号数据类

型如下:

(1)位(BIT)型:

表示一位信号的值,可以取值‘0’和‘1’,放在单引号里面表示,

如X<

=‘1’,Y<

=‘0’。

(2)位向量(BIT_VECTOR)型:

表示一组位型信号值,在使用时必须标明位向量的宽

度(个数)和位向量的排列顺序,例如:

OUTBIT_VECTOR(3downto0),表示

Q3,Q2,Q1,Q0四个位型信号。

位向量的信号值放在双引号里面表示,例如Q<

=

“0000”;

(3)标准逻辑位(STD_LOGIC)型:

IEEE标准的逻辑类型,它是BIT型数据类型的扩展,

可以取值‘U’,‘X’,‘0’,‘1’,‘Z’,‘W’,‘L’,‘H’,‘-’

等。

(4)标准逻辑位向量(STD_LOGIC_VECTOR)型:

IEEE标准的逻辑向量,表示一组标

准逻辑位型信号值。

VHDL是与类型高度相关的语言,不允许将一种数据类型的信号赋予另一种数据类型的

信号。

除了上述介绍的数据类型外,还有其他多种数据类型用于定义内部信号和变量,请参

见1-2节。

相同类型(模型相同,数据类型相同)的端口可以写在同一行,如:

EN,Rd,CLK:

此外要注意,最后一个端口结尾没有分号!

1.1.4VHDL语言的结构体(ARCHITECTURE)

结构体是VHDL程序设计中的最主要组成部分,是描述设计单元的具体结构和功能,在

程序中,结构体放在实体的后面。

每一个结构体都有名称,结构体的名称是由设计者任取的,

结构体是以标识符ARCHITECTURE开头,以END结尾。

结构体可以有三种描述方式,分别

是行为(BEAVHER)描述方式、数据流(DATAFLOW)描述方式和结构(STRUCTURE)

描述方式,其中数据流(DATAFLOW)描述方式又称为寄存器(RTL)描述方式。

不同的

结构体采用不同的描述语句。

结构体的一般格式为:

ARCHITECTURE结构体名OF实体名称IS

说明语句

电路描述语句

END结构体名;

结构体说明语句是对结构体中用到的数据对象的数据类型、元件和子程序等加以说明。

电路描述语句用并行语句来描述电路的各种功能,这些并行语句包括并行信号赋值语句、

条件赋值(WHEN-ELSE)语句、进程(PROCESS)语句、元件例化(COMPONETMAP)语

句和子程序调用语句等。

结构体中定义的参数(信号,变量等)名称不能与其所属实体的端口名重名。

结构体的结束语句也可以写成ENDARCHITECTURE结构体名,或者简写为END。

例1-1-2设计程序的结构体部分如下:

ARCHITECTUREcounstrOFcntm16IS

=.1.WHEN(Q=”1111”ANDEN=.1.)ELSE.0.;

--条件赋值语句

PROCESS(CLK,Rd)--PROCESS语句

IF(Rd=.0.)THEN--IF语句

Q<

=”0000”;

ELSIF(CLK.EVENTANDCLK=.1.)THEN--CLK上升沿计数

IF(EN=.1.)then

Q<

=Q+1;

ENDIF;

ENDPROCESS;

ENDcounstr;

结构体的名称是counstr,该结构体属于行为描述方式,采用多种描述语句,如进程

(PROCRESS)语句,条件赋值语句(WHEN-ELSE),顺序语句(IF-ELSE)等,这些语

句的具体用法参见1-3节相关内容。

一个实体可以有多个结构体(反之不成立),多个结构体代表实体实现的多种方式,同一

个实体的各结构体之间地位等同,可以采用配置语句将特定的某个结构体关联到实体,这

样使同一个实体可以设计为多种实现功能,但是笔者不推荐使用多个结构体来实现实体功

能,因为在综合时,配置语句是不可综合的,所以尽量每个实体仅一个结构体表述完整,

这样比较清晰,整体化。

所以就不介绍配置语句了,有兴趣的读者请查阅相关教材。

1.1.5程序包(PACKAGE)、库(LIBRARY)和USE语句

程序包定义了一组标准的数据类型说明、常量说明、元件说明、子程序说明和函数说明

等,它是一个用VHDL语言描写的一段程序,可以供其他设计单元调用。

它如同C语言中的*.H文件一样,定义了一些数据类型说明和函数说明。

在一个设计单元中,在实体部分所定义的数据类型、常数和子程序在相应的结构体中是可以被使用的(可见的),但是在一个实体的说明部分和结构体部分中定义的数据类型、常量及子程序却不能被其它设计单元的实体和结构体使用(不可见)。

程序包就是为了使一组类型说明、常量说明和子程序说明对多个设计单元都可以使用而提供的一种结构。

程序包分为两大类,即VHDL预定义标准程序包和用户定义的程序包。

VHDL设计中常用的标准程序包的名称和内容如见表1-1-3所列。

用户定义的程序包是设计者把预先设计好的电路单元设计定义在一个程序包中,放在指定的库中,以供其它设计单元调用,如果在设计中要使用某个程序包中的内容时,可以用USE语句打开该程序包。

有关程序包的设计方法参见1-4-5节的内容。

库(LIBRARY)是专门用于存放预先编译好的程序包的地方,它实际上对应一个文件

目录,程序包的文件就存放在此目录中。

库名与目录名的对应关系可以在编译程序中指定,

库的说明总是放在设计单元的最前面。

例如,对IEEE标准库的调用格式为:

表1-1-3IEEE两个标准库STD和IEEE中的程序包

表1-1-3IEEE两个标准库STD和IEEE中的程序包库名

程序包名

定义的内容

STD

STANDARD

TEXTIO

定义VHDL的数据类型,如BIT,BIT_VECTOR等

TEXT读写控制数据类型和子程序等

IEEE

STD_LOGIC_1164

定义STD_LOG,

STD_LOGIC_VECTOR等

STD_LOGIC_ARITH

定义有符号与无符号数据类型,基于这些数据类型的算术运算符,如“+”,“-”,“∗”,“/”SHL,SHR等

STD_LOGIC_SIGNED

定义基于STD_LOGIC与STD_LOGIC_VECTOR数据类型上的有符号的算术运算

STD_LOGIC_UNSIGNED

定义基于STD_LOGIC与STD_LOGIC_VECTOR类型上的无符号的算术运算

1.常用的库和包的种类

VHDL程序中常用的库有STD库、IEEE库和WORK等。

其中STD和IEEE库中的标准程序

包是由提供EDA工具的厂商提供的,用户在设计程序时可以用相应的语句调用。

(1)STD库

STD库是VHDL语言标准库,库中定义了STANDARD和TEXTIO两个标准程序包。

STANDARD程序包中定义了VHDL的基本的数据类型,如字符(CHARACTER)、整数

(INTEGER)、实数(REAL)、位型(BIT)和布尔量(BOOLEAN)等。

用户在程序中

可以随时调用STANDARD包中的内容,不需要任何说明。

TEXTIO程序包中定义了对文本

文件的读和写控制的数据类型和子程序。

用户在程序中调用TEXTIO包中的内容,需要USE

语句加以说明。

(2)IEEE库

IEEE标准库是存放用VHDL语言编写的多个标准程序包的目录,IEEE库中的程序包有

STD_LOGIC_1164,STD_LOGIC_ARITH,STD_LOGIC_UNSIGNED和

STD_LOGIC_SIGNED等程序包。

其中STD_LOGIC_1164是IEEE标准的程序包,定义了

STD_LOGIC和STD_LOGIC_VECTOR等多种数据类型,以及多种逻辑运算符子程序和数据类型转换子程序等。

STD_LOGIC_ARITH和STD_LOGIC_UNSINGED等程序包是

SYNOPSYS公司提供的,包中定义了SIGNED和UNSIGNED数据类型以及基于这些数据类型的运算符子程序。

用户使用包中的内容,需要用USE语句加以说明。

(3)WORK库

WORK库是用户进行VHDL设计的当前目录,用于存放用户设计好的设计单元和程序包。

在使用该库中的内容时不需要进行任何说明。

2.库、包和USE语句的格式

用户在用到标准程序包中内容时,除了STANDARD程序包以外,都要在设计程序中加

以说明,首先用LIBRARY语句说明程序包所在的库名,再用USE语句说明具体使用哪一个程序包和具体的子程序名。

各种标准程序包中的内容太多,初学者一时之间难以全面了解,

可以用下面的格式,以免出现不必要的错误。

库和包的调用格式:

以下四个语句最好写任何模块的时候先加上,以免出现库没包含全的问题。

1.2VHDL的数据类型和数据对象

VHDL语言和其它高级语言一样,除了具有一定的语法结构外,还定义了常数、变量

和信号等三种数据对象,每个数据对象要求指定数据类型,每一种数据类型具有特定的物理

意义。

由于VHDL语言是强类型语言,不同的语句类型的数据之间不能进行运算和赋值,我们有必要详细了解VHDL语言的数据类型和数据对象。

1.2.1VHDL的标记

一个完整的VHDL语句可以有下列几个部分组成:

标识符、保留字(ReservedWords)、

界符、常数、赋值符号和注释(Comments),所有这些统称为标记。

1.标识符

标识符是程序员为了书写程序所规定的一些词,用来表示常数、变量、信号、子程序、

结构体和实体等名称。

VHDL基本的标识符组成的规则如下:

(1)标识符由26个英文字母、数字0,1,2,…,9及下划线“_”组成;

(2)标识符必须是以英文字母开头;

(3)标识符中不能有两个连续的下划线“_”,标识符的最后一个字符不能是下划线;

(4)标识符中的英文字母不区分大小写;

(5)标识符字符最长可以是32个字符。

例如:

CLK,QO,DAT1,SX_1,NOT_Q是合法的标识符。

3DA,_QD,NA__C,DB-A,DB_等是非法的标识符。

2.保留字

93标准定义了扩展表示符,可以以数字打头,使用VHDL保留字等,不过习惯上依然使用87标准。

VHDL中的保留字是具有特殊含义的标识符号,只能作为固定的用途,用户不能用保留

字作为标识符。

比如ENTITY,ARCHITECTURE,PROCESS,BLOCK,BEGIN和END等。

VHDL保留字如表1-2-1所列。

表1-2-1VHDL保留字abs

access

after

alias

all

and

architecture

array

assert

attribute

begin

block

body

buffer

bus

case

component

configuration

constant

disconnect

downto

else

elsif

end

entity

exit

file

for

function

generate

generic

group

guarded

if

impure

in

inertial

inout

is

label

library

linkage

literal

loop

map

mod

nand

new

next

nor

not

null

of

on

open

or

others

out

package

port

postponed

procedure

process

pure

range

record

register

reject

rem

report

return

rol

ror

select

severity

signal

shared

sla

sll

sra

srl

subtype

then

to

transport

type

unaffected

units

until

use

variable

wait

when

while

with

xnor

xor

3.VHDL中的界符

界符是作为VHDL语言中两个部分的分隔符用的。

如每个完整的语句均以“;

”结尾,用

双减号“-”开头的部分是注释内容,不参加程序编译。

信号赋值符号是“<

=”,变量赋值符号是“:

=”等。

在VHDL中,常用的界符如表1-2-2所列

表1-2-2VHDL中的界符

4.注释符

在VHDL中,为了便于理解和阅读程序,常常加上注释,注释符用双减号“.”表示。

释语句以注释符打头,到行尾结束。

注释可以加在语句结束符“;

”之后,也可以加在空行处。

1.2.2VHDL的数据类型

在VHDL中,定义了三种数据对象,即信号、变量和常数,每一个数据对象都必须具

有确定的数据类型,只有相同的数据类型的两个数据对象才能进行运算和赋值,为此VHDL

定义了多种标准的数据类型,而且每一种数据类型都具有特定的物理意义。

例如,BIT型、

STD_LOGIC型、INTEGER型和REAL型等数据类型。

VHDL的数据类型较多,根据

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2