基于vhdl的复杂可编程逻辑器件cpld应用技术.docx

上传人:b****3 文档编号:4628963 上传时间:2022-12-07 格式:DOCX 页数:97 大小:68.31KB
下载 相关 举报
基于vhdl的复杂可编程逻辑器件cpld应用技术.docx_第1页
第1页 / 共97页
基于vhdl的复杂可编程逻辑器件cpld应用技术.docx_第2页
第2页 / 共97页
基于vhdl的复杂可编程逻辑器件cpld应用技术.docx_第3页
第3页 / 共97页
基于vhdl的复杂可编程逻辑器件cpld应用技术.docx_第4页
第4页 / 共97页
基于vhdl的复杂可编程逻辑器件cpld应用技术.docx_第5页
第5页 / 共97页
点击查看更多>>
下载资源
资源描述

基于vhdl的复杂可编程逻辑器件cpld应用技术.docx

《基于vhdl的复杂可编程逻辑器件cpld应用技术.docx》由会员分享,可在线阅读,更多相关《基于vhdl的复杂可编程逻辑器件cpld应用技术.docx(97页珍藏版)》请在冰豆网上搜索。

基于vhdl的复杂可编程逻辑器件cpld应用技术.docx

基于vhdl的复杂可编程逻辑器件cpld应用技术

基于VHDL的复杂可编程逻辑器件(CPLD)应用技术

绪论

CPLD/FPGA/ASIC诞生与发展概述

一.常见英文缩写解释(按字母顺序排列):

ASIC:

ApplicationSpecificIntegratedCircuit.专用IC

CPLD:

ComplexProgrammableLogicDevice.复杂可编程逻辑器件

EDA:

ElectronicDesignAutomation.电子设计自动化

FPGA:

FieldProgrammableGateArray.现场可编程门阵列

GAL:

GenericArrayLogic.通用阵列逻辑

HDL:

HardwareDescriptionLanguage.硬件描述语言

IP:

IntelligentProperty.智能模块

PAL:

ProgrammableArrayLogic.可编程阵列逻辑

RTL:

RegisterTransferLevel.寄存器传输级(描述)

SOC:

SystemOnaChip.片上系统

SLIC:

SystemLevelIC.系统级IC

VHDL:

VeryhighspeedintegratedcircuitHardwareDescriptionLanguage.

超高速集成电路硬件描述语言

二.硬件描述语言的诞生与发展:

1.硬件描述语言的起源:

人们为了把复杂的电子电路用文字文件方式描述并保存下来,方便他人了解电路内容,就诞生了最初的硬件描述语言。

经过多种硬件描述语言诞生与淘汰的演变,当前国内外普遍使用的主流硬件描述语言只有两种:

VHDL和VerilogHDL。

还有ABEL和AHDL等。

2.VHDL:

以ADA语言为基础,由美国国防高级研究计划局(DARPA)开发。

1985年完成第一版,1987年成为IEEE标准(IEEE1076),1993年增修为IEEE1164标准并使用至今。

1996年又加入电路合成标准程序和规格,成为IEEE1076.3标准。

美国国防部规定其为官方ASIC设计语言。

1995年,中国国家技术监督局出版的《CAD通用技术规范》中,推荐VHDL为我国硬件描述语言的国家标准。

3.VerilogHDL:

以C语言为基础,由GDA(GatewayDesignAutomation)公司的PhilMoorby创建于1983年。

1989年CADENCE公司收购了GDA公司,拥有了VerilogHDL的独家专利。

于1990年正式发表了VerilogHDL,并成立OVI(OpenVerilogInternational)组织推进其发展。

1995年CADENCE公司放弃了VerilogHDL专利,使之成为IEEE标准(IEEE1364)。

4.关于VHDL与VerilogHDL的比较:

不存在优劣之分。

相同电路用这两种硬件描述语言分别编码,长度也大体相同。

现在常用的各种仿真/综合工具均为二者通用。

在日本,VHDL用户略多于VerilogHDL,例如:

NEC,日立,福田电子,丸文等公司通常习惯使用VHDL;而松下,CASIO等公司习惯使用VerilogHDL。

和习惯有关,一个公司通常习惯于使用其中一种。

VHDL与其他HDL比较

lVHDL

—“告诉我你想要电路做什么,我给你提供能实现这个功能的硬件电路”

lVerilogHDL

—和VHDL类似

lABEL、AHDL

—“告诉我你想要什么样的电路,我给你提供这样的电路”

5.国内硬件描述语言书籍的常见问题:

①往往片面夸大某一种硬件描述语言的长处。

②书中的例子尽管都声称通过了仿真合成验证,但仍常见一些语法错误,合成时会出现“错误”或“警告”。

请大家不要过分相信教科书上的语法。

③脱离实际应用,仅仅介绍最基本的概念和语法规定,虽有较复杂的例子但却少有解释,难于理解。

对实际应用中至关重要的编码技巧和避免出错的注意事项,却往往只字不提。

因此,新手入门往往要走很长的弯路。

6.硬件描述语言的近期发展:

目前及今后若干年内,VHDL和VerilogHDL仍将是硬件描述语言主角。

因为它们已经经过无数应用实例的验证,能够满足各类复杂的逻辑功能要求,各种配套工具软件也非常成熟完善。

至于SpecC,SystemC等新型硬件描述语言,将来成为主流还是被淘汰出局,则与语言本身以及各种配套工具软件是否功能更加强大,使用更加简便,更易于学习掌握,以及与人们已经习惯的语言及工具是否有相似性和延续性等因素有关。

三.电子设计自动化(EDA)技术的发展:

上世纪80年代,EDA还只能代替手工,画原理图和流程图,设计生产机器可以读懂的印刷电路板图。

到了90年代,出现了Altera公司的MaxplusⅡ等CPLD/FPGA工具软件,人们可以用MaxplusⅡ在PC机上设计由众多标准逻辑芯片(如74系列等)组成的电路原理图,然后再用它直接进行波形图仿真测试,观察验证电路在各种输入情况下的输出信号波形,及内部各点波形,并得到各点的延时信息,和电路“正常”,“警告”,“出错”等信息。

最后,将经过MaxplusⅡ将验证无误的电路写入CPLD/FPGA芯片,放入电路板中进行整机测试,如发现问题,修改原理图,波形仿真后重写CPLD/FPGA,重新进行整机测试,直至完全正确为止。

整机中既可以使用CPLD/FPGA也可以制成ASIC芯片(视批量大小而定)。

MaxplusⅡ的出现,使电子设计自动化(EDA)技术大大向前推进了一步。

MaxplusⅡ不仅支持原理图输入,而且还支持VHDL、VerilogHDL、以及AHDL等文本输入方式,是目前应用比较广泛的可编程逻辑器件开发软件。

QuartusⅡ是ALTERA公司推出的另一个可编程逻辑器件开发软件,它支持原理图输入、VHDL、VerilogHDL和AHDL输入方式。

到了90年代后期,由于硬件描述语言的完善,尤其是相应的编译,测试,合成,布线等电子设计自动化(EDA)工具软件的发展与完善,硬件描述语言(HDL)终于进入了成熟实用阶段。

这无疑是(数字)电路设计史上最具革命性的飞跃。

自此,人们实现了用简明易懂的高级编程语言设计复杂硬件电路的梦想。

只要具备一定的硬件专门知识,就能随心所欲地设计出功能十分强大的专用智能电路,实现了“以软代硬”。

四、VHDL编程实例:

以真值表为依据,采用数据流描述方式编写的BCD-七段显示译码器的VHDL源代码如下所示,其按总线显示方式的仿真波形如图所示。

五、硬件描述语言(VHDL)的突出优点:

1.打破了IC设计者与使用者的界线,使原先的IC使用者在掌握了VHDL之后,都变成了IC设计者,都能够随心所欲地设计出具备多个CPU功能的复杂专用芯片。

2.VHDL及其配套工具软件简单易学,直观明了,便于迅速掌握,也便于修改。

3.极大地缩短了专用芯片的开发周期,降低开发成本,加快了产品更新换代的速度,提高产品的市场竞争力。

4.大大缩小电路板面积和整机体积,提高产品可靠性,增强产品功能,实现技术保密。

5.可实现电路设计的模块化和积木式多级组合。

各模块均可在今后被重复再利用(调用)。

6.完全实现拥有整机的自主知识产权,不再在关键芯片(专用芯片)的进口及价格方面受制于人。

这一点对目前我国尤为重要。

六、可编程器件的发展:

PROM(EPROM,EEPROM)PAL/GAL芯片(几十个门/20Pin)FPGA/CPLD(八十年代中期,Xilinx和Altera公司推出几十—几千个通用IC规模的FPGA芯片。

目前已发展到数千万门/3000Pin/IC的规模)。

系统芯片SOC(集模拟信号采集/转换/存储/处理/接口/各种IP电路于一体,包含模拟/数字信号处理电路,存储器,CPU等。

注:

IP(也称“核”core)是指由硬件描述语言(HDL)设计,经过实践证明正确无误的“通用”硬件功能模块。

用户可以直接使用而不需进行设计/验证。

例如:

SDRAM(DDR)读写控制电路;以太网数据收发电路等等。

七、HDL/ASIC/EDA的现存问题与未来发展方向:

1.硬件描述语言(HDL)的现存问题与未来发展方向:

VHDL或VerilogHDL目前尚无法用于描述模拟电路,跟不上系统芯片SOC(集模/数于一身)的发展要求。

人们正期待一种模/数电路兼容的硬件描述语言(HDL)诞生。

2.ASIC的现存问题与未来发展方向:

(1)简化工艺,降低成本:

如今,随着ASIC制造工艺朝着小于0.1um的方向快速推进(NEC已宣称达到了0.1um,SONY和东芝也在共同投入15亿美圆争取尽早实现0.07um—0.1um的目标),ASIC的集成度和制造成本都在直线上升。

而实际应用的ASIC中,78%的ASIC的门数不超过100万门,无须采用7级到8级金属工艺,3到4级足矣。

(2)缩短ASIC设计周期:

ASIC设计周期一般为1—12个月,制造周期亦需大致相同的时间。

HDL编码一般需1/4—1/3时间,其余为合成/仿真(局部/总体/实机)/后仿真的时间。

随着产品市场竞争的加剧,更新换代速度加快,缩短设计制造周期的呼声日益增强;而另一方面,ASIC的功能和复杂程度也在日益提高,又使得缩短周期变得更加困难。

现在,很多著名公司都已投入巨资,致力于这方面的研究开发工作,力求明显缩短ASIC设计及制作周期。

为缩短设计周期,设计时尽可能多地采用IP模块也是趋势之一。

目前,NEC,富士通,IBM,TI等公司都已有很丰富的IP库,并且可以将其直接集成到用户ASIC芯片中去。

不过,一般国内用户却未必能承受得起在这些公司购买IP和定制ASIC的费用。

另外,有关IP的知识产权保护以及国际标准化等问题也尚在探讨之中,阻碍了IP应用普及的步伐。

3.EDA的现存主要问题:

 

主要是无法对模拟/数字/各种IP混合的ASIC(SOC)进行设计,编译,仿真,合成。

另外,需要更加简单高效的设计/编译/仿真/合成工具,以缩短研发周期。

第一章VHDL基本结构

1.1实体

1.2结构体

1.3块、子程序和进程

1.4库和程序包

1.5配置

一个完整的VHDL程序,或者说设计实体,通常要求最低能为VHDL综合器所支持,并能作为一个独立的设计单元,即元件的形式而存在的VHDL程序。

在VHDL程序中,通常包含实体(ENTITY)、结构体(ARCHITECTURE)、配置(CONFIGURATION)、包集合(PACKAGE)和库(LIBRARY)5个部分。

其中实体和结构体这两个基本结构是必需的,他们可以构成最简单的VHDL程序。

1.1实体

设计实体是VHDL语言设计的基本单元,简单的可以是一个与门,复杂的可以是一个微处理器或一个数字系统,其结构基本是一致的,都是由实体说明和结构体两部分组成。

实体说明是对这个设计实体与外部电路进行接口的描述,它规定了设计单元的输入输出接口信号或引脚,是设计实体对外的一个通信界面。

结构体用于描述此设计实体的逻辑结构和逻辑功能。

实体语句结构如下:

ENTITY实体名IS

[GENERIC(类属表);]

[PORT(端口表);]

ENDENTITY实体名;

例:

ENTITYor2IS

PORT(a,b:

INSTD_LOGIC;

C:

OUTSTD_LOGIC);

ENDENTITYor2;

注意:

实体应以语句“ENTITY实体名IS”开始,语句“ENDENTITY实体名;”结束。

在层次化系统设计中,实体说明是整个模块或整个系统的输入输出(I/O)接口;在一个器件级的设计中,实体说明是一个芯片的输入输出(I/O)。

1.1.1类属参量(GENERIC)

类属参量是实体说明组织中的可选项,放在端口说明之前,其一般格式为:

GENERIC[CONSTANT]名字表:

[IN]子类型标识[:

=静态表达式],…]

类属参量是一种端口界面常数,常用来规定端口的大小、实体中子元件的数目及实体的定时特性等。

它和常数不同,常数只能从设计实体的内部得到赋值且不能改变,而类属参量的值可由设计实体的外部提供。

因此设计者可以从外面通过类属参量的重新设定而容易的改变一个设计实体或一个元件的内部电路结构和规模。

例:

GENERIC(trise,tfall:

TIME:

=1ns;

Addrwidth:

INTEGER:

=16);

PORT(a0,a1:

INSTD_LOGIC;

Add_bus:

OUTSTD_LOGIC_VECTOR(addrwidth-1DOWNTO0);

这里类属参量中参数trise为上升沿宽度,tfall为下降沿宽度,用于仿真模块的设计;定义地址总线的宽度为Addrwidth位,类属值Addrwidth的改变将使结构体中所有相关的总线定义同时改变,由此使整个设计实体的硬件结构发生变化。

1.1.2端口说明(PORT)

端口为设计实体和其外部环境提供动态通信的通道,是对基本设计单元与外部接口的描述,其功能相当电路图符号的外部引脚。

端口可以被赋值,也可以当做逻辑变量用在逻辑表达式中。

其一般书写格式为:

PORT(端口名:

端口模式数据类型;

端口名:

端口模式数据类型;

……);

其中端口名是设计者为实体的每一个对外通道所取的名字,通常为英文字母加数字,名字的定义有一定的惯例,如clk表示时钟,D开头的端口名表示数据,A开头的端口名表示地址。

端口模式是指这些通道上的数据流动的方式,如输入或输出等。

端口模式有以下几种类型:

1.输入(IN)

允许信号进入实体,主要用于时钟输入、控制输入(如load、reset、enable、clk)和单向的数据输入(如地址数据信号address)等。

2.输出(OUT)

输出模式只允许信号离开实体,常用于计数输出、单向数据输出、被设计实体产生的控制其他实体的信号等。

注意:

输出模式不能用于被设计实体的内部反馈,因为输出端口在实体内不能看做是可读的。

3.双向模式(INOUT)

双向模式允许信号双向传输(既可以进入实体,也可以离开实体),双向模式端口允许引入内部反馈。

4.缓冲(BUFFER)

缓冲模式允许信号输出到实体外部,但同时也可以在实体内部引用该端口的信号。

缓冲端口既能用于输出也能用于反馈。

缓冲模式用于在实体内部建立一个可读的输出端口,例如计数器输出、计数器的现态用来决定计数器的次态。

端口模式可用图下说明,图中方框代表一个设计实体或模块。

在VHDL设计中,通常将输入信号端口指定为输入模式,输出信号端口指定为输出模式,而双向数据通信信号,如计算机PCI总线的地址/数据复用总线,DMA控制器数据总线等纯双向的信号采用双向端口模式。

从端口的名称、模式就能一目了然地指导信号的用途、性质、来源和去向。

1.2结构体

结构体也叫构造体,结构体描述了基本设计单元(实体)的结构、行为、元件及内部连接关系,也就是说它定义了设计实体的功能,规定了设计实体的数据流程,制定了实体内部元件的连接关系。

结构体对其基本设计单元的输入和输出关系可用以下三种方式进行描述,即行为描述(基本设计单元的数学模型描述)、寄存器传输描述(数据流描述)和结构描述(逻辑元件连接描述)。

结构体是对实体功能的具体描述,因此它一定要跟在实体的后面。

结构体一般由两大部分组成:

1.对数据类型、常数、信号、子程序和元件等因素进行说明的部分;

2.描述实体的逻辑行为、以各种不同的描述风格表达的功能描述语句,包括各种顺序语句和并行语句。

结构体的语句格式为:

ARCHITECTURE结构体名OF实体名IS

[定义语句]

BEGIN

[功能描述语句]

END结构体名;

1.2.1结构体名

结构体名由设计者自行定义,OF后面的实体名指明了该结构体所对应的是哪个实体。

有些设计实体有多个结构体,这些结构体的结构体名不可相同,通常用dataflow(数据流)、behavior(行为)、structural(结构)命名。

这3个名称体现了3种不同结构体的描述方式,使得阅读VHDL语言程序时,能直接了解设计者采用的描述方式。

1.2.2结构体信号定义语句

结构体信号定义语句必须放在关键词ARCHITECTURE和BEGIN之间,用于对结构体内部将要使用的信号、常数、数据类型、元件、函数和过程加以说明。

需要注意的是实体说明中定义的信号是外部信号,而结构体定义的信号为该结构体的内部信号,它只能用于这个结构体中。

结构体中的信号定义和端口说明一样,应有信号名称和数据类型定义。

因为它是内部连接用的信号,因此不需要方向说明。

例:

结构体的信号定义实例。

ARCHITECTURErtlOFmujIS--rtl:

结构体名,muj实体名

SIGNALs1:

BIT--结构体信号定义语句

SIGNALs2,s3:

STD_LOGIC_VECTOR(0TO3);

BEGIN

….--功能描述语句

ENDrtl;

1.2.3结构体功能描述语句

结构体功能描述语句位于BEGIN和END之间,具体地描述了构造体的行为及其连接关系。

结构体的功能描述语句可以含有5种不同类型的并行语句,如图所示。

每一语句结构内部可以使用并行语句,也可以是顺序语句。

结构体构造图:

图中5种功能描述语句的基本组成和功能分别是:

1块语句(BLOCK)是由一系列并行语句构成的组合体,它的功能是将结构体中的并行语句组成一个或多个子模块。

2进程语句定义顺序语句模块,用以将从外部获得的信号值或内部运算数据向其他的信号进行赋值。

3信号赋值语句将设计实体内的处理结果向定义的信号或界面端口进行赋值。

4子程序调用语句可以调用进程或参数,并将获得的结果赋值于信号。

5元件例化语句对其他的设计实体做元件调用说明,并将此元件的端口与其他元件、信号或高层实体的界面端口进行连接。

例:

2选1数据选择器

ENTTITYmux2IS

PORT(d0,d1:

INBIT;

sel:

INBIT;

s:

OUTBIT);

ENDmux2;

ARCHITECTUREdataflowOFmux2IS

SIGNALsig:

BIT;--信号定义语句(内部信号,无方向)

BEGIN

Sig<=(d0ANDsel)OR(NOTselANDd1);

S<=sig;--功能描述语句

ENDdataflow;

1.3块、子程序和进程

1.3.1块语句(BLOCK)

在较大规模的电子系统设计中,传统的硬件电路设计通常包括一张系统总电路原理图和若干张子原理图。

在VHDL程序设计中,结构体是由多个BLOCK块构成的,如果将结构体比做总电路原理图,那么,每个BLOCK块则相当于一张子原理图。

BLOCK块语句的结构:

块标号:

BLOCK

接口说明

类属说明

BEGIN

并行块语句

ENDBLOCK(块标号);

例:

B1:

BLOCK

SIGNALs1:

BIT;

BEGIN

s1<=aANDb;

B2:

BLOCK

SIGNALs2:

BIT;

BEGIN

s2<=cANDd;

B3:

BLOCK

BEGIN

Z<=s2;

ENDBLOCKB3;

ENDBLOCKB2;

y<=s1;

ENDBLOCKB1;

1.3.2进程(PROCESS)

PROCESS结构是最能体现VHDL语言特色的语句。

与BLOCK语句一样,利用PROCESS语句结构可以描述一个功能独立的电路。

与BLOCK语句不同之处是,在系统仿真时,PROCESS结构中的语句是按顺序逐条向下执行的,而不像BLOCK语句那样并发执行。

一个结构体中可以有多个并行运行的进程结构,每一个进程内部是由一系列顺序语句来构成的。

PROCESS语句的结构:

[进程标号]PROCESS[(敏感信号表)][IS]

[进程说明语句]

BEGIN

顺序描述语句

ENDPROCESS[进程标号];

注意:

在多个进程的结构体描述中,进程标号是区分各个进程的标志。

但是进程标号并不是必需的。

单进程以PROCESS开始,以ENDPROCESS结束。

例:

两输入或非门

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYnor2_v2IS

PORT(a,b:

INSTD_LOGIC;

y:

OUTSTD_LOGIC);

ENDnor2_v2;

ARCHITECTUREbehaveOFnor2_v2IS

BEGIN

PROCESS(a,b)

VARIABLEcomb:

STD_LOGIC_VECTOR(1DOWNTO0);

BEGIN

comb:

=a&b;--&组合符号

CASEcombIS

WHEN"00"=>y<='1';

WHEN"01"=>y<='0';

WHEN"10"=>y<='0';

WHEN"11"=>y<='0';

WHENOTHERS=>y<='X';--‘X’不定

ENDCASE;

ENDPROCESS;

ENDbehave;

1.3.3子程序(SUBPROGRAM)

VHDL程序与其他软件语言程序中应用子程序的目的是相似的,即能够更有效地完成重复性的工作。

子程序模块是利用顺序语句定义和完成算法的,但子程序不能像进程那样可以从本结构体的其他块或进程结构中读取信号值或向信号赋值,只能通过子程序调用与子程序的界面端口进行通信。

子程序被调用时,首先要初始化,执行处理功能后,将处理结果传递给主程序。

子程序内部的值不能保持,子程序返回后才能被再次调用并初始化。

子程序有两种类型:

过程(PROCEDURE)和函数(FUNCTION)。

1.过程(PROCEDURE)

过程语句的书写格式为:

PROCEDURE过程名(参数表)IS

[说明部分]

BEGIN

过程语句部分

ENDPROCEDURE过程名;

例:

用过程语句设计的子程序

PROCEDUREvector_to_int--矢量转换成整数

(a:

INSTD_LOGIC_VECTOR;

x_flag:

OUTBOOLEAN;

q:

INOUTINTEGER)IS

BEGIN

q:

=0;

x_flag:

=FALSE;

FORiINa’RANGELOOP

q:

=q*2;--*:

乘,**:

乘方

IF(a(i)=1)THEN

q:

=q+1;

ELSE(a(i)/=1)THEN--/=:

不等

x_flag:

=TRUE;

ENDIF;

ENDLOOP;

ENDvector_to_int;

这个过程名为vector_to_int实现将位矢量转换成整数的功能,在过程语句执行结束后,将输入值拷贝到调用者的OUT和INOUT所定义的变量中,完成子程序和主程序

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

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1