版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
CPLD/FPGA应用设计
教材和参考书教材:
《EDA技术与FPGA应用设计》
参考资料:《EDA技术及应用》谭会生西安电子科技大学出版社《EDA技术与VHDL》潘松科学出版社可编程逻辑器件(第1、2章)EDA开发软件使用(第3章)VHDL硬件描述语言(第4-7章)教学内容第1章可编程逻辑器件概述ASICPLD概述PLD设计与开发本章内容:第1章可编程逻辑器件概述ASIC(ApplicationSpecificIntegratedCircuit):专用集成电路。PLD(programmablelogicdevice):可编程逻辑器件是一种由用户根据自己要求来构造逻辑功能的数字集成电路。PLD现已成为实现ASIC的一种非常重要、而又十分方便有效的手段。1.1.1数字逻辑电路设计方法
1.1数字逻辑电路设计与ASIC软件逻辑设计(软件组装的LSI和VLSI,如微处理器、单片机等,系统功能由软件设计实现,是一种软件的设计方法);
专用集成电路设计(ASIC),是根据用户需要设计的集成电路,用户需要通过软件设计描述,用软件设计硬件)。
硬件逻辑设计(由中小规模集成器件设计数字电路,即硬件设计硬件,设计方法在数字逻辑设计课程中讲述);
1.1.2ASIC及其设计方法
ASIC是指专门为某一应用领域或为专门用户需要而设计制造的LSI或VLSI电路,它可以将某些专用电路或电子系统设计在一个芯片上,构成单片集成系统。
按照功能的不同可分为:微波ASIC、模拟ASIC、数字ASIC。
1.1.2ASIC及其设计方法
ASIC设计方法可分为:全定制和半定制两类。
全定制:全定制是一种基于晶体管级的设计方法,它主要针对要求得到最高速度、最低功耗和最省面积的芯片设计,其设计周期较长,设计成本较高,适用于对性能要求很高(如高速芯片)或批量很大的芯片(如存储器、通用芯片)的设计生产。
1.1.2ASIC及其设计方法
半定制:一种约束性设计方法。约束的目的是简化设计、缩短设计周期和提高芯片的产品率。主要有门阵列、标准单元和可编程器件(PLD)3种。
门阵列:是一种预先制造好的硅阵列(称母片),内部包括几种基本逻辑门、触发器等,芯片中留有一定的连线区。用户根据所需要的功能设计电路,确定连线方式,然后再交生产厂家布线。
1.1.2ASIC及其设计方法
标准单元:是以预先配置好、经过测试的标准单元库为基础的。设计时选择库中的标准单元构成电路,然后调用这些标准单元的版图,并利用自动布局布线软件(CAD工具)完成电路到版图一一对应的最终设计。和门阵列相比,标准单元设计灵活、功能强,但设计和制造周期较长,开发费用也比较高。
1.1.2ASIC及其设计方法
可编程逻辑器件PLD:是一种通用型器件,用户利用EDA工具对器件编程以实现所需要的逻辑功能。PLD是用户可配置的器件,其规模大,功能强,价格便宜,相配套的EDA软件完善,设计人员在实验室即可设计和制造出芯片,而且可反复编程,修改错误,设计周期短,可靠性高。
1.1.2ASIC及其设计方法
EDA技术ASIC设计FPGA/CPLD可编程ASIC
设计
门阵列(MPGA);标准单元(CBIC);全定制;(FCIC);
ASIC设计SOPC/SOC混合ASIC设计1.2PLD概述
1.2.1PLD发展
1.2.1PLD发展
1.2PLD概述
70年代80年代90年代PROM和PLA器件PAL器件GAL器件FPGA器件EPLD器件CPLD器件内嵌复杂功能模块的SoPC电路符号表示
PLD的互补缓冲器PLD的互补输入PLD中与阵列表示
PLD中或阵列的表示阵列线连接表示
PROMPROM基本结构:其逻辑函数是:PROMPROM的逻辑阵列结构逻辑函数表示:PROMPROM表达的PLD图阵列用PROM完成半加器逻辑阵列PLAPLA逻辑阵列示意图PLAPLA与PROM的比较PALPAL结构:PAL的常用表示:1.2.1PLD发展
70年代80年代90年代PROM和PLA器件PAL器件GAL器件FPGA器件EPLD器件CPLD器件内嵌复杂功能模块的SoPC
1.2.2PLD分类
按集成密度分类
1.2.2PLD分类
按编程工艺分类(1)一次性编程的熔丝(Fuse)或反熔丝(Anti-fuse)器件;
(2)紫外线擦除、电编程器件;
(3)EEPROM编程器件,即电擦除、电可编程元件。ISP器件采用此方法,编程次数可达10000次;
(4)SRAM编程器件,特点是断电后信息丢失,多数FPGA基于此技术。
1.2.2PLD分类
按结构特点分类(1)阵列型PLD:基本结构为与或阵列;
(2)FPGA:基本结构为门阵列。PLD基本结构:
1.3PLD逻辑表示法
(1)与阵列固定,或阵列可编程,如EPROM;
(2)与阵列和或阵列都可以编程,如PLA;(3)与阵列可以编程,或阵列固定,如PAL。1.3PLD逻辑表示法
【例1-1】试分别用PLD的3种阵列结构来表示逻辑函数:1.3PLD逻辑表示法
【例1-1】试分别用PLD的3种阵列结构来表示逻辑函数:≥1&&&&&&&&≥1≥1××××××××××××(a)≥1&&&&&&≥1≥1××××××(b)××××××××××××≥1&&&&&&≥1≥1(c)××××××××××××1.4PLD的设计与开发
1.4.1PLD设计流程
1.4.2PLD开发工具
ISPDesginExpertSystem系统ISPDesignExpertSystem是Lattice公司针对其CPLD和FPGA产品开发的EDA软件,支持原理图输入方式和ABELHDL、VHDL、VerilogHDL等硬件描述语言输入方式。可以进行功能仿真和时序仿真,是目前流行的EDA软件中最容易掌握的设计工具之一,它界面友好,操作方便,功能强大,并与第三方EDA工具兼容良好。1.4.2PLD开发工具
ISE系统ISE软件是Xilinx公司推出的完整的可编程逻辑设计软件系列。它支持Xilinx公司所有的CPLD和FPGA可编程逻辑器件,支持多语言开发,具有很好的综合及仿真功能,是业界最强大的EDA设计工具之一。1.4.2PLD开发工具
QuartusIIQuartusII系统是由Altera公司提供的开发软件。该软件提供了一种与结构无关的设计环境,支持Altera的各种PLD系列芯片的设计。支持原理图和各种HDL设计输入选项。1.4.2PLD开发工具
ModelSim仿真软件ModelSim是MentorGraphics公司开发的一款非常优秀的仿真软件,具有友好的仿真界面,不仅支持VHDL、Verilog及VHDL和Verilog混合硬件描述语言仿真,还支持系统级描述语言SystemC和SystemVerilog。该仿真软件仿真速度快、精度高。ModelSim可集成到ISE及QuartusII等PLD开发软件中,从而可在PLD开发软件中直接调用ModelSim进行波形仿真。1.4.2PLD开发工具
Synplify综合软件Synplify、SynplifyPro和SynplifyPremier是Synplicity公司开发的PLD综合工具,支持大多数半导体厂商的CPLD和FPGA产品,有着综合速度快、综合效率高等优点,最近几年在综合软件市场中排名保持第一。1.4.3IP核
IP可分为软核、固核和硬核。软核是用VHDL、VerilogHDL等硬件描述语言描述的功能模块,是与具体实现的工艺无关的IP核。固核是以网表文件的形式提交用户使用的IP核,是完成了综合后的可重用IP模块。硬核是一些已经经过布局、并对尺寸和功耗进行优化的、不能由使用者修改的IP核。硬核以设计的最终阶段产品——掩膜提供。小结
PLD/ASICCPLD/FPGAEDAHDL:VHDL、VerilogHDLLATTICE、ALTERA、XILINIXISPDesginExpertSystem、QuartusII、ISE第2章大规模可编程逻辑器件CPLD/FPGACPLD结构原理FPGA结构原理PLD产品介绍编程、配置本章内容:2.1CPLD结构与工作原理Lattice公司ispLSI系列的CPLD产品为例详细介绍:
CPLD的内部结构;CPLD的主要技术特征;CPLD的设计编程方法。
PLD基本结构:
1.3PLD逻辑表示法
(1)与阵列固定,或阵列可编程,如EPROM;
(2)与阵列和或阵列都可以编程,如PLA;(3)与阵列可以编程,或阵列固定,如PAL。PLA与PROM的比较PALPAL结构:PAL的常用表示:逻辑宏单元输入/输出口输入口时钟信号输入三态控制可编程与阵列固定或阵列GAL16V8GAL2.1CPLD结构与工作原理可编程逻辑块:CPLD的主要组成部分,用以实现系统逻辑功能的配置;I/O模块:实现CPLD输入/输出信号的引脚驱动及电平匹配;可编程互联通道:实现CPLD内部各个功能模块的互联通信。CPLD的内部结构:ispLSI1000和ispLSI1000E系列为通用器件;ispLSI2000系列的器件适用于高速系统的设计;
ispLSI3000系列的器件适用于复杂系统设计,集成度高、速度高;
ispLSI5000系列的器件为68bit超宽输入系列;
ispLSI6000系列的器件在结构上增加了存储器;
ispLSI8000系列器件是多寄存器超大结构。
ispMACH系列器件的特征是超大、超宽、超快;
2.1.1Lattice公司的CPLD器件Lattice公司的isp系列器件主要包括ispLSI和ispMACH系列:2.1.2ispLSI1016输出布线区ORPA0A1A2A3A4A5A6A7集总布线区(GRP)B7B6B5B4B3B2B1B0输出布线区ORP通用逻辑块(GLB)宏模块时钟分配网络I/O0I/O1I/O2I/O3I/O4I/O5I/O5I/O7I/O8I/O9I/O10I/O11I/O12I/O13I/O14I/O15I/O16I/O17I/O18I/O19I/O20I/O21I/O22I/O23I/O24I/O25I/O26I/O27I/O28I/O29I/O30I/O31
通用逻辑模块GLB输入/输出单元IOC集总布线区GRP输出布线区ORP时钟分配网络CDN图2-12.1.2ispLSI1016
通用逻辑模块GLB2.1.2ispLSI1016
输入/输出单元IOCMUXMUXMUXMUXVccMUXMUXDQR/LresetI/O输出至集总布线区IOCLK0IOCLK1RESET来自输出布线区来自输出布线区来自OE选择器表示EEMOS编程单元2.1.2ispLSI1016
输入/输出单元IOC2.1.2ispLSI1016
集总布线区GRPispLSI结构的中央是全局布线区(GRP),它连接所有的内部逻辑:提供高速的内部连线,可实现IOC到GLB或者GLB到GLB的互连。特点是其输入输出之间的延迟恒定且可预知。2.1.2ispLSI1016
输出布线区ORP:GLB和IOC之间的可编程互连阵列,可提高分配IO管脚的灵活性,简化布线软件2.1.2ispLSI1016
时钟分配网络CDN:用于产生5个全局时钟信号,分配给GLB和I/O用;可将时钟专用GLB的4个输出送入时钟分配网络,以建立用户定义的内部时钟。通用逻辑块B0O0O1O2O3CLK0CLK1CLK2IOCLK0IOCLK1Y1Y2Y0时钟分配网络2.1.2ispLSI1016
宏模块结构:器件采用的一种分块结构1.Ultra-MOS工艺
利用Ultra-MOS工艺生产的ispLSI器件具有高密度,高性能的特点。目前ispLSI系列器件的系统工作速度已达200MHz,集成度可达58000个逻辑门。2.1.3ispLSI器件的主要技术特性2.在系统编程功能
所有的ispLSI系列器件均为ISP器件,具有在系统编程能力。
所谓“在系统可编程”是指对器件、电路板、整个电子系统进行逻辑重构和功能修改的能力,这种重构可以在制造之前,调试过程中,甚至在交付用户使用之后进行。2.1.3ispLSI器件的主要技术特性3.边界扫描测试功能
边界扫描技术主要解决芯片的测试问题,借助一个4信号线的接口及相应的软件则可实现对电路板上所有支持边界扫描的芯片内部逻辑和边界引脚的测试。
ispLSI器件中ispLSI3000、6000及8000系列器件支持IEEE1149.1.边界扫描测试标准。它们可以通过5个ISP编程管脚中的4个来传递边界扫描信号。
2.1.3ispLSI器件的主要技术特性JTAG边界扫描测试边界扫描电路结构边界扫描数据移位方式JTAG边界扫描测试4.加密功能
ispLSI器件具有加密功能,用于防止非法拷贝JEDEC数据文件。ispLSI器件中提供了一段特殊的加密单元,该单元被加密以后就不能读出器件的逻辑配置数据。由于ispLSI器件的加密单元只能通过对器件重新编程才能擦除,已有的解密手段一般不能破解,器件的加密特性较好。2.1.3ispLSI器件的主要技术特性5.短路保护
ispLSI器件采取了两种短路保护手段。首先,选用电荷泵给硅片基底加上一个足够大的反向偏置电压,这个反向偏置电压能够防止输入负电压毛刺而引起的内部电路自锁;其次,器件输出采用N沟道方式,取代传统的P沟道方式,消除SCR自锁现象。2.1.3ispLSI器件的主要技术特性
编程是指将EDA软件设计的熔丝图文件(JEDEC)写入PLD器件的过程(下载)。
1、ispLSI编程信号线:
ispEN:编程使能,低电平有效;
SCLK:时钟;
SDI:串行数据输入;
SDO:串行数据输出;
MODE:方式控制。2.1.4ispLSI器件的编程2、下载电路
编程电缆又称为下载电缆,该电缆连接计算机的并行口和ispLSI芯片。电缆中有简单的控制电路。
2.1.4ispLSI器件的编程Lattice公司的下载电缆
3、多个器件的编程
有并行和串行两种方式,但都需要在EDA软件的支持下完成。串行菊花链编程结构:
2.1.4ispLSI器件的编程1、ispLSI1016芯片(44管脚)
32个I/O(0-31);
4个专用输入(IN0-3);
5个编程信号;
3个时钟输入;
2对电源。
2.1.5ispLSI1016实验板
2、实验板组成
1016芯片、下载电路、电源电路、时钟电路、输入输出设备。
3、管脚分配
11:时钟输入,可选择2HZ-2KHZ之间10个频率;
15-22:8个输入开关;
4-10:7个发光二极管,和L1复用;
3:蜂鸣器;
27-32、37,38-41:L2、L3(共阳)2.1.5ispLSI1016实验板2.2FPGA结构与工作原理(1)以Xilinx公司的Spartan3E系列FPGA产品为例可配置逻辑块CLB可配置I/O模块IOB可编程互联资源IR2.2FPGA结构与工作原理可配置逻辑块CLB每个slice内部包含两个4输入查找表LUT2.2FPGA结构与工作原理4输入查找表LUT2.2FPGA结构与工作原理可配置I/O模块IOB:可配置I/O模块用来配置FPGA芯片引脚与外部模块通信信号的传输方向及输出信号的驱动电流大小。FPGA的引脚可配置成:输入信号、输出信号、双向传输信号及高阻态。可编程互联资源IR:可编程互联资源连接FPGA内部的各功能模块(如:IOB,CLB,交换矩阵、DCM、BlockRAM等),实现各功能模块之间的通信。...IOCIOC...IOCIOC...IOCIOC...IOCIOC...IOCIOC...IOCIOC...IOCIOC...IOCIOC...IOCIOC...IOCIOC...IOCIOC...IOCIOCEABEAB嵌入式阵列块(2)Cyclone/CycloneII系列器件的结构与原理LAB:逻辑阵列块3.4.2Cyclone/CycloneII系列器件的结构与原理图3-34CycloneLE结构图LE:基本编程单元2.3CPLD/FPGA产品Altera公司产品
Xilinx公司
Lattice公司2.3.1Altera公司产品低成本的Cyclone系列:Cyclone、CycloneII、CycloneIII、CycloneIV、CycloneV等;中端的Arria系列:包括ArriaGX、ArriaII、ArriaV等;高端的Stratix系列:包括Stratix、StratixII、StratixIII、StratixIV、StratixV等2.3.2Xilinx公司CPLD产品:CoolRunner、XC9500系列
;低端Spartan
:Spartan2、Spartan2E、Spartan3、Spartan3E、Spartan3A、Spartan6
;高端Virtex:有Virtex2、Virtex2P、Virtex4、Virtex5、Virtex6、Virtex7系列。2.3.3Lattice公司CPLD产品有ispMACH4000ZE、MachXO、MachXO2系列;LatticeECP3、LatticeECP2/M、LatticeSC/M、LatticeXP2等系列2.4编程与配置ISP编程与FPGA配置2.4编程与配置在系统编程
ISP(CPLD采用)
FPGA配置
主动配置方式:由FPGA从外部程序存储器EEPROM或Flash中主动读取配置代码;被动配置方式:由外部处理器将配置代码写入到FPGA中。2.4编程与配置JTAG模式:在开发软件中通过下载电缆直接将配置代码下载到FPGA,是项目设计验证阶段常用的下载方式。2.5CPLD与FPGA比较CPLD相对FPGA内部逻辑资源较少,且价格便宜;FPGA内部资源多,并可嵌入微处理IP核;编程与配置;CPLD结构适合于组合逻辑设计,FPGA适合于时序逻辑设计。CPLD内部逻辑单元间的连线为连续式布线,信号延迟时间可预测,而FPGA内逻辑单元间信号延迟不可预测。CPLD保密性好,FPGA保密性差。器件速度及功耗的选择。第3章常用EDA软件Lattice:ispEXPERT、LatticeDiamond
Altera:MAX+PLUSII、
QuartusIIXilinx:Foundation、ISE
本章内容:原理图/VHDL文本编辑综合FPGA/CPLD适配FPGA/CPLD编程下载FPGA/CPLD器件和电路系统时序与功能门级仿真1、功能仿真2、时序仿真逻辑综合器结构综合器1、isp方式下载2、JTAG方式下载3、针对SRAM结构的配置
4、OTP器件编程
功能仿真FPGA/CPLD设计流程3.2QuartusII操作指南
开发过程:
一、建立设计工程
二、源文件输入
三、编译(设计处理)
四、仿真验证
五、器件编程(下载)1.QuartusⅡ软件启动2.创建工程3.选择FPGA器件3.2.1建立设计工程步骤1:软件启动图4-1进入MAX+plusII,建立一个新的设计文件步骤2:创建工程步骤3:选择FPGA器件EP1C12Q240C8Assignments--Device1.建立原理图文件2.输入基本单元符号3.放置输入输出引脚符号4.连线5.为引线和引脚命名6.保存设计文件3.2.2源文件输入
(以原理图文件为例)步骤1:建立原理图文件
步骤2:输入基本单元符号
步骤2:输入基本单元符号
(1)在图形编辑器窗口的工作区中双击鼠标左键,或单击工具栏的符号按钮步骤2:输入基本单元符号
(2)选择所需要的图元或符号步骤3:放置输入输出引脚符号
步骤4:连线
符号之间的连线包括信号线NodeLine和总线BusLine。Quartus Ⅱ软件会自动根据端口是单信号端口还是总线端口画出信号线或总线。连线:将鼠标移动到其中一个端口上,这时鼠标指示符自动变为“+”形状,按住鼠标的左键并拖动鼠标到达第二个端口,放开左键即可。连线拐弯:在需要拐弯处放开鼠标左键,然后再继续按下左键拖动即可。连线删除:单击这根连接线并按Del键即可。步骤5:为引线和引脚命名步骤6:保存设计文件1.编译过程:选择Tools菜单的CompilerTool项3.2.3编译
2.分析综合(Analysis&Synthesis)1.建立波形仿真文件2.功能仿真和时序仿真设置3.启动仿真器3.2.4仿真验证
步骤1:建立波形仿真文件
(1)创建一个新的矢量波形文件步骤1:建立波形仿真文件
(1)创建一个新的矢量波形文件(2)在矢量波形文件中加入输入、输出节点选择View的UtilityWindows下的NodeFinder命令,弹出NodeFinder界面,查找要加入波形文件中的节点名;在Filter列表中选择Pins:all,在Named栏中键入“*”,然后点击List按钮,在NodesFound栏即列出设计中的所有节点名;选择要加入波形文件中的节点,然后按住鼠标左键,拖动到波形编辑器左边Name列的空白处放开。
步骤1:建立波形仿真文件
(3)编辑波形步骤2:功能仿真和时序仿真设置
(1)选择Assignments的Settings…命令,在Settings对话框的Category列表中选择Simulator,显示仿真器页面(2)功能仿真类型选择Functional,选择Processing的GenerateFunctionalSimulationNetlist命令,产生功能仿真网表文件;时序仿真类型选Timing,编译设计产生时序仿真的网表文件。步骤3:启动仿真器
在完成上面的仿真器设置以后,选择Processing的StartSimulation命令即可启动仿真器。同时状态窗口和仿真报告窗口自动打开,并在状态窗口中显示仿真进度以及所用时间。仿真结束后,在仿真报告窗口显示输出节点的仿真波形。1.引脚分配
(1)选择Assignments/AssignmentEditor菜单命令,在分配编辑器的类别(Category)列表中选择Locationspin,或直接选择Assignments的Pins菜单命令。(2)用鼠标左键双击To单元,将弹出包含所有引脚的下拉框,从中选择一个引脚名。(3)用鼠标左键双击Location单元,从下拉框中可以指定目标器件的引脚号。(4)完成所有设计中引脚的指定,关闭AssignmentEditor界面,保存分配。(5)在进行编译之前,检查引脚分配是否合法。选择Processing→Start→StartI/OAssignmentAnalysis菜单命令,当提示I/O分配分析成功时,点击OK按钮关闭提示。3.2.5器件编程
2.编程(1)全局编译选择Processing/StartCompilation,全局编译成功后,可以进行编程下载。(2)打开编程器窗口选择Tool/Programer命令,打开编程器窗口。(3)设置下载形式第一次使用下载时,需要选择下载形式。在编程器窗口,点击HardwareSetup按钮,打开HardwareSetup对话框,然后点击AddHardware,选择USB-Blaster[USB-0]后单击SelectHardware,则把下载形式设置为USB-Blaster[USB-0](4)下载下载可以选择JTAG方式和AS方式。JTAG方式把文件直接下载到FPGA里面,AS方式把文件下载到配置芯片里面。选择AddFile,添加.sof文件,选中Program/Configure,点击Start后开始下载。3.2.5器件编程
将设计项目设置成可调用元件
File---Create/Update---CreatesymbolFilesforCurrentFile设计顶层文件
File---new---blockdiagram/schematicFile;
保存在相同目录;设置成顶层文件:PROJECT/SETASTOP—LEVELENTITY;
分析综合;建立仿真文件,进行仿真。3.2.6层次设计【实验一】原理图方式设计一位全加器1.1实验目的1.熟悉QuartusII原理图设计流程的全过程。2.学习简单组合电路的设计方法、输入步骤。3.学习层次化设计步骤。4.学习EDA设计的仿真和硬件测试方法。1.2实验原理1位全加器可以用两个半加器及一个或门连接而成。【实验一】原理图输入一位全加器1.3实验任务1.用原理图输入方法设计半加器电路。2.建立顶层原理图电路。3.对全加器电路进行仿真分析、引脚锁定、硬件测试。1.4实验报告要求详细叙述全加器的设计流程;给出各层次的原理图及其对应的仿真波形图;给出加法器的延时情况;最后给出硬件测试流程和结果。【实验一】原理图输入一位全加器【实验二】原理图输入2位十进制计数器Q3Q2Q1Q0CCPEPET74LS160RDLDD3D2D1D0Q3Q2Q1Q0CCPEPET74LS160RDLDD3D2D1D0CP1Y(1)(2)附加显示译码器第4章VHDL语言基础常见的HDL有ABEL、AHDL、VHDL、VerilogHDL和SystemC等。HDLIEEE工业标准硬件描述语言VHDL、Verilog超高速集成电路硬件描述语言VHDL,美国国防部研究计划硬件描述语言HDL第4章VHDL语言基础覆盖面广,描述能力强,多层次硬件描述语言VHDL有良好的可读性,既是程序又是文件VHDL的移植性很强VHDL生命周期长,硬件描述与器件工艺无关代码量大,书写烦琐VHDL第4章VHDL语言基础基本组成语言要素本章内容:4.1基本结构参数部分实体部分结构体例:2选1多路选择器的VHDL描述4.1基本结构sy0a1b2选1多路选择器的VHDL描述4.1基本结构2选1多路选择器的VHDL描述方法一:
ENTITYmux21aISPORT(a,b:INBIT;s:INBIT;y:OUTBIT);ENDENTITYmux21a;ARCHITECTUREoneOFmux21aISSIGNALd,e:BIT;BEGINd<=aAND(NOTS);e<=bANDs;y<=dORe;ENDARCHITECTUREone;4.1基本结构实体结构体2选1多路选择器的VHDL描述方法二:ENTITYmux21aISPORT(a,b,s:INBIT;y:OUTBIT);ENDENTITYmux21a;ARCHITECTUREoneOFmux21aISBEGINPROCESS(a,b,s)BEGINIFs='0'THENy<=a;ELSEy<=b;ENDIF;ENDPROCESS;ENDARCHITECTUREone;4.1基本结构sy0a1b【例4-1】
LIBRARYieee;--库程序包调用
USEieee.std_logic_1164.ALL;
USEieee.std_logic_unsigned.ALL;
4.1基本结构ENTITYcntm16IS--实体cntm16
GENERIC(cntwidth:integer:=4);
PORT
(ci:INstd_logic;
nreset:INstd_logic;
clk:INstd_logic;
co:OUTstd_logic;
qcnt:BUFFERstd_logic_vector(cntwidth-1DOWNTO0)
);
ENDcntm16;
4.1基本结构ARCHITECTUREbehaveOFcntm16IS--结构体
BEGIN
co<=’1’WHEN(qcnt=”1111”ANDci=’1’)ELSE‘0’;
PROCESS(clk,nreset)
BEGIN
IF(nreset=’0’)THEN
qcnt<=”0000”
ELSIF(clk’eventANDclk=’1’)THEN
IF(ci=’1’)THEN
qcnt<=qcnt+1;
ENDIF;
ENDIF;
ENDPROCESS;
ENDbehave;
4.1基本结构模块结构
参数部分:库(LIBRARY)、程序包(USE);
实体(ENTITY):[类属]、端口(PORT);
结构体(ARCHITECTURE):赋值、进程(PROCESS-IF)。
4.1基本结构4.1基本结构调用程序包语句实体及实体声明语句结构体1结构体2结构体n标准程序包标准程序包定义程序包定义程序包进程1进程2进程nVHDL程序设计约定
语句结构描述中方括号“[]”内的内容为可选内容。程序文字的大小写是不加区分的。程序中的注释使用双横线“--”。建议书写使用层次缩进格式。建议各个源程序文件的命名均与其实体名一致。4.1基本结构库说明
存放已经编译的实体、结构体、程序包和配置,用于设计共享,是编程资源。
library<库名>;
4.1.1参数部分程序包引用使用USE子句指明要使用库中某一个设计单元。
use<库名>.<程序包名>.all;【例4-2】
LIBRARYieee;
USEieee.std_logic_1164.ALL;实体(ENTITY)
实体是一个设计实体的表层设计单元,其功能是对这个设计实体与外部电路进行接口描述。它规定了设计单元的输入/输出接口信号或引脚,是设计实体经封装后对外的一个通信界面。类似于原理图中的一个部件符号。4.1.2实体部分实体格式ENTITY实体名IS[GENERIC(常数名:数据类型[:设定值])];--类属表
PORT--端口表(端口名:方向(端口模式)端口类型;
:;
端口名:方向(端口模式)端口类型
);END实体名;ENTITY实体名IS
4.1.2实体部分GENERIC类属参数
定义端口界面常数(端口宽度、器件延迟时间)。类属参量的值可由设计实体的外部提供。书写格式:GENERIC([常数名:数据类型[:设定值]{;常数名:数据类型[:=设定值]});例4-1
GENERIC(cntwidth:integer:=4);
4.1.2实体部分PORT端口
用于定义模块所有的输入/输出信号,相当于定义一个模块符号需要定义端口信号名、端口模式、端口数据类型例4-1
4.1.2实体部分CICONRESETQCNT[3..0]CLKCNTM16端口模式端口模式说明(以设计实体为主体)IN输入,只读模式,将变量或信号信息通过该端口读入OUT输出,单向赋值模式,将信号通过该端口输出BUFFER具有读功能的输出模式,可以读或写,只能有一个驱动源INOUT双向,可以通过该端口读入或写出信息PORT端口模式端口数据类型VHDL数据类型:预定义数据类型、自定义数据类型只能使用已经定义的数据类型例4-1中数据类型Std_logic和Std_logic_vector,在ieee.std_logic_1164.all程序包中说明,使用时首先打开。实体实例【例4-3】4位全加器的实体描述。Libraryieee;Useieee.std_logic_1164.all;Entityadd4isPort(a,b:instd_logic_vector(3downto0);Ci:instd_logic;Sum:outstd_logic_vector(3downto0);Co:outstd_logic);Endadd4;结构体(ARCHITECTURE)
结构体主要用来描述实体的内部结构,即描述一个实体的功能。描述方式行为描述方式、数据流描述方式、结构描述方式、混合描述方式4.1.3结构体部分结构体格式ARCHITECTURE结构体名OF实体名IS[结构体说明部分];BEGIN
结构体描述部分;END结构体名;4.1.3结构体部分结构体组成4.1.3结构体部分行为描述
描述该设计单元的功能,主要使用函数、过程和进程语句,以算法形式描述数据的变换和传送
结构体描述风格例4-4Libraryieee;Useieee.std_logic_1164.all;Useieee.std_logic_unsigned.all;Useieee.std_logic_arith.all;Entityeqcomp4isPort(a,b:instd_logic_vector(3downto0);equals:outstd_logic);Endeqcomp4;Architecturebehavioralofeqcomp4isBeginComp:process(a,b)BeginIfa=bthenEquals<=’1’;ElseEquals<=’0’;Endif;Endprocesscomp;Endbehavioral;
行为描述结构描述
描述该设计单元的硬件结构,调用库中的元件或是设计模块,主要使用元件说明语句及元件例化语句
结构体描述风格例4-5U0xnor2x(0)a(0)b(0)U1xnor2x(1)a(1)b(1)U2xnor2x(2)a(2)b(2)U3xnor2x(3)a(3)b(3)U4and4equalsabcdyArchitecturestructofeqcomp4isComponentxnor2--元件说明
Port(a,b:instd_logic;X:outstd_logic);Endcomponent;Componentand4--Port(a,b,c,d:instd_logic;y:outstd_logic);Endcomponent;Signalx:std_logic_vector(0to3);
结构描述BeginU0:xnor2portmap(a(0),b(0),x(0));--元件例化
U1:xnor2portmap(a(1),b(1),x(1));U2:xnor2portmap(a(2),b(2),x(2));U3:xnor2portmap(a(3),b(3),x(3));U4:and4portmap(x(0),x(1),x(2),x(3),equals);Endstruct;
结构描述数据流描述从信号到信号的数据流的路径形式进行描述。使用并行的信号赋值语句,既显式表示了该设计单元的行为,也隐式表示了该设计单元的结构。
结构体描述风格例4-6Architecturedataflowofeqcomp4isBeginEquals<=’1’when(a=b)else‘0’;并行信号赋值语句Enddataflow;
一个实体可有多种方案的结构体,但仿真和综合时要用configuration配置语句选择一个结构体映射到硬件电路,即为实体选择、指定或者激活一个结构体。
结构体配置4.1.3结构体部分4.1.4语法小结数据类型信号赋值属性库和程序包实体结构体端口定义端口模式逻辑操作符IF语句变量对象进程语句顺序语句并行语句说明部分元件说明元件例化信号对象类属定义CASE语句条件操作符配置条件信号赋值数字文字规则运算符运算符重载类型定义4.2VHDL语言要素文字规则数据对象数据类型运算符属性4.2.1文字规则标示符数值字符串下标4.2.1文字规则标示符1、标识符由字母、数字及下划线组成;
2、以字母开头;
3、下划线不能放在结尾;
4、下划线不能连用;
5、不能使用保留字;
6、VHDL不区分大小写。4.2.1文字规则数值表示(1)整数表示
整数表示十进制数值,如:
11,123,135E2(=13500),12_345_678(=12345678)
(2)实数表示
实数也表示十进制数值,必须带有小数点,如:
1.252.01.56E-3(0.00156)1_120.123_678(11120.123678)数值表示(3)数制基数表示
有5部分组成:十进制数表示数值的基数;隔离符号“#”;该基数下对应的数值;隔离符号“#”;十进制表示的指数部分。
2#1110#--二进制表示数值14
8#120#--八进制表示数值80
16#A0#--十六进制表示数值160
10#12#E2--十进制表示数值1200
16#D#E1--十六进制表示数值2084.2.1文字规则字符串
字符、字符串:单引号引起来的ASCII字符(数值、符号或字母);双引号中的一维的字符数组。
如:‘R’,‘a’,‘*’,‘Z’,‘-’
,‘0’;“ERROR”,“NOTE”
两种类型字符串:文字字符串和数位字符串(位矢量,是BIT数据类型的一维数组)。B“1_0101_1010”--二进制数数组,长度是9O“17”--八进制数数组,长度为6X“A2E0”--十六进制数数组,位矢数组长度是164.2.1文字规则下标名及下标段名1、用于指示数组型变量或信号的某一元素或某一段元素
2、语句格式分别为:
名(表达式);
名(表达式1to/downto表达式2);
3、signala,b:bit_vector(7downto0);
signalc,d:bit;
a<=“01000111”;--给a(7)到a(0)赋值为“01000111”
c<=a(6);--把a(6)值’1’
赋值给c
b(7downto4)<=a(3downto0);--a的低4位赋给b的高4位
b(0to3)<=a(4to7);--a的高4位赋给b的低4位
d<=a(0);--把a(0)值’1’
赋值给d
4.2.2数据对象数据对象类似于一种容器,接受不同数据类型的赋值
常量变量信号对象种类:
信号signal、变量variable、常量constant、文件file。
常量:不对应电路中的物理量,但可以说明全局量。在结构体、实体、程序包、进程、函数、过程中均可使用。
变量:程序运算的中间量,并不对应电路中的物理量。变量说明局部量,用于进程、函数、过程。
信号:电路中的物理量,对应于电路的连线和节点。信号说明全局量,用于描述结构体、实体、程序包。
4.2.2数据对象对象特点:
1、信号和变量可以被连续地赋值;
2、常量只能被赋值一次;
3、信号和变量的赋值形式和执行过程不同:变量是立即赋值(:=),没有延迟,而信号赋值要有一定的延迟(<=)。4.2.2数据对象对象说明的格式
对象种类对象名:数据类型[:=表达式];
1、对象种类:Constant(常数)、Signal(信号)、Variable(变量)、File(文件)
2、表达式用于设定初始值,是可选项。
4.2.2数据对象【例4-8】常量说明实例:CONSTANTDBUS﹕BIT_VECTOR:=“01011010”;定义BIT_VECTOR位矢量型常量DBUS,取值“01011010”。CONSTANTVCC﹕REAL:=5.0;定义REAL实数型常量VCC,取值5.0。CONSTANTDELY﹕TIME:=25ns;定义TIME时间型常量DELY,取值25ns。4.2.2数据对象【例4-9】变量说明实例:VARIABLEx,y:INTEGER;定义变量x和y,整数类型。VARIABLEcount:INTEGERRANGE0TO255:=10;定义变量count,整数类型,取值在0-255,初始值为10。4.2.2数据对象【例4-10】信号说明实例:SIGNALsys_clk:BIT:=’0’;
SIGNALdata_bus:Std_Logic_Vector(7Downto0):=(others=>’1’);
4.2.2数据对象【例4-12】
libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;
entitybcdadderisport(op1,op2:inintegerrange0to9;result:outintegerrange0to31);endbcdadder;4.2.2数据对象architecturebehaveofbcdadderisconstantajustnum:integer:=6;signalbinadd:integerrange0to18;beginbinadd<=op1+op2;process(binadd)variabletmp:integer:=0beginifbinadd>9thentmp:=adjustnum;elsetmp:=0;endif;result<=binadd+tmp;endprocess;endbehave;4.2.2数据对象4.2.3数据类型VHDL是一种强类型语言,要求设计实体中的每一个常数、信号、变量、函数以及设定的各种参量都必须具有确定的数据类型,并且只有数据类型相同的量才能互相传递和作用。VHDL中的数据类型:标量(整数、浮点、枚举、物理)、复合(数组、记录)、文件、存取
。VHDL中的数据类型引用方式有:预定义、自定义
和类型转换等。标准数据类型(可直接引用)在VHDL标准程序包STANDARD中定义的,在实际使用中,已自动包含进VHDL的源文件中,因而不必通过USE语句以显式调用。
4.2.3数据类型标准数据类型(1)整数(INTEGER)
整数类型的数代表正整数、负整数和零。整数在硬件电路中是用二进制表示的,但其不能被看作位矢量(枚举型),不能使用逻辑操作符。整数常量的书写方式示例如下:2--十进制整数10E4--十进制整数16#D2#--十六进制整数2#11011010#--二进制整数标准数据类型(2)实数
VHDL的实数类型类似于数学上的实数,或称浮点数,取值范围为-1.0E38~+1.0E38。书写时一定要有小数。仅能在VHDL仿真器中使用,VHDL综合器不支持实数,因为实数类型的实现相当复杂,目前在电路规模上难以承受。实数常量的书写方式举例如下:65971.333333 --十进制浮点数8#43.6#E+4--八进制浮点数43.6E-4 --十进制浮点数(3)位(BIT)
位数据类型也属于枚举型,取值‘1’或‘0’。可以进行逻辑运算,运算结果仍是位数据类型。VHDL综合器用一个二进制位表示BIT。在程序包STANDARD中定义的源代码是:TYPEBITIS(‘0’,‘1’);例:signala,b,c:bit;c<=aandb;
标准数据类型(4)位矢量(BIT_VECTOR)
位矢量是基于BIT数据类型的数组。在程序包STANDARD中定义的源代码是:TYPEBIT_VECTORISARRAY(NATURALRANGE<>)OFBIT;位矢量是用双引号括起来的一组位数据。Signala:bit_vector(7downto0):=”11001010”;
标准数据类型(5)布尔(BOOLEAN)
布尔数据类型实际上是一个二值枚举型数据类型,它的取值有FALSE和TRUE两种。可以进行关系运算和逻辑运算,不能用于算术运算。IFa=b
标准数据类型(6)
字符(CHARACTER)
字符类型通常用单引号引起来,如‘A’。字符类型区分大小写,如‘B’不同于‘b’。(7)字符串(STRING)
非约束型字符数组,或称为字符串数组。字符串必须用双引号标明。
VARIABLESTRING_VAR﹕STRING(1TO7);
…STRING_VAR:=“ABCD”;标准数据类型
标准数据类型(8)时间(TIME)VHDL中唯一预定义物理类型,由整数和物理量单位两部分组成,之间至少留一个空格,如55ms。STANDARD程序包中时间型定义如下:TYPETIMEISRANGE-2147483647TO2147483647unitsfs; --飞秒,VHDL中的最小时间单位
ps=1000fs; --皮秒
ns=1000ps; --纳秒
us=1000ns; --微秒
ms=1000us;--毫秒
sec=1000ms;--秒
min=60sec; --分
hr=60min; --时enduntis;标准数据类型(9)错误等级(SEVERITY_LEVEL)
在VHDL仿真器中,错误等级用来指示设计系统的工作状态,共有四种可能的状态值:NOTE(注意)、WARNING(警告)、ERROR(出错)、FAILURE(失败)。其定义如下:
TYPESEVERITY_LEVEIS(NOTE,WARNING,ERROR,FAILURE);
(10)自然数(NATURAL)和正整数(POSITIVE)
整数的子类型,即非负的整数、正整数它们在STANDARD程序包中定义的源代码如下:
SUBTYPENATURALISINTEGERRANGE0TOINTEGER'HIGH;
SUBTYPEPOSITIVEISINTEGERRANGE1TOINTEGER'HIGH;标准数据类型
IEEE预定义标准逻辑类型
在IEEE库的程序包STD_LOGIC_1164中,定义了两个非常重要的数据类型,即标准逻辑位STD_LOGIC
和标准逻辑矢量STD_LOGIC_VECTOR。使用时用USE语句显式调用。(1)标准逻辑位STD_LOGIC
STD_LOGIC数据类型的定义如下所示:TYPESTD_LOGICIS('U','X',‘0’,'1','Z','W','L','H','-');各值的含义是:'U'--未初始化的,'X'--强未知的,‘0’--强0,'1'--强1,'Z'--高阻态,'W'--弱未知的,'L'--弱0,'H'--弱1,'-'--忽略。IEEE预定义标准逻辑类型(2)标准逻辑矢量(STD_LOGIC_VECTOR)STD_LOGIC_VECTOR类型定义如下:TYPESTD_LOGIC_VECTORISARRAY(NATURALRANGE<>)OFSTD_LOGIC;例如:Signala:std_logic_vector(7downto0);a<=”11001010”;IEEE预定义标准逻辑类型其它预定义数据类型VHDL综合工具配带的扩展程序包中,定义了一些有用的类型。如Synopsys公司在IEEE库中加入的程序包STD_LOGIC_ARITH中定义了如下的数据类型:无符号型(UNSIGNED)、有符号型(SIGNED)和小整型(SMALL_INT)。NUMERIC_STD程序包和NUMERIC_BIT程序包中也分别定义了针对STD_LOGIC型和BIT型的UNSIGNED、SIGNED数据类型。使用这些数据类型时,必须首先打开相应的程序包。(1)无符号数据类型(UNSIGNEDTYPE)UNSIGNED数据类型代表一个无符号的数值,在综合器中,这个数值被解释为一个二进制数,这个二进制数的最左位是其最高位。【例4-13】UNSIGNED型举例:VARIABLEvar:UNSIGNED(0TO9);定义变量var为10位二进制数,最高位是var(0)。SIGNALsig:UNSIGNED(3TO0);定义信号sig为4位二进制数,最高位为sig(3)。其它预定义数据类型(2)有符号数据类型(SIGNEDTYPE)SIGNED数据类型表示一个有符号的数值,补码表示,例如:SIGNED(“0101”)代表+5;SIGNED(“1011”)代表-5。【例4-14】SIGNED型举例:VARIABLEvar:SIGNED(0TO9);定义变量var为10位二进制数,最高位var(0)是符号位。SIGNALsig:SIGNED(3TO0);定义信号sig为4位二进制数,最高位sig(3)是符号位。其它预定义数据类型用户自定义数据类型包括自定义的新类和子类即有约束范围的类;可以自定义的数据类型有:整数、实数、枚举、物理、数组、记录等。一般格式为:TYPE数据类型名{,数据类型名}IS数据类型定义;用户自定义数据类型枚举类型
VHDL中的枚举数据类型是用文字符号来表示一组实际的二进制数的类型(若直接用数值来定义,则必须使用单引号)。用户自定义数据类型定义格式:TYPE数据类型名IS(元素1、元素2、…);编码:枚举类型的文字元素在综合时会自动编码,其编码顺序默认最左边元素为0,向右依次加1,即在枚举列表中,最左边值最小,最右边值最大,可以使用比较运算。例:
TYPEweekIS(Sun,Mon,Tue,wed,Thu,Fri,Sat);
Signaltoday:week;
result<=‘1’whentoday>=Frielse‘0’;
枚举类型
应用
TYPEM_STATEIS(STATE1,STATE2,STATE3,STATE4,STATE5);
SIGNALCURRENT_STATE,NEXT_STATE:M_STATE;信号CURRENT_STATE和NEXT_STATE的数据类型定义为M_STATE,它们的取值范围是可枚举的,即从STATE1~STATE5共五种,而这些状态代表五组唯一的二进制数值。枚举类型
在综合中,整数和实数非枚举型数据类型的取值定义范围太大,综合器无法进行综合。需要定义其约束范围,综合时将负数编码为二进制补码,正数编码为二进制原码。整数和实数子类型
定义格式:TYPE数据类型名IS数据类型定义约束范围;SUBTYPE子类型名基本类型RANGE约束范围;【例4-17】TYPEcurrentISREALRANGE-1E4TO1E4;TYPEdigit1ISINTEGERRANGE0TO9;SUBTYPEdigit2INTEGERRANGE-9TO9;综合时digit1为4位二进制原码;digit2为5位二进制补码。整数和实数子类型
VHDL支持两种复合类数据类型:数组和记录。数组是相同类型元素的组合,记录则是不
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026测试常用工具面试题及答案
- 医疗纠纷群体性事件应急维稳处置流程规范
- 电力工程卫生防疫措施
- 2026年锂离子电池产学研合作平台建设
- 2026年古典文学中的处世智慧与现代职场应用
- 2026年家庭农场项目申报书编制指南
- 2026年食品保水剂产品陈列与终端生动化指南
- 2025江西省中考语文真题(原卷版)
- 北京市东城区2025-2026学年高二上学期期末考试数学试题
- 初二上册物理试卷及答案
- 再生资源绿色回收分拣中心项目投资计划书
- 2026智能物流仓储自动化升级与REITs融资模式研究
- 2026年第37届“中国学生营养日”校园营养餐健康助成长课件
- 2026年内部审计师考试试卷及答案
- 四川省自然资源投资集团有限责任公司2026年上半年公开招聘考试备考试题及答案解析
- 粮食贸易企业制度规范
- 2026年阜阳卷烟材料有限责任公司新员工招聘4人笔试参考试题及答案详解
- 2025年成都市网格员笔试试题及答案
- 超声科产前筛查异常应急预案演练脚本
- CC2530技术与应用 教案全套
- (2026版)铁路货物运输规则课件
评论
0/150
提交评论