第1章 硬件描述语言VHDLWord文件下载.docx
《第1章 硬件描述语言VHDLWord文件下载.docx》由会员分享,可在线阅读,更多相关《第1章 硬件描述语言VHDLWord文件下载.docx(71页珍藏版)》请在冰豆网上搜索。
![第1章 硬件描述语言VHDLWord文件下载.docx](https://file1.bdocx.com/fileroot1/2022-11/15/aeaf1407-1bd7-459d-99fa-e33db2f0f8be/aeaf1407-1bd7-459d-99fa-e33db2f0f8be1.gif)
(2)采用大量的ASIC芯片
(3)早期仿真以确定系统的可行性
(4)使设计更容易
只需写出系统的HDL源程序文件,其它由计算机去做
(5)全部设计文件就是HDL源程序文件
1.3VHTL硬件设计语言
当前ASIC制造商都自己开发了HDL语言,但是都不通用,只有美国国防部开发的VHDL语言成为了IEEE.STD_1076标准,并在全世界得到了承认。
该语言集成了各种HDL语言的优点,使数字系统设计更加简单和容易。
VHDL语言是一个规模庞大的语言,在使用它之前完全学会它是很难的,本书介绍的只是VHDL语言的一部分。
1.4VHDL语言的基本结构
VHDL语言通常包含实体(Entity),构造体(Architecture),配置(Configuration),包集合(Package),和库(Library)五部分.其中实体用于描述所设计的系统的外部接口信号;
构造体用于描述系统内部的结构和行为;
建立输入和输出之间的关系;
配置语句安装具体元件到实体—结构体对,可以被看作是设计的零件清单;
包集合存放各个设计模块共享的数据类型、常数和子程序等;
库是专门存放预编译程序包的地方。
如下详细介绍。
1.4.1基本设计单元
VHDL的基本设计单元就是实体,无论数字电路复杂还是简单,都是由实体和构造体组成。
(1)实体说明
实体说明有如下结构:
ENTITY实体名IS
[端口说明]
END实体名;
(VHDL语言中不分大小写字母)
其中:
端口说明是对设计实体中输入和输出借口进行描述,格式如下:
PORT(端口名(,端口名):
方向数据类型名;
:
端口名(,端口名):
方向数据类型名);
端口名是赋予每个系统引脚的名称,一般用几个英文字母组成。
端口方向是定义引脚是输入还是输出,见下表:
方向
说明
IN
输入到实体
OUT
从实体输出输出
INOUT
双向
BUFFER
输出(但可以反馈到实体内部)
LINKAGE
不指定方向
常用的端口数据类型有两种:
BIT和BIT_VECTOR,当端口被说明为BIT时,只能取值“1”或“0”,
当端口被说明为BIT_VECTOR时,它可能是一组二进制数。
例:
PORT(n0,n1,select:
INBIT;
q:
OUTBIT;
bus:
OUTBIT_VECTOR(7DOWNTO0));
本例中,n0,n1,select是输入引脚,属于BIT型,q是输出引脚,BIT型,bus是一组8位二进制总线,属于BIT_VECTOR,
LIBRARYIEEE;
USEIEEE.STD_LOGIC.1164.ALL;
ENTITYmmIS
PORT(n0,n1,select:
INSTD_LOGIC;
Q:
OUTSTD_LOGIC;
Bus:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDmm;
在此例中端口数据类型取自IEEE标准库(该库中有数据类型和函数的说明),其中STD_LOGIC取值为“0”,“1”,“X”和“Z”。
因为使用了库所以在实体说明前要增加库说明语句。
(2)构造体
构造体是实体的一个重要部分,每一个实体都有一个或一个以上的构造体。
1)一般说明
构造体格式如下:
ARCHITECTURE构造体名OF实体名IS
[定义语句]内部信号,常数,数据类型,函数等的定义
BEGIN
[并行处理语句]
END构造体名;
ENTITYnaxIS
PORT(a0,a1:
Sel:
Sh:
OUTBIT);
ENDnax;
ARCHITECTUREdataflowOFnaxIS
BEGIN
sh<
=(a0ANDsel)OR(NOTselANDa1);
ENDdataflow;
构造体描述设计实体的具体行为,它包含两类语句:
●并行语句并行语句总是在进程语句(PROCESS)的外部,该语句的执行与书写顺序无关,总是同时被执行
●顺序语句顺序语句总是在进程语句(PROCESS)的内部,从仿真的角度,该语句是顺序执行的
一个构造体包含几个类型的子结构描述,这些描述是:
*BLOCK描述(块描述)
*PROCESS描述(进程描述)
*SUNPROGRAMS描述(子程序描述)
2)BLOCK语句描述
使用BLOCK语句描述的格式如下:
块标号:
BLOCK
ENDBLOCK块标号:
例:
二选一电路
ENTITYmuxIS
PORT(d0,d1,sel:
ENDmux;
ARCHITECTUREconnectOFmuxIS
SIGNALtmp1,tmp2,tmp3:
BIT;
cale:
BLOCK
tmp1<
=d0ANDsel;
tmp2<
=d1AND(NOTsel);
tmp3<
=tmp1ORtmp2;
q<
=tmp3;
ENDBLOCKcale;
ENDconnect;
在对程序进行仿真时,BLOCK中的语句是并行执行的,与书写顺序无关,这一点和构造体中直接写的语句是一样的。
3)进程(PROCESS)描述
进程描述的格式如下:
[进程名]:
PROCESS(信号1,信号2,。
。
)
ENDPROCESS进程名;
*一般用于组合电路进程模式:
__进程标记:
PROCESS(__信号名,__信号名,__信号名)
VARIABLE__变量名:
STD_LOGIC;
--指定信号
--指定变量
--过程调用
--如果语句
--CASE语句
--循环语句
ENDPROCESS__进程标记;
*用于时序电路进程模式:
WAITUNTIL__时钟信号='
1'
;
ENTITYmux1IS
q:
ENDmux1;
ARCHITECTUREconnectOFmux1IS
BEGIN
cale:
PROCESS(d0,d1,sel)
VARIABLEtmp1,tmp2,tmp3:
--在进程中定义的变量
tmp1:
--输入端口向变量赋值
tmp2:
tmp3:
ENDPROCESScale;
在PROCESS中的语句是顺序执行的,这一点和BLOCK中的语句是不一样的。
当PROCESS所带的信号量发生变化时,PROCESS中的语句就会执行一遍。
4)子程序描述
子程序的概念和其它高级程序中子程序的概念相同,在VHDL中有两种类型:
●过程(Procedure)
●函数(Function)
1.过程的格式:
PROCEDURE过程名(参数1,参数2。
)IS
[定义变量语句]
[顺序处理语句]
END过程名;
PROCEDUREvector_to_int
(z:
INSTD_LOGIC_VECTOR;
x_flag:
OUTBOOLEAN;
ININTEGER)IS
=0;
x_flag:
=FALSE;
FORiINzRANGELOOP
=q*2;
IF(z(i)=1)THEN
=q+1;
ELSEIF(z(i)/=10)THEN
=TRUE;
ENDIF;
ENDLOOP;
ENDvector_to_int;
在过程中,语句是顺序执行的。
2.函数
函数的格式:
FUNCTION函数名(参数1,参数2。
)RETURN数据类型名IS
RETURN[返回变量名];
END函数名;
在VHDL语言中函数的参数都是输入信号,
FUNCTIONmin(x,y:
INTEGER)RETURNINTEGERIS
IFX<
YTHEN
RETURN(x);