版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第一讲EDA技术与大规模可编程逻辑器件
教学目的:使学生了解EDA技术的涵义,EDA的工程设计流程,
CPLD/FPGA器件及其配置模式;掌握CPLD/FPGA的开发应用选择,VHDL的程序基本结构。
教学重点:CPLD/FPGA器件及其配置模式;VHDL的程序基本结构。
教学难点:VHDL与CPLD/FPGA工程实现。
教学方法:讲授法、计算机辅助法。
课时计划:2学时
使用教材:EDA技术及应用.谭会生等.西安:西安电子科技大学出版社
主要参考文献:
[1]徐光辉等.CPLD/FPGA的开发和应用[M].北京:电子工业出版社
[2]侯伯亨等.VHDL硬件描述语言与数字逻辑电路设计[M].西安:西安电子科技大学出版社
[3][4]周立功等.SOPC嵌入式系统基础教程[M].北京:北京航空航天大学出版社课题:EDA技术与大规模可编程逻辑器件
一、EDA技术及其发展二、CPLD与FPGA器件三、VHDL程序基本结构四、课堂小结五、作业一、EDA技术及其发展1.EDA技术的涵义
ElectronicDesignAutomation即电子设计自动化。狭义的EDA技术:以大规模可编程逻辑器件为设计载体,以硬件描述语言为系统逻辑描述的主要表达方式,以计算机、大规模可编程逻辑器件的开发软件及实验开发系统为设计工具,通过有关的开发软件,自动完成用软件方式设计的电子系统到硬件系统的逻辑编译、逻辑化简、逻辑分割、逻辑综合及优化、逻辑布局布线、逻辑仿真,直至对于特定目标芯片的适配编译、逻辑映射、编程下载等工作,最终形成集成电子系统或专用集成芯片的一门新技术,或称为IES/ASIC自动设计技术。
广义的EDA技术:包含狭义的EDA技术外,还包括计算机辅助分析CAA技术(如PSPICE,EWB,MATLAB等),印刷电路板计算机辅助设计PCB-CAD技术(如PROTEL,ORCAD等)。在广义的EDA技术中,CAA技术和PCB-CAD技术不具备逻辑综合和逻辑适配的功能,因此它并不能称为真正意义上的EDA技术。故将广义的EDA技术称为现代电子设计技术更为合适。2.EDA的工程设计1)传统设计方法和EDA方法的区别①传统设计方法:自下而上(Bottom-up)的设计方法,是以固定功能元件为基础,基于电路板的设计方法固定功能元件电路板设计完整系统构成系统调试、测试与性能分析系统功能需求输入输出2.EDA的工程设计1)传统设计方法和EDA方法的区别②EDA方法:自上而下(Top-Down)的设计方法。其方案验证与设计、系统逻辑综合、布局布线、性能仿真、器件编程等均由EDA工具一体化完成。自上而下是指将数字系统的整体逐步分解为各个子系统和模块,若子系统规模较大,则还需将子系统进一步分解为更小的子系统和模快,层层分解,直至整个系统中各个子系统关系合理,并便于逻辑电路级的设计和实现为止。自上而下设计中可逐层描述,逐层仿真,保证满足系统指标。系统规格设计功能级描述功能级仿真逻辑综合、优化、布局布线定时仿真、定时检查输出门级网表ASIC芯片投片、PLD器件编程、测试2.EDA的工程设计2)传统设计方法和EDA方法比较
传统方法a.从下至上;b.通用的逻辑元、器件;c.系统硬件设计的后期进行仿真和调试;d.主要设计文件是电原理图。
EDA方法
a.从上至下;b.可编程逻辑器件;c.系统设计的早期进行仿真和修改;d.多种设计文件,发展趋势以VHDL描述文件为主;e.降低硬件电路设计难度。
EDA技术极大地降低硬件电路设计难度,提高设计效率,是电子系统设计方法的质的飞跃。2.EDA的工程设计3)EDA的工程设计流程文本编辑器、图形编辑器VHDL综合器(逻辑综合、优化)FPGA/CPLD布线/适配器(自动优化、布局、布线、适配)VHDL仿真器(行为仿真、功能仿真、时序仿真)编程器/下载电缆(编程、下载)
测试电路(硬件测试)
网表文件(EDIF、XNL、VHDL…)门级仿真器(功能仿真、时序仿真)各种编程文件VHDL源程序1.CPLD和FPGA的区别
PLD
(ProgrammableLogicDevices):可编程逻辑器件;
CPLD(ComplexProgrammableLogicDevice):复杂可编程逻辑器件;
FPGA
(FieldProgrammableGateArray):现场可编程门阵列。主流公司:ALTERA(阿特喇)\Xilinx(西林克司)\Lattice(莱迪思)等公司。主要区别:1)结构上不同
CPLD器件:采用EEPROM工艺的可编程逻辑器件;结构主要由逻辑阵列块(LAB)、扩展乘积项、可编程输入/输出单元和可编程连线组成。
FPGA器件:采用基于SRAM的查找表(LUT)逻辑结构形式的可编程逻辑器件;逻辑结构主要由可编程逻辑宏单元、可编程输入/输出单元和可编程连线组成。2)集成度不同(寄存逻辑门CPLD少、FPGA多)3)应用范围不同(CPLD逻辑能力强而寄存器少,适用于控制密集型系统;
FPGA逻辑能力较弱但寄存器多,适于数据密集型系统。)4)使用方法不同(CPLD器件构造的系统,不用配置器件;
FPGD器件构造的系统,需用配置器件。)二、CPLD与FPGA器件2.常用CPLD和FPGA标识的含义1)CPLD/FPGA标识
CPLD/FPGA产品上的标识大概可分为以下几类:(1)用于说明生产厂家的,如:ALTERA,Lattice,Xilinx是其公司名称。(2)注册商标,如:MAX是为ALTERA公司其CPLD产品MAX系列注册的商标。(3)产品型号,如EPM7128SLC84-15,是ALTERA公司的一种CPLD型号。(4)产品序列号,是说明产品生产过程中的编号,是产品身份的标志。(5)产地与其它说明,如:madeinChina(中国制造)。
2)CPLD/FPGA产品型号标识组成
CPLD/FPGA产品型号标识通常由以下几部分组成:(1)产品系列代码:如ALTERA公司的FLEX器件系列代码为EPF。(2)品种代码:如ALTERA公司的FLEX10K,10K即是其品种代码。(3)特征代码:也即集成度,CPLD产品一般以逻辑宏单元数描述,而FPGA一般以有效逻辑门来描述。如ALTERA公司的EPF10K10中后一个10,代表典型产品集成度是10K。(4)封装代码:如ALTERA公司的EPM7128SLC84中的LC,表示采用PLCC封装(塑料方形扁平封装),Xilinx公司用PC描述,Lattice公司用J来描述。(5)参数说明:如ALTERA公司的EPM7128SLC84中的LC84-15,84代表有84个引脚,15代表速度等级为15ns。但有的产品直接用系统频率来表示速度,如ispLSI1016-60,60代表最大频率60MHz。(6)改进型描述:一般产品设计都在后续进行改进设计,改进设计型号一般在原型号后用字母表示,如有些A、B、C等按先后顺序编号,有些有特定的含义,如D表示低成本型、
E表示增强型、L表示低功耗型、H表示高引脚型、X表示扩展型等。(7)适用的环境等级描述:一般在型号最后以字母描述,C表示商用级(0℃至85℃),
I表示工业级(-40℃至100℃),M(表示军工级(-55℃至125℃)。3.CPLD和FPGA的编程下载与配置1)JTAG边界测试技术
IEEE1149.1-1990规范中定义了5个引脚用于JTAG边界扫描测试(BoardScanTest,BST):
TCK(TestClockInput):测试时钟输入引脚,作为BST信号的时钟信号。
TDI(TestDataInput):测试信号输入引脚,测试指令和测试数据在TCK上升沿到来时输入BST。
TDO(TestDataOutput):测试信号输出引脚,测试指令和测试数据在TCK下降沿到来时从BST输出。
TMS(TestModeSelect):测试模式选择引脚,控制信号由此输入,负责TAP控制器的转换。
TRST(TestResetInput):测试复位输入引脚,可选,在低电平时有效。2)CPLD和FPGA的下载接口
ALTERA的ByteBlaster接口是一个10芯的混合接口,有PS和JTAG二种模式,都是串行接口。EPM7128SLC843.CPLD和FPGA的编程下载与配置3)FPGA的配置
CPLD的编程主要要考虑编程下载接口及其连接,而FPGA的配置除了考虑编程下载接口及其连接外,还要考虑配置器件问题。(现在的FPGA都支持JTAG配置)常见配置方法:(1)用OTP配置器件配置,只适用于工业化大生产。(2)使用具备ISP功能的专用芯片配置,编程次数有限,成本较高,只适合科研等场合。(3)使用AS模式可多次编程的专用芯片,可无限次编程,但品种有限。(4)使用单片机配置,可用配置模式多,配置灵活,同时可解决设计的保密与可升级问题,但容量有限,可靠性不高。适用于科研等可靠性要求不高的场合。(5)使用ASIC芯片配置,是目前较好的一种选择。
CPLD和FPGA的编程下载电路图4.FPGA和CPLD的开发应用选择1)开发应用选择方法
对于一个开发项目,究竟是选择FPGA还是选择CPLD呢?主要看开发项目本身的需要。对于普通规模,且产量不是很大的产品项目,通常使用CPLD比较好。对于大规模的逻辑设计、ASIC设计,或单片系统设计,则多采用FPGA。另外,FPGA掉电后将丢失原有的逻辑信息,所以在实用中需要为FPGA芯片配置一个专用ROM。(1)开发项目需要的逻辑规模:CPLD器件的规模在10万门级以下,而FPGA器件的规模已达1000万门级,两者差异巨大。10万门级以上,不用考虑,只有选择FPGA器件;在万门以下,CPLD器件是首选,因为它不需配置器件,应用方便,成本低,结构简单,可靠性高;在上万门级,CPLD器件和FPGA器件逻辑规模都可用的情况下,需要考虑其他因数,在CPLD器件和FPGA器件之间作出权衡,如速度、加密、芯片利用率、价格等。(2)开发项目的速度要求:设计要求的速度要低于其最高工作速度,尤其是Xilinx公司的FPGA器件,由于其采用统计型互连结构,时延不确定性,设计要求的速度要低于其最高工作速度的三分之二。(3)功耗:一般来说,要选用低功耗、低电压的产品。(4)可靠性:可靠性是产品最关键的特性之一,结构简单,质量水平高,可靠性就高。CPLD器件构造的系统,不用配置器件,具有较高的可靠性;质量等级高的产品,具有较高的可靠性;环境等级高的型号产品,如军用(M级)产品具有较高的可靠性。(5)价格:要尽量选用价格低廉,易于购得的产品。(6)开发环境和开发人员熟悉程度:应选择开发软件成熟,界面良好,开发人员熟悉的产品;如厂家、封装等。4.FPGA和CPLD的开发应用选择2)几种典型产品型号
(1)ALTERA公司的CPLD产品和FPGA产品ALTERA公司的产品一般以EP开头,代表可重复编程。①ALTERA公司的MAX系列CPLD产品,系列代码为EPM,典型产品型号含义如下:EPM7128SLC84-15:MAX7000S系列CPLD,逻辑宏单元数128,采用PLCC封装,84个引脚,引脚间延时为15ns。②ALTERA公司的FPGA产品系列代码为EP或EPF,典型产品型号含义如下:EPF10K10:FLEX10K系列FPGA,典型逻辑规模是10K有效逻辑门。EPF10K30E:FLEX10KE系列FPGA,逻辑规模是EPF10K10的3倍。EPF20K200E:APEX20KE系列FPGA,逻辑规模是EPF10K10的20倍。EP1K30:ACEX1K系列FPGA,逻辑规模是EPF10K10的3倍。EP1S30:STRATIX系列FPGA,逻辑规模是EPF10K10的3倍。③ALTERA公司的FPGA配置器件系列代码为EPC,如:EPC1:为1型FPGA配置器件。(2)Xilinx公司的CPLD产品和FPGA产品Xilinx公司的产品一般以XC开头,代表Xilinx公司的产品。典型产品型号含义如下:XC95108-7PQ160C:XC9500系列CPLD,逻辑宏单元数108,引脚间延时为7ns,采用PQFP封装,160个引脚,商用XC2018:XC2000系列FPGA,典型逻辑规模是有效门1800。XC4002A:XC4000A系列FPGA,典型逻辑规模是2K有效门。XCS10:Spartan系列FPGA,典型逻辑规模是10K。(3)Lattice公司的CPLD产品和FPGA产品Lattice公司的CPLD、FPGA产品以其发明的isp开头,系列代号有ispLSI、ispMACH、ispPAC及新开发的ispXPGA、ispXPLD,其中ispPAC为模拟可编程器件,下面以ispLSI、ispXPGA系列产品型号为例说明如下:ispLSI1032E-125LJ:ispLSI1000E系列CPLD,通用逻辑块GLB数为32个(相当逻辑宏单元数128),工作频率最大125MHz,PLCC84封装,低电压型商用产品。ispLSI8840:ispLSI8000系列CPLD,逻辑宏单元数840。
ispXPGA1200:ispXPGA1200系列FPGA,典型逻辑规模是1200k系统门。
4.FPGA和CPLD的开发应用选择2)几种典型产品型号
生产厂家系列典型产品可用门(K)宏单元数目FF逻辑单元数Fmax(MHz)最大I/O数LatticeispLSI10001032E1048E6812819219228812520072108ALTERAMAX7000EPM7128EPM7256128256100100100160XilinxXC7200XC7272A2721267072XilinxXC9500XC95108XC952882.46.4108288108288125125
180典型CPLD产品4.FPGA和CPLD的开发应用选择2)几种典型产品型号
典型FPGA产品生产厂家系列典型产品有效门(K)触发器/CLBFF逻辑单元数速度等级(ns)最大I/O数XilinxXC6200XC8100XC6264XC8109649163842688163841344824512208LatticeispXPGA12520047613921047648121936270470563.85.414.192111184ALTERAFLEX10KEPF10K10EPF10K100101007205392576499244150406图2.5输出宏单元(OMC)结构图5.FPGA和CPLD的I/O控制模块图2.6输出宏单元(OMC)的4种不同的工作方式5.FPGA和CPLD的I/O控制模块图2.7触发器可编程的I/O控制模块结构5.FPGA和CPLD的I/O控制模块1.VHDL简介
VHDL的英文全名是Very-High-SpeedIntegratedCircuitHardwareDescriptionLanguage,诞生于1982年。1987年底,VHDL被IEEE和美国国防部确认为标准硬件描述语言。自IEEE公布了VHDL的标准版本(IEEE-1076)之后,各EDA公司相继推出了自己的VHDL设计环境,或宣布自己的设计工具可以和VHDL接口。此后VHDL在电子设计领域得到了广泛的接受,并逐步取代了原有的非标准硬件描述语言。1993年,IEEE对VHDL进行了修订,从更高的抽象层次和系统描述能力上扩展VHDL的内容,公布了新版本的VHDL,即IEEE标准的1076-1993版本。现在,VHDL作为IEEE的工业标准硬件描述语言,又得到众多EDA公司的支持,在电子工程领域,已成为事实上的通用硬件描述语言。2.VHDL程序设计约定为了便于程序的阅读和调试,对VHDL程序设计作如下约定:1)语句结构描述中方括号“[]”内的内容为可选内容。
2)VHDL的编译器和综合器对程序文字的大小写是不加区分的。
3)程序中的注释使用双横线“--”。在VHDL程序的任何一行中,双横线“--”后的文字都不参加编译和综合。
4)为了便于程序的阅读和调试,书写和输入程序时,使用层次缩进格式,同一层次的对齐,低层次的较高层次的缩进两个字符。
5)考虑到MAX+plusll要求源程序文件的名字与实体名必须一致,因此为了使同一个VHDL源程序文件能适应各个EDA开发软件上的使用要求,建议各个源程序文件的命名均与实体名一致。三、VHDL程序基本结构3.VHDL程序基本结构一个相对完整的VHDL程序(或称为设计实体)具有比较固定的结构。至少应包括三个基本组成部分:库与程序包使用说明、实体说明和实体对应的结构体说明。常用语句结构如下:LIBRARY
库名;
USE
库名.程序包名.ALL;ENTTTY
实体名IS[GENERIC(类属表);][PORT(端口表);]
END[ENTTTY][实体名];ARCHITECTURE
结构体名OF
实体名IS[说明语句;]BEGIN[功能描述语句;]END[ARCHITECTURE][结构体名];
三、VHDL程序基本结构--类属表说明用于确定设计实体和其外部环境通信的参数,传递静态的信息。其一般书写格式如下:GENERC([常数名:数据类型[:设定值]{;常数名:数据类型[:设定值]});例:GENERIC(WIDTH:INTEGER=8);--端口模式是指这些通道上的数据流动方式,如:IN(输入)、OUT(输出)、BUFFER(具有读功能的输出模式,可以读或写,只能有一个驱动源)、INOUT(双向)。--结构体中的说明语句是对结构体的功能描述语句中将要用到的信号(SIGNAL)、数据类型(TYPE)、常数(CONSTANT)、元件(COMPONENT)、函数(FUNCTION)和过程(PROCEDURE)等加以说明的语句。--功能描述语句结构可以含有块、进程、信号赋值、子程序调用、元件例化五种不同类型的,以并行方式工作的语句结构。而在每一语句结构的内部可能含有并行运行的逻辑描述语句或顺序运行的逻辑描述语句。3.VHDL程序基本结构三、VHDL程序基本结构--与门的逻辑描述AND2.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC-1164.ALL;ENTITYAND2IS
PORT(A,B:INSTD_LOGIC;
Y:OUTSTD_LOGIC);ENDENTITYAND2;ARCHITECTUREART1OFAND2ISBEGINY<=AANDB;ENDARCHITECTUREART1;
--或门的逻辑描述OR2.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC-1164.ALL;ENTITYOR2ISPORT(A,B:INSTD_LOGIC;
Y:OUTSTD_LOGIC);ENDENTITYOR2;ARCHITECTUREART1OFOR2ISBEGINY<=AORB;ENDARCHITECTUREART1;--非门的逻辑描述NOT1.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC-1164.ALL;ENTITYNOT1ISPORT(A:INSTD_LOGIC;
Y:OUTSTD_LOGIC);ENDENTITYNOT1;ARCHITECTUREART1OFNOT1ISBEGINY<=NOT
A;ENDARCHITECTUREART1;--与非门的逻辑描述NAND2.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC-1164.ALL;ENTITYNAND2ISPORT(A,B:INSTD_LOGIC;
Y:OUTSTD_LOGIC);ENDENTITYNAND2;ARCHITECTUREART1OFNAND2ISBEGINY<=A
NAND
B;ENDARCHITECTUREART1;三、VHDL程序基本结构课堂小结一、EDA技术及其发展(狭义的EDA技术)二、CPLD与FPGA器件(CPLD和FPGA的开发选择及编程下载)LIBRARY
库名;
USE
库名.程序包名.ALL;ENTTTY
实体名IS[GENERIC(类属表);][PORT(端口表);]
END[ENTTTY][实体名];ARCHITECTURE
结构体名OF
实体名IS[说明语句;]BEGIN[功能描述语句;]END[ARCHITECTURE][结构体名];第二讲VHDL程序基本结构及语言要素
教学目的:使学生掌握VHDL程序基本结构及语言要素相关使用方法。
教学重点:VHDL程序基本结构及语言要素。
教学难点:常量、变量、信号的用法。
教学方法:讲授法、计算机辅助法。
课时计划:2学时
使用教材:EDA技术及应用.谭会生等.西安:西安电子科技大学出版社
主要参考文献:
[1]徐光辉等.CPLD/FPGA的开发和应用[M].北京:电子工业出版社
[2]侯伯亨等.VHDL硬件描述语言与数字逻辑电路设计[M].西安:西安电子科技大学出版社
[3][4]周立功等.SOPC嵌入式系统基础教程[M].北京:北京航空航天大学出版社课题:VHDL程序基本结构及语言要素二、VHDL语言要素三、课堂小结四、作业一、VHDL程序基本结构1.VHDL简介
VHDL的英文全名是Very-High-SpeedIntegratedCircuitHardwareDescriptionLanguage,诞生于1982年。1987年底,VHDL被IEEE和美国国防部确认为标准硬件描述语言。自IEEE公布了VHDL的标准版本(IEEE-1076)之后,各EDA公司相继推出了自己的VHDL设计环境,或宣布自己的设计工具可以和VHDL接口。此后VHDL在电子设计领域得到了广泛的接受,并逐步取代了原有的非标准硬件描述语言。1993年,IEEE对VHDL进行了修订,从更高的抽象层次和系统描述能力上扩展VHDL的内容,公布了新版本的VHDL,即IEEE标准的1076-1993版本。现在,VHDL作为IEEE的工业标准硬件描述语言,又得到众多EDA公司的支持,在电子工程领域,已成为事实上的通用硬件描述语言。2.VHDL程序设计约定为了便于程序的阅读和调试,对VHDL程序设计作如下约定:1)语句结构描述中方括号“[]”内的内容为可选内容。
2)VHDL的编译器和综合器对程序文字的大小写是不加区分的。
3)程序中的注释使用双横线“--”。在VHDL程序的任何一行中,双横线“--”后的文字都不参加编译和综合。
4)为了便于程序的阅读和调试,书写和输入程序时,使用层次缩进格式,同一层次的对齐,低层次的较高层次的缩进两个字符。
5)考虑到MAX+plusll要求源程序文件的名字与实体名必须一致,因此为了使同一个VHDL源程序文件能适应各个EDA开发软件上的使用要求,建议各个源程序文件的命名均与实体名一致。一、VHDL程序基本结构3.VHDL程序基本结构一个相对完整的VHDL程序(或称为设计实体)具有比较固定的结构。至少应包括三个基本组成部分:库与程序包使用说明、实体说明和实体对应的结构体说明。常用语句结构如下:LIBRARY
库名;
USE
库名.程序包名.ALL;ENTITY
实体名IS[GENERIC(类属表);][PORT(端口表);]
END[ENTITY][实体名];ARCHITECTURE
结构体名OF
实体名IS[说明语句;]BEGIN[功能描述语句;]END[ARCHITECTURE][结构体名];
一、VHDL程序基本结构--类属表说明用于确定设计实体和其外部环境通信的参数,传递静态的信息。其一般书写格式如下:GENERC([常数名:数据类型[:设定值]{;常数名:数据类型[:设定值]});例:GENERIC(WIDTH:INTEGER=8);--端口模式是指这些通道上的数据流动方式,如:IN(输入)、OUT(输出)、BUFFER(具有读功能的输出模式,可以读或写,只能有一个驱动源)、INOUT(双向)。--结构体中的说明语句是对结构体的功能描述语句中将要用到的信号(SIGNAL)、数据类型(TYPE)、常数(CONSTANT)、元件(COMPONENT)、函数(FUNCTION)和过程(PROCEDURE)等加以说明的语句。--功能描述语句结构可以含有块、进程、信号赋值、子程序调用、元件例化五种不同类型的,以并行方式工作的语句结构。而在每一语句结构的内部可能含有并行运行的逻辑描述语句或顺序运行的逻辑描述语句。3.VHDL程序基本结构一、VHDL程序基本结构--与门的逻辑描述AND2.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC-1164.ALL;ENTITYAND2IS
PORT(A,B:INSTD_LOGIC;
Y:OUTSTD_LOGIC);ENDENTITYAND2;ARCHITECTUREART1OFAND2ISBEGINY<=AANDB;ENDARCHITECTUREART1;
--或门的逻辑描述OR2.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC-1164.ALL;ENTITYOR2ISPORT(A,B:INSTD_LOGIC;
Y:OUTSTD_LOGIC);ENDENTITYOR2;ARCHITECTUREART1OFOR2ISBEGINY<=AORB;ENDARCHITECTUREART1;--非门的逻辑描述NOT1.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC-1164.ALL;ENTITYNOT1ISPORT(A:INSTD_LOGIC;
Y:OUTSTD_LOGIC);ENDENTITYNOT1;ARCHITECTUREART1OFNOT1ISBEGINY<=NOT
A;ENDARCHITECTUREART1;--与非门的逻辑描述NAND2.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC-1164.ALL;ENTITYNAND2ISPORT(A,B:INSTD_LOGIC;
Y:OUTSTD_LOGIC);ENDENTITYNAND2;ARCHITECTUREART1OFNAND2ISBEGINY<=A
NAND
B;ENDARCHITECTUREART1;1.VHDL文字规则
1)数字型文字数字型文字的值有多种表达方式,现列举如下:(1)整数文字:整数文字都是十进制的数。如:4、578,0,156E2(=15600),45_234_287(=45234287)。数字间的下划线仅仅是为了提高文字的可读性,相当于一个空的间隔符。(2)实数文字:实数文字也都是一种十进制的数,但必须带有小数点。如:18.993,1.0,0.0,88_670_551_909(=88670551.453909)。(3)以数制基数表示的文字:用这种方法表示的数由五个部分组成。
第一部分,用十进制数标明数制进位的基数;第二部分,数制隔离符号“#”;第三部分,表达的文字;第四部分,指数隔离符号“#”;第五部分,用十进制表示的指数部分,这一部分的数如果是0可以省去不写。如:10#170#--(十进制数表示,等于170);
2#1111_1110#--(二进制数表示,十进制数等于是254);
16#F.01#E+2--(十六进制数表示,二进制数等于2#1111_0000_0001#,十进制数等于3841.00)。(4)物理量文字(VHDL综合器不接受此类文字)如:50s(50秒),200m(200米),177A(177安培)。二、VHDL语言要素1.VHDL文字规则
2)字符及字符串型文字
字符:是用单引号引起来的ASCII字符,可以是数值,也可以是符号或字母。如:‘R’,‘A’,‘*’,‘Z’。字符串:是一维的字符数组,须放在双引号中。
(1)文字字符串:它是用双引号引起来的一串文字。如:“BB$CC”,“ERROR”,“BOTHSANDQEQUALTOL”,“X”。
(2)数位字符串:数位字符串也称位矢量,是预定义的数据类型BIT的一位数组,它们所代表的是2进制、8进制、16进制的数组,其位矢量的长度即为等值的二进制数的位数。数位字符串的表示首先要有计算基数,然后将该基数表示的值得放在双引号中,基数符分别以“B”、“O”、和“X”表示2进制、8进制、16进制,并放在字符串的前面。例如:B“1_1101_1110”--二进制数数组,位矢数组长度是9;
X“AD0”--十六进制数数组,位矢数组长度是12。
3)标识符标识符用来定义常数、变量、信号、端口、子程序或参数的名字。VHDL的基本标识符是以英文字母开头,不连续使用下划线“_”,不以下划线“_”结尾的,由26个大小写英文字母、数字0~9以及下划线“_”组成的字符串。VHDL’93标准还支持扩展标识符,但是目前仍有许多VHDL工具不支持扩展标识符。标识符中的英语字母不分大小写。VHDL的保留字不能用于作为标识符使用。如:DECODER_1,FFT,Sig_N,NOT_ACK,State0,Idle是合法的标识符。而_DECOER_1,2FFT,SIG_#N,NOT—ACK,RYY_RST_,data__BUS,RETURN则是非法的标识符。
二、VHDL语言要素1.VHDL文字规则
4)下标名及下标段名下标段名:用于指示数组型变量或信号的某一段元素;下标名:用于指示数组型变量或信号的某一元素。语句格式如下:数组类型符号名或变量名(表达式1[TO/DOWNTO表达式2]);注:表达式的数值必须在数组元素下标号范围以内,并且是可计算的。
TO表示是数组下标序列由低到高,如“3TO8”;
DOWNTO表示数组下标序列由高到低,如“9DOWNTO2”。如果表达式是一个可计算的值,则此操作可很容易地进行综合。如果是不可计算的,则只能在特定情况下综合,且耗费资源较大。示例:
SIGNALA,B,C:BIT_VECTOR(0TO5);
SIGNALM:INTEGERRANGE0TO5;
SIGNALY,Z:BIT;
Y〈=A(M):--M是不可计算型下标表示
Z〈=B(3):--3是可计算型下标表示
C(0TO3)〈=A(4TO7):--以段的方式进行赋值
C(4TO7)〈=A(0TO3):--以段的方式进行赋值
二、VHDL语言要素2.VHDL数据对象
1)常量(CONSTANT):(全局量,恒定不变的值)定义语法格式:
CONSTANT
常量名:数据类型:=表达式;如:CONSTANTDELY:=25ns;2)变量(VARIABLE):(局部量,只能在进程和子程序中使用,不可列入敏感量)定义语法格式:
VARIABLE
常量名:数据类型:=初始值;赋值语法格式:
目标变量名:=表达式;如:VARABLEA:INTEGER;A:=3;
3)信号(SIGNAL):(全局量,类似连接线,可列入敏感量)定义语法格式:
SIGNAL
常量名:数据类型<=初始值;赋值语法格式:
目标变量名<=表达式;如:SIGNALS1:STD_LOGIG;S1<=‘1’;二、VHDL语言要素2.VHDL数据对象
4)三者的使用比较(1)从硬件电路系统来看,常量相当于电路中的恒定电平,如GND或VCC接口,而变量和信号则相当于组合电路系统中门与门间的连接及其连线上的信号值。(2)从行为仿真和VHDL语句功能上看,变量和信号的区别主要表现在接受和保持信号的方式、信息保持与传递的区域大小上。例如信号可以设置延时量,而变量则不能;变量只能作为局部的信息载体,而信号则可作为模块间的信息载体。变量的设置有时只是一种过渡,最后的信息传输和界面间的通信都靠信号来完成。(3)从综合后所对应的硬件电路结构来看,信号一般将对应更多的硬件结构,但在许多情况下,信号和变量并没有什么区别。例如在满足一定条件的进程中,综合后它们都能引入寄存器。这时它们都具有能够接受赋值这一重要的共性,而VHDL综合器并不理会它们在接受赋值时存在的延时特性。(4)虽然VHDL仿真器允许变量和信号设置初始值,但在实际应用中,VHDL综合器并不会把这些信息综合进去。这是因为实际的FPGA/CPLD芯片在上电后,并不能确保其初始状态的取向。因此,对于时序仿真来说,设置的初始值在综合时是没有实际意义的。
二、VHDL语言要素3.VHDL数据类型
1)VHDL的预定义数据类型(1)布尔(BOOLEAN)数据类型程序包STANDARD中定义布尔数据类型的源代码如下:
TYPEBOOLEANIS(FALES,TRUE);布尔数据类型实际上是一个二值枚举型数据类型,它的取值有FALSE和TRUE两种。综合器将用一个二进制位表示BOOLEAN型变量或信号。例如,当A大于B时,在IF语句中的关系运算表达式(A>B)的结果是布尔量TRUE,反之为FALSE。综合器将其变为1或0信号值,对应于硬件系统中的一根线。(2)位(BIT)数据类型位数据类型也属于枚举型,取值只能是1或0。位数据类型的数据对象,如变量、信号等,可以參与逻辑运算,运算结果仍是位的数据类型。VHDL综合器用一个二进制位表示BIT。在程序包STANDARD中定义的源代码是:
TYPEBITIS(‘0’,‘1’);(3)位矢量(BIT_VECTOR)数据类型位矢量只是基于BIT数据类型的数组,在程序包STANDARD中定义的源代码是:
TYPEBIT_VETORISARRAY(NATURALRANGE<>)OFBIT;使用位矢量必须注明位宽,即数组中的元素个数和排列,例如:
SIGNALA:BIT_VECTOR(7TO0);二、VHDL语言要素3.VHDL数据类型
1)VHDL的预定义数据类型(4)字符(CHARACTER)数据类型字符类型通常用单引号引起来,如‘A’。字符类型区分大小写,如‘B’不同于‘b’。字符型已在STANDARD程序包中作了定义。(5)整数(INTEGER)数据类型整数类型的数代表正整数、负整数和零。在VHDL中,整数的取值范围是-2147483647~-2147483647,即可用32位有符号的二进制数表示。在实际应用中,VHDL仿真器通常将INTEGER类型作为有符号数处理,而VHDL综合器将INTEGER作为无符号数处理。在使用整数是,VHDL综合器要求用RANGE子句为所定义的数限定范围,然后根据所限定的范围来决定表示此信号或变量的二进制的位数,因为VHDL综合器无法综合未限定的整数类型的信号或变量。如语句“SIGNALTYPEI:INTEGERRANGE0TO15;”规定整数TYPEI的取值范围是0~5共16个值,可用4位二进制数来表示,因此,TYPEI将被综合成由四条信号线构成的信号。整数常量的书写方式示例如下:
--十进制整数;10E4--十进制整数;16#D2#--十六进制整数;2#11011010#--二进制整数。(6)自然数(NATURAL)和正整数(POSITIVE)数据类型自然数是整数的一个子类型,非负的整数,即零和正整数;正整数也是一个子类型,它包括整数中非零和非负的数值。它们在STANDARD程序包中定义的源代码如下:SUBTYPENATURALISINTEGERRANGE0TOINTEGER’HIGH;SUBTYPEPOSITIVEISINTEGERRANGE1TOINTEGER’HIGH;二、VHDL语言要素3.VHDL数据类型
1)VHDL的预定义数据类型(7)实数(REAL)数据类型实数常量的书写方式举例如下:
65971.333333--十进制浮点数;
8#43.6#E+4--
八进制浮点数;
43.6E-4--十进制浮点数。(8)字符串(STRING)数据类型字符串数据类型是字符数据类型的一个约束型数组,或称为字符串数组。字符串必须用双引号标明。如:
VARIABLESTRING_VAR:STRING(1TO7);
…STRING_VAR:“ABCD”;二、VHDL语言要素3.VHDL数据类型
1)VHDL的预定义数据类型(9)时间(TIME)数据类型VHDL中唯一预定义物理类型是时间。完整的时间类型包括整数和物理量单位两部分,整数和单位之间至少留一个空格,如50ms,30ns.STANDARD程序包中也定义了时间。定义如下:TYPETIMEISRANGE-2147483647TO-2147483647unitsfs:--飞秒,VHDL中的最小时间单位ps=1000fs:--皮秒ns=1000ps:--纳秒us=1000ns:--微秒ms=1000us:--毫秒sec=1000ms:--秒min=60sec:--分hr=60min:--时enduntis:(10)错误等级(SEVERITY_LEVEL)在VHDL仿真器中,错误等级用来指示设计系统的工作状态,共有四种可能的状态值:NOTE(注意)、WARNING(警告)、ERROR(出错)、FAILURE(失败)。在仿真过程中,可输出这四种值来提示被仿真系统当前的工作情况。其定义如下:
TYPESEVERITY_LEVEIIS(NOTE,WARNING,ERROR,FAILURE);
二、VHDL语言要素3.VHDL数据类型
2)IEEE预定义标准逻辑位与矢量(1)标准逻辑位STD_LOGIC数据类型数据类型STD_LOGIC的定义如下所示:
TYPESTD_LOGICIS(‘U’,‘X’,‘O’,‘1’,‘Z’,‘W’,‘L’,‘H’,‘-’);
各值的含义是;‘U’--未初始化,‘X’--强未知的,‘O’--强O,‘1’--强1,‘Z’--高阻态,‘W’--弱未知的,‘L’--弱O,‘H’--弱1,‘_’--忽略。在程序中使用此数据类型前,需加入下面的语句:
LIBRARY
IEEE:
USEIEEE.STD_LOGIC_1164.ALL;--程序包STD_LOGIC_1164中还定义了STD_LOGIC型逻辑运算符AND,NAND,OR,NOR,XOR和NOT的重载函数,以及两个转换函数,用于BIT与STD_LOGIC的相互转换。
(2)标准逻辑矢量(STD_LOGIC_VECTOR)数据类型
STD_LOGIC_VECTOR类型定义如下:
TPYE
STD_LOGIC_VECTOR
IS
ARRAY(NATURALRANGE<>)OFSTD_LOGIC;
显然,STD_LOGIC_VECTOR是定义在STD_LOGIC_1164程序包中的标准一维数组,数组中的每一个元素的数据都是以上定义的标准逻辑位STD_LOGIC。数据对象赋值的原则是:同位宽,同数据类型的矢量间才能进行赋值。
二、VHDL语言要素3.VHDL数据类型3)其它预定义标准数据类型矢量
VHDL综合工具配备的扩展程序包中,定义了一些有用的类型。如Synopsys公司在IEEE库中加入的程序包STD_LOGIC_ARITH中定义了的数据类型有:无符号型(UNSIGNED),有符号型(SIGNED),小整型(SMALL_INT)。在程序包STD_LOGIC_ARITH中的类型定义如下:TYPE
UNSIGNED
IS
ARRAY(NATURAL
RANGE<>)OF
STD_LOGIC;TYPE
SIGNED
IS
ARRAY(NATURAL
RANGE<>=0F
STD_LOGIC;SUBTYPE
SMAIL_INT
IS
INTEGER
RANGE
0TO1;如果将信号或变量定义为这几个数据类型,就可以使用本程序包中定义的运算符。在使用之前,请注意必须加入下面的语句:LIBRARYIEEE;USEIEEE.STD_LOGIC_ARITH.ALL;(1)无符号数据类型(UNSIGNEDTYPE)UNSIGNED数据类型代表一个无符号的数值,在综合器中,这个数值被解释为一个二进制数,这个二进制数最左位是其最高位。例如:VARIABLEVAR:UNSIGNED(0TO10);--变量VAR有11位数值,最高位是VAR(0),而非VAR(10)SIGNALSIG:UNSIGNED(5TO0);--信号SIG有6位数值,最高位是SIG(5)。(2)有符号数据类型(SIGNEDTYPE)SIGNED数据类型代表一个无符号的数值,综合器将其解释为补码,此数的最高位是符号位,例如:SIGNED(“0101”)代表+5,5;SIGNED(“1101”)代表-5。若将上例的VAR定义为SIGNED数据类型,则数值意义就不同了,如:VARIABLE
VAR:SIGNED(0
TO10);--变量VAR有11位,最左位VAR(0)是符号位。
二、VHDL语言要素3.VHDL数据类型
4)用户自定义数据类型方式(1)TYPE语句用法
TYPE语句语法结构如下:
TYPE数据类型名IS数据类型定义[OF基本数据类型];
其中,数据类型名由设计者自定;数据类型定义部分用来描述定义数据类型的表达方式和表达内容;关键词OF后的基本数据类型是指数据类型定义的元素的基本数据类型,一般都是取已有的预定义数据类型,如BIT,STD_LOGIC或INTEGER等。以下列出了两种不同的定义方式:
TYPE
ST1
IS
ARRAY(0TO15)OF
STD_LOGIC;
TYPE
WEEK
IS(SUN,MON,WED,THU,FRI,SAT);(2)SUBTYPE语句用法子类型SUBTYPE只是由TYPE所定义的原数据类型的一个子集,它满足原始数据类型的所有约束条件,原数据类型称为基本数据类型。子类型SUPTYPE的语句格式如下:
SUBTYPE子类型名IS基本数据RANGE约束范围;子类型的定义只在基本数据类型上作一些约束,并没有定义新数据类型。子类型定义中的基本数据类型必须在前面已通过TYPE定义的类型。如下例:
SUBTYPE
DIGITS
INTEGER
RANGE
0
TO
9;
二、VHDL语言要素3.VHDL数据类型
5)枚举类型
VHDL中的枚举数据类型是用文字符号来表示一组实际的二进制的类型(若直接用数值来定义,则必须使用单引号)。例如状态机的每一状态在实际电路虽是以一组触发器的当前二进制数位的组合来表示的,但设计者在状态机的设计中,为了更于阅读、编辑和编译,往往将表征每一状态的二进制数组用文字符号来代表。【例】
TYPE
M_STATE
IS(STATE1,STATE2,STATE3,STATE4,STATE5);
SIGNAL
CURRENT_STATE,NEXT_STATE:M_STATE;在这里,信号CURRENT_STATE和NEXT_STATE的数据类型定义为M_STATE,它们的取值范围是可枚举的,即从STATE1~STATE5共5种,而这些状态代表5组惟一的二进制数值。在综合过程中,枚举类型文字元素的编码通常是自动的,编码顺序是默认的,一般将第一个枚举量(最左边的量)编码为0,以后的依次加1。综合器在编码过程中自动将第一枚举元素转变成位矢量,位矢的长度将取所需表达所有枚举元素的最小值。如上例中用于表达5个状态的矢位长度应该为3,编码默认值为如下方式:STATE1=‘000’;STATE2=‘001’;STATE3=‘010’;STATE4=‘011’;STATE5‘100’于是它们的数值顺序便成为STATE1<STATE2<STATE3<STATE4<STATE5。二、VHDL语言要素3.VHDL数据类型6)整数类型和实数类型因这两种非枚举的数据类型的取值定义范围太大,综合器无法进行综合;故定义为整数或实数的数据对象的具体的数据类型必须由用户根据实际的需要重新定义,并限定其取值范围,以便综合器所接收,从而提高芯片资源的利用率。如:数据类型定义综合结果
TYPE
N1
IS
RANGE
0TO100
--7位二进制原码
TYPE
N2
IS
RANGE
10TO100
--7位二进制原码
TYPE
N3
IS
RANGE-100TO100
--8位二进制补码
SUBTYPE
N4
IS
N3
RANGE
0TO6
--3位二进制原码
7)数组类型数组类型属复合型类型,是将一组具有相同数据类型的元素集合在一起,作为一个数据对象来处理的类型。数组可以是一维(每个元素只有一个下标)数组或多维数组(每个元素有多个下标)。VHDL仿真器支持多维数组,但综合器只支持一维数组。a.限定性数组定义语句格式如下:TYPE数组名IS
ARRAY(数组范围)OF数据类型;--数组范围明确指出数组元的定义数量和排序方式
b.非限制性数组的定义语句格式如下:TYPE数组名ISARRAY(数组下标名RANCE<>)OF数据类型;--“<>”是下标范围待定符号
二、VHDL语言要素3.VHDL数据类型
8)记录类型由已定义的、数据类型不同的对象元素构成的数组称为记录类型的对象。定义记录类型的语句格式如下:TYPE记录类型名ISRECORD
元素名:元素数据类型;元素名:元素数据类型;…END
RECORD[记录类型名];记录类型定义示例如下:TYPERECDATAISRECORD--将RECDATA定义为四元素记录类型
ELEMNT1;TIME;--将元素ELEMENT1定义为时间类型
ELEMENT2:TIME;--将元素ELEMENT2定义为时间类型
ELEMENT3:STD_LOGIC;--将元素ELEMENT3定义为标准位类型ENDRECORDRECDATA;二、VHDL语言要素3.VHDL数据类型9)数据类型转换(1)类型转换函数方式类型转换函数的作用就是将一种属于某种数据类型的数据对象转换成属于另一种数据类型的数据对象。LIERARYIEEE:USEIEEESTD_LOGIC_1164,ALL;ENTTTYCNT4ISPORT(CLK:INSTD_LOGIC;P:INOUTSTD_LOGIC_VECTOR(3DOWNTO0);ENDENTTTYCNT4;
LIBRAYDATAIO;USEDATAIO.STD_LOGIC_OPS.ALL;ARCHITECTUREARTOFCNT4ISBEGINPROCESS(CLK)ISBEGINIFCLK=“1”ANDCLK`EVENTTHENP<=TO_VECTOR(2,TO_INTEGER(P)+1);--TO_VECTOR将INTEGER转换成STD_LOGIC_VECTOR
TO_INTEGER将STD_LOGIC_VECTOR转换成INTEGERENDIF;ENDPROCESS;ENDARCHITECTUREART;二、VHDL语言要素3.VHDL数据类型9)数据类型转换(2)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 教室照明安装施工方案(3篇)
- 旧城改造排水施工方案(3篇)
- 模特小型活动策划方案(3篇)
- 汽车营销未来规划方案(3篇)
- 海尔产品周期营销方案(3篇)
- 点光源的施工方案(3篇)
- 理财网点营销方案(3篇)
- 着陆页营销方案(3篇)
- 窗框安装固定施工方案(3篇)
- 组建营销精英团队方案(3篇)
- 2024年中考物理实验操作评分标准
- 2025-2026学年外研版(三起)(2024)小学英语三年级上册教学计划及进度表
- 中国血脂管理指南2025版精要
- 方太电烤箱KQD50F-C2说明书
- DB11∕T 2210-2024 城市综合管廊数据规范
- 2025至2030年中国卡纸包装盒行业投资前景及策略咨询研究报告
- 【公开课】巴西+课件-2024-2025学年七年级地理下学期人教版
- 虚拟仿真实验室施工方案
- DG∕TJ 08-2188-2015 应急避难场所设计规范
- 2025公司登记管理实施新规内容解读课件
- 民族团结先进班集体事迹材料7篇
评论
0/150
提交评论