VHDL(电子科技大学)_第1页
VHDL(电子科技大学)_第2页
VHDL(电子科技大学)_第3页
VHDL(电子科技大学)_第4页
VHDL(电子科技大学)_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

硬件描述语言VHDL

1.1什么是VHDL(HDL)?

VHDL:

VHSIC(VeryHighSpeedIntegratedCircuit)

Hardware

Description

Language

1概述VHDL设计简述器件或子系统ENTITYportsportsARCHITECTUREProcessProcessSequentialProcessCombinationalProcesscomponent2选1选择器的VHDL描述:n

VHDL语言是由保留字编织起来的n

该语言,对绝大多数的部分而言,是大小写不敏感的n

VHDL语句由一个;结束n

VHDL是空白不敏感的。便于阅读n

VHDL中,注释由“--”开头到行结束而结束n

VHDL模型可以被写成:–行为的–结构的–混合的1.7VHDL语言的一些基本特点2VHDL程序基本结构基本结构包括:

库(Library)

程序包(Package)

实体(Entity)结构体(Architecture)配置(Configuration)

库、程序包

实体(Entity)

结构体

(Architecture)

进程或其它并行结构

配置(Configuration)结构单元说明n

VHDL设计单元

-库:用来调用电路模型所需共享资源数据–实体•用来定义电路模型的外观图,亦即器件的符号–构造体•用来定义电路模型的功能,亦即器件内部电路图–配置•用来联系构造体和实体–包•可以由VHDL电路模型引用的信息的汇集,亦即库•由包声明和包体两个部分构成2.2实体声明实体声明:定义系统的输入输出端口语法:

ENTITY<entity_name>ISGenericDeclarations(类属表);

PortDeclarations(端口表);END<entity_name>;(1076-1987version)ENDENTITY<entity_name>;(1076-1993version)

1、类属声明

类属声明:确定实体或组件中定义的局部常数。是一种端口界面常数。常以说明的形式放在实体或结构体前的说明部分。它的值可由实体外部提供。

语法:

Generic(常数名称:数据类型[:=缺省值]{;常数名称:数据类型[:=缺省值]}};例:

entitymckisgeneric(width:integer:=16);port(add_bus:inbit_vector(width-1downto0);equal:outboolean);

endmck;2、端口声明端口声明:确定系统输入输出端口的名称和类型。语法:其中,端口方式:

in输入型,此端口为只读型。

out输出型,此端口只能在实体内部对其赋值。

inout

(双向)输入输出型,既可读也可赋值。

buffer(带反馈)缓冲型,与out相似,但可读。Port(

端口名称{,端口名称}:端口方式数据类型;

端口名称{,端口名称}:端口方式数据类型);例:

一个a,b输入,q输出的二与门的实体定义:

ENTITYand2IS

PORT(a,b:INstd_logic;

q:OUTstd_logic);

ENDand2;2.3结构体作用:定义系统(或模块)的行为、元件及内部的连接关系,即描述其功能。

3种描述方式:行为描述:数据流描述:结构描述:说明n结构体的关键点–相当于:电路–描述模型的功能和时序–必须与一个ENTITY相关联–ENTITY可以有多个结构体结构体声明格式ARCHITECTURE<结构体名>

OF<entity名>IS--构造体声明段(所列并非全部)signaltemp:integer:=1; --信号声明constantload:boolean

:=true; --常数声明typestatesis(S1,S2,S3,S4); --类型声明--元件声明--子类型声明,等等BEGIN进程语句并行信号赋值元件例示语句END<构造体名>

;(1076-1987版)ENDARCHITECTURE<构造体_标识符>;(1076-1993版)例:一个完整描述(3bit计数器)

3bit计数器的等效描述(out

buffer

的区别):四类语言要素:数据对象(DataObject)

数据类型(DataType)

操作数(Operands)

操作符(Operator)3VHDL语言要素数据对象三种对象:常量(Constant)

变量(Variable)

信号(Signal)三种对象的物理含义:信号代表物理设计中的某一条硬件连接线;变量代表暂存某些值的载体;常量代表数字电路中的电源、地等常数。三种对象的特点及说明场合:信号:全局量,用于architecture、package、entitiy。

变量:局部量,用于process、function、procedure。

常量:全局量,可用于上面两种场合。1、常量声明常量声明:对某一个常量名赋予一个固定的值。格式:例:constantwidth:integer:=8;

constantx:new_bit:=‘x’;

constant常数名:数据类型:=表达式;2、变量声明格式:例:

variablea,b:bit;variablecount:integerrange0to255:=10;注:

a.变量的初值可用于仿真,但综合时被忽略。

b.只能在进程、子程序中使用。

c.变量赋值的数据传输是立即发生,不存在任何延时。variable变量名:数据类型:初始值;3、信号声明

信号是电子电路内部硬件连接的接点。与“端口”概念相似。格式:

例:signala,b:bit;

注:a.综合时初值被忽略。

b.可在结构体、实体、块中声明和使用信号,在进程和子程序中只能使用信号,不能声明信号。

c.信号的赋值存在延时。signal信号名:数据类型:初始值;例:信号与变量的使用Entityexisport(…..);endex;architecturearch_exofexissignala,b:std_logic;beginprocess(a,b)variablec,d:std_logic;beginc:=a+b;d:=a-b;……endprocess;endarch_ex;3VHDL数据类型

VHDL是一种“强”数据类型语言。1)整数(integer)

integer表示所有正的和负的整数。硬件实现时,利用32位的位矢量来表示。可实现的整数范围为:-(231-1)to(231-1)2)std_logic

类型由ieee

库中的std_logic_1164程序包定义,为九值逻辑系统,如下:(‘U’,‘X’,‘0’,‘1’,‘Z’,‘W’,‘L’,‘H’,‘-’)3)std_logic_vector

类型由std_logic

构成的数组。

4VHDL中的表达式

表达式:由操作符和操作数构成,完成算术或逻辑运算。操作符

VHDL操作符的分类:逻辑操作符、关系操作符加减操作符、一元操作符乘除操作符

**abs杂散*/modrem乘除+-符号+-&加减=/=<<=>>=关系Notandornandnorxorxnor(1)逻辑运算符

名/符号运算符类型VHDL

运算符ENTITYoverloadISENDoverload;ARCHITECTUREexampleOFoverloadISBEGIN adder_body:PROCESS(a,b) BEGIN

ENDPROCESSadder_body;ENDexample;LIBRARYieee;USEieee.std_logic_1164.all;USEieee.std_logic_unsigned.all;PORT(a:INSTD_LOGIC_VECTOR(3downto0); b:INSTD_LOGIC_VECTOR(3downto0); sum:OUTSTD_LOGIC_VECTOR(4downto0));

sum<=a+b;在设计文件的开头部分包括这些语句允许对非内建的数据类型进行运算运算符重载的使用4VHDL的常用语句VHDL语句主要分为两大类:顺序(Sequential)描述语句并行(Concurrent)描述语句4.1VHDL顺序语句顺序语句:语句的执行顺序与书写顺序一致,只能出现在进程与子程序中。常用的顺序描述语句:赋值语句;if语句;case语句;4.1赋值语句赋值语句所表达的数据对象是:信号和变量语法格式变量:=表达式;--变量赋值信号<=表达式;--信号赋值要求:表达式的值必须与对象的类型、宽度一致。例:一位赋值temp(7)<=‘1’;ortemp(7):=‘1’;

位片赋值temp(7downto4)<=“1010”;

一位:单引号

(‘)

多位:双引号

(“)变量赋值与信号赋值的差异:1)赋值方式的不同:变量:=表达式;信号<=表达式;2)硬件实现的功能不同:信号代表电路单元、功能模块间的互联,代表实际的硬件连线;变量代表电路单元内部的操作,代表暂存的临时数据。4.2if语句

if语句是一种条件语句,按指定的顺序执行所设置的一个或多个条件的值。

1、if语句的门闩控制

if条件then

顺序处理语句;endif;例:if(ena=‘1’)thenq<=d;

endif;综合后生成锁存器(latch)例:D触发器:2、if语句的二选择控制

格式:

用条件来选择两条不同程序执行的路径。if条件then

顺序处理语句;else

顺序处理语句;endif;此描述的典型电路是二选一电路:

architecturertlofmux2isbeginprocess(a,b,sel)beginif(sel=‘1’)theny<=a;elsey<=b;endif;endprocess;endrtl;3、if语句的多选择控制

if语句的多选择控制又称为if语句的嵌套。格式:

if条件then

顺序处理语句;elsif

条件then

顺序处理语句;┇elsif

条件then

顺序处理语句;else

顺序处理语句;endif;典型电路是多选一电路。如四选一电路:

if_then_elsif

语句中隐含了优先级别的判断,最先出现的条件优先级最高,可用于设计具有优先级的电路。如8-3优先级编码器。

libraryieee;useieee.std_logic_1164.all;entitycoderis

port(input:instd_logic_vector(7downto0);

output:outstd_logic_vector(2downto0));endcoder;

architectureartofcoderisbeginprocess(input)beginifinput(7)=‘0’thenoutput<=“000”;

elsifinput(6)=‘0’thenoutput<=“001”;

elsifinput(5)=‘0’thenoutput<=“010”;

elsifinput(4)=‘0’thenoutput<=“011”;

elsifinput(3)=‘0’thenoutput<=“100”;

elsifinput(2)=‘0’thenoutput<=“101”;

elsifinput(1)=‘0’thenoutput<=“110”’;elseoutput<=“111”;endif;endprocess;endart;4.3case语句

case语句根据满足的所有条件直接选择多项顺序语句中的一项执行。格式如下:注:除条件句中所有选择值能完全覆盖CASE语句中表达式的取值,否则最末一个条件句中的选择必须用“OTHERS”表示。

case表达式iswhen选择值=>顺序处理语句;

when选择值=>顺序处理语句;。。。

whenothers=>顺序处理语句;

endcase;┇例:用case语句描述四选一电路

5VHDL并行语句(Concurrent)

Architecture并行语句在结构体中的执行是同步进行的,执行方式与书写顺序无关。并行语句内部运行有两种方式:并行执行方式(如快语句)和顺序执行方式(如进程语句)并行语句并行语句并行语句信号信号信号

常用的并行描述语句有:并行信号赋值语句;进程(process)语句;元件例化语句;

5.1进程(process)语句

进程:表述了一种进行过程,描述顺序事件,内部包含了一个代表实际实体中部分逻辑行为的、独立的顺序语句描述的进程。PROCESS放在结构体中,一个结构体可有多个PROCESS并行运行。特点:

1、进程之间的并行性;

2、进程内部的顺序性;

3、进程的启动;

4、进程之间的通信语法:敏感信号表:进程内要读取的所有敏感信号(包括端口)的列表。每一个敏感信号的变化,都将启动进程。进程中所有输入信号都要列入敏感表中。

[标记:]process[(敏感信号表)]{进程声明项}begin{顺序语句}

endprocess[标记];敏感信号表的特点:1、同步进程的敏感信号表中只有时钟信号。如:process(clk)beginif(clk’eventandclk=‘1’)then

ifreset=‘1’thendata<=“00”;else

data<=in_data;endif;endif;endprocess;2、异步进程敏感信号表中除时钟信号外,还有其它信号。例:process(clk,reset)begin

ifreset=‘1’thendata<=“00”;

elsif(clk’eventandclk=‘1’)thendata<=in_data;endif;endprocess;

3、如果有wait语句,则不允许有敏感信号表。PROCESS(a,b)BEGIN--sequentialstatementsENDPROCESS;PROCESSBEGIN--sequentialstatementsWAITON(a,b);ENDPROCESS;5.2并行信号赋值语句包括三种形式:简单信号赋值;条件信号赋值;选择信号赋值。特点:1、赋值目标必须都是信号。

2、每条赋值语句相当于一条缩写的进程语句,且语句中的所有输入信号都被隐性地列入此过程的敏感信号表中。

3、任何输入信号的变化都将启动相关并行语句的赋值操作。1、简单并行信号赋值语句即:信号<=表达式例:以下两种描述等价一个简单并行信号赋值语句是一个进程的缩写。architecturebehavofa_varisbeginoutput<=a(i);endbehav;architecturebehavofa_varisbeginprocess(a,i)beginoutput<=a(i);endprocess;endbehav;等效:LIBRARYieee;USEieee.std_logic_1164.all;ENTITYsimp

ISPORT(a,b:INSTD_LOGIC;y:OUTSTD_LOGIC);ENDsimp;ARCHITECTURElogicOFsimp

ISSIGNALc:STD_LOGIC;BEGINc<=aandb;y<=c;ENDlogic;LIBRARYieee;USEieee.std_logic_1164.all;ENTITYsimp_prc

ISPORT(a,b:INSTD_LOGIC;y:OUTSTD_LOGIC);ENDsimp_prc;ARCHITECTURElogicOFsimp_prc

ISSIGNALc:STD_LOGIC;BEGINprocess1:PROCESS(a,b)BEGINc<=aandb;ENDPROCESSprocess1;process2:PROCESS(c)BEGINy<=c;ENDPROCESSprocess2;ENDlogic;不等效:LIBRARYieee;USEieee.std_logic_1164.all;ENTITYsimp

ISPORT(a,b:INSTD_LOGIC;y:OUTSTD_LOGIC);ENDsimp;ARCHITECTURElogicOFsimp

ISSIGNALc:STD_LOGIC;BEGINc<=aandb;y<=c;ENDlogic;LIBRARYieee;USEieee.std_logic_1164.all;ENTITYsimp_prc

ISPORT(a,b:INSTD_LOGIC;y:OUTSTD_LOGIC);ENDsimp_prc;ARCHITECTURElogicOFsimp_prc

ISSIGNALc:STD_LOGIC;BEGINPROCESS(a,b)BEGINc<=aandb;y<=c;ENDPROCESS;ENDlogic;2、条件信号赋值语句格式:赋值目标<=表达式1when条件1else

表达式2when条件2else

表达式3when条件3else┆

表达式n;例:用条件信号赋值语句描述四选一电路

entitymux4isport(i0,i1,i2,i3,a,b:instd_logic;q:outstd_logic);endmux4;architecturertlofmux4issignalsel:std_logic_vector(1downto0);begin

sel<=b&a;q<=i0whensel=“00”elsei1whensel=“01”elsei2whensel=“10”elsei3whensel=“11”;endrtl;条件信号赋值语句与进程中的多选择if语句等价:q<=aWHENsela=‘1’ELSEbWHENselb=‘1’ELSEc;PROCESS(sela,selb,a,b,c)BEGINIFsela=‘1’THENq<=a;ELSIFselb=‘1’THENq<=b;ELSEq<=c;ENDIF;ENDPROCESS;3、选择信号赋值语句

选择信号赋值语句与进程中的

case语句等价。

格式:注:1)不能有重叠的条件分支。

2)最后条件可为others。否则,其它条件必须能包含表达式的所有可能值。with表达式select

赋值目标<=表达式1when选择值1,表达式2when选择值2,┆表达式nwhen选择值n;例:用选择信号赋值语句描述四选一电路

entitymux4isport(i0,i1,i2,i3,a,b:instd_logic;q:outstd_logic);endmux4;architecturertlofmux4issignalsel:std_logic_vector(1downto0);begin

sel<=b&a;withselselectq<=i0whensel=“00”,i1whensel=“01”,i2whensel=“10”,i3whensel=“11”,‘X’whenothers;

endrtl;选择信号赋值语句与进程中的case语句等价:PROCESS(sel,a,b,c,d)BEGIN

CASEsel

ISWHEN“00”=>q<=a;WHEN“01”=>q<=b;WHEN“10”=>q<=c;WHENOTHERS=>q<=d;ENDCASE;ENDPROCESS;WITHsel

SELECTq<=aWHEN“00”,bWHEN“01”,cWHEN“10”,dWHENOTHERS;5.3元件声明与元件例化语句元件声明与例化语句属于结构化建模设计。用于VHDL的层次化设计的上层设计。是对上层单元中的元件或模块进行端口定义,用元件例化语句指名所定义的模块或元件与该单元中其它相连的器件的连接映射关系。上层中所定义模块的内部功能由对应的下层单元实现。1.元件声明格式定义:对所调用的较低层次的实体模块(元

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论