FPGA开发流程与硬件描述语言信息理论与技术教研中心别志松zhisongbie@bupt.edu.cn提纲传统设计方法的困境及其相应解决方案PLD发展简史FPGA基本结构FPGA开发流程FPGA设计中的层次关系与转换关系硬件描述语言及其在FPGA开发中的作用传统设计方法回顾系统需求分解真值表逻辑表达式逻辑图卡诺图化简状态表、图确定触发器组合电路逻辑图简化状态元器件选择原理图PCB图电路板焊接系统调试原理图合并板级合并传统设计方法的困境与解决方案复杂,工作量大,涉及大量的器件选型问题,而且最终设计出来的电路板会比较复杂解决方案:可编程逻辑器件PLD,特别是超大规模的可编程逻辑器件电路图可读性差,开发人员之间配合困难,设计自动化难以实现解决方案:硬件描述语言HDL错误查找以及调试成本高,只有设计出样机后才能进行实测。解决方案:各种EDA工具库与各阶段仿真提纲传统设计方法的困境及其相应解决方案PLD发展简史FPGA基本结构FPGA开发流程FPGA设计中的层次关系与转换关系硬件描述语言及其在FPGA开发中的作用可编程逻辑器件PLDPLD(ProgrammableLogicDevice)种类:基于与或阵列的简单PLDPROM、EPROM、EEPROM;PLA、PAL(ProgrammableArrayLogic);GAL(GenericArrayLogic);CPLD(ComplexProgrammableLogicDevices)FPGA(FieldProgrammableGateArray)现场可编程门阵列多核DSP结构:大颗粒度可编程逻辑器件的发展历程70年代80年代90年代PROM和PLA器件PLA/PAL器件GAL器件FPGA器件EPLD器件CPLD器件内嵌复杂功能模块的FPGACPLD器件可编程逻辑器件工艺发展历程1985年,2μm工艺,门数量不超过1000个;2001年,150nm工艺;2002年,130nm工艺;2003年,90nm工艺;2006年,65nm工艺,门数量已经达到千万级,晶体管个数超过10亿个;45/40nm工艺……大的PLD生产厂家最大的PLD供应商之一FPGA的发明者,最大的PLD供应商之一ISP技术的发明者提供军品及宇航级产品提纲传统设计方法的困境及其相应解决方案PLD发展简史FPGA基本结构FPGA开发流程FPGA设计中的层次关系与转换关系硬件描述语言及其在FPGA开发中的作用FPGA的基本结构例:Xilinx公司ViertexII系列整体结构Xilinx公司的CLB结构示例2到4个Slice构成一个CLBXilinx公司的Slice结构示例IOB结构示意图LUT本质上就是RAM。常用的4输入查找表其实就是16*1的RAM。FPGA配置时对该RAM进行赋值。与真值表有对应关系。布线资源布线资源连通FPGA内部的所有单元。连线的长度和工艺决定着信号在连线上的驱动能力和传输速度。FPGA芯片内部有着丰富的布线资源,根据工艺、长度、宽度和分布位置的不同而划分为4类不同的类别。第一类是全局布线资源,用于芯片内部全局时钟和全局复位/置位的布线;第二类是长线资源,用以完成芯片Bank间的高速信号等布线任务;第三类是短线资源,用于完成基本逻辑单元之间的逻辑互连和布线;第四类是分布式的布线资源,用于专有时钟、复位等控制信号线。FPGA中常见的其他资源BlockRAM时钟管理器(DCM)内嵌的硬处理器核内嵌乘法器或MACDSP……FPGA与CPLD的区别大多数FPGA采用SRAM进行功能配置,可重复编程,但系统掉电后,SRAM中的数据丢失。因此,需在FPGA外加EPROM,将配置数据写入其中,系统每次上电自动将数据引入SRAM中。CPLD器件一般采用EEPROM存储技术,可重复编程,并且系统掉电后,EEPROM中的数据不会丢失,适于数据的保密。FPGA与CPLD的区别FPGA器件含有丰富的触发器资源,易于实现时序逻辑,如果要求实现较复杂的组合电路则需要几个CLB结合起来实现。CPLD的与或阵列结构使其适于实现大规模的组合逻辑功能,但触发器资源相对较少。FPGA与CPLD的区别FPGA为细粒度结构(也有人称FPGA为中等粒度),CPLD为粗粒度结构。FPGA内部有丰富连线资源,CLB分块较小,芯片的利用率较高。CPLD的宏单元的与或阵列较大,通常不能完全被应用,且宏单元之间主要通过高速数据通道连接,其容量有限,限制了器件的灵活布线,因此CPLD利用率较FPGA器件低。FPGA与CPLD的区别FPGA为分段式布线,CPLD为连续式布线。FPGA器件在每次编程时实现的逻辑功能一样,但走的路线不同,因此延时不易控制,要求开发软件允许工程师对关键的路线给予限制。CPLD每次布线路径一样,CPLD的连续式互连结构利用具有同样长度的一些金属线实现逻辑单元之间的互连。连续式互连结构消除了分段式互连结构在定时上的差异,并在逻辑单元之间提供快速且具有固定延时的通路。CPLD的延时较小。FPGA与CPLD的区别一般情况下,FPGA集成度更高,内嵌资源丰富,更适合用于大型设计。CPLD集成度较低,但使用相对简单,适合于中小型设计。提纲传统设计方法的困境及其相应解决方案PLD发展简史FPGA基本结构FPGA开发流程FPGA设计中的层次关系与转换关系硬件描述语言及其在FPGA开发中的作用FPGA设计的一般流程设计准备设计输入:原理图硬件描述语言波形图设计处理:优化、综合适配、分割布局、布线器件编程与测试功能仿真时序仿真设计流程(1)--设计准备设计准备设计输入:原理图硬件描述语言波形图设计处理:优化、综合适配、分割布局、布线器件编程与测试功能仿真时序仿真在系统设计之前,首先要进行方案论证、系统设计、器件选择等准备工作。设计人员根据任务要求,如系统的功能和复杂度,对工作速度和器件本身的资源、成本、以及连线的可布性等方面进行权衡,选择合适的设计方案和合适的器件类型。设计流程(2)--设计输入设计准备设计输入:原理图硬件描述语言波形图设计处理:优化、综合适配、分割布局、布线器件编程与测试功能仿真时序仿真将所设计的系统或电路以开发软件要求的某种形式表示出来,并送入计算机的过程称为设计输入。设计输入通常有以下几种形式:原理图输入方式:直观,符合思维习惯;要求设计者具有丰富的硬件知识;效率低,通用性差;硬件描述语言输入方式:效率高,通用性强;不必对底层硬件非常熟悉;波形输入方式:辅助输入方式。设计流程(3)--功能仿真设计准备设计输入:原理图硬件描述语言波形图设计处理:优化、综合适配、分割布局、布线器件编程与测试功能仿真时序仿真功能仿真也叫前仿真。用户所设计的电路必须在编译之前进行逻辑功能验证,此时的仿真没有延时信息,对于初步的功能检测非常方便。仿真前,要先利用波形编辑器和硬件描述语言等建立波形文件和测试向量(即将所关心的输入信号组合成序列),仿真结果将会生成报告文件和输出信号波形,从中便可以观察到各个节点的信号变化。如果发现错误,则返回设计输入中修改逻辑设计。设计流程(4)--设计处理设计准备设计输入:原理图硬件描述语言波形图设计处理:优化、综合适配、分割布局、布线器件编程与测试功能仿真时序仿真设计处理是FPGA设计中的核心环节。在设计处理过程中,编译软件对设计输入文件进行逻辑简化、综合优化和适配,最后产生编程用的编程文件。语法检查和设计规则检查逻辑优化和综合适配和分割布局和布线设计流程(5)--时序仿真设计准备设计输入:原理图硬件描述语言波形图设计处理:优化、综合适配、分割布局、布线器件编程与测试功能仿真时序仿真时序仿真又称后仿真或延时仿真。由于不同器件的内部延时不一样,不同的布局布线方案也给延时造成不同的影响,因此在设计处理以后,对系统和各模块进行时序仿真,分析其时序关系,估计设计的性能,以及检查和消除竞争冒险等是非常有必要的。实际上这也是与实际器件工作情况基本相同的仿真。设计流程(6)--器件编程与测试设计准备设计输入:原理图硬件描述语言波形图设计处理:优化、综合适配、分割布局、布线器件编程与测试功能仿真时序仿真时序仿真完成,经检查结果无误,可用软件产生供器件编程使用的文件。器件的编程就是将编程数据放到相应的FPGA器件中去。现代主流FPGA都支持两种下载方式,一种是采用JTAG接口与PC机相连进行下载;另一种是先将数据存在片外的PROM里,再由PROM和FPGA之间的电路连接根据规定的时序下载到FPGA中。测试方法通常也有两种,一种是通过事先预留的测试管脚将感兴趣的信号线引到电路板上,用示波器、逻辑分析仪等进行测试。另一种方法是用FPGA供应商提供的虚拟逻辑分析仪进行测试。如Xilinx公司的Chipscope。提纲传统设计方法的困境及其相应解决方案PLD发展简史FPGA基本结构FPGA开发流程FPGA设计中的层次关系与转换关系硬件描述语言及其在FPGA开发中的作用现代数字系统设计中的转换关系系统设计的抽象级别在理论上,所有设计工作都可以在siliconlevel上进行设计并实现,但实际开发中是不可行的,不可能在合理的时间内完全在siliconlevel上设计出一个大系统;选择适当的抽象级别可以使我们:在设计中避免考虑过多不必要的细节问题;缩短设计周期;系统设计的域现代数字系统设计既可以在结构域完成,也可以在行为域完成。在行为域进行设计需要借助综合工具转化到结构域,再由其他工具转化到物理域,完成最终设计。FPGA中的设计大部分是用硬件描述语言在行为域实现,但是也经常用到结构域描述。传统的电路设计方法一般是从底层开始,逐步向上元器件-功能模块-电路板-系统Top-Down设计思想系统-电路板-功能模块-子模块-具体实现每一级都可以通过仿真来验证设计,能够及时修改错误。实际的FPGA设计中通常采用的方式是二者的混和。Top-Down设计思想提纲传统设计方法的困境及其相应解决方案PLD发展简史FPGA基本结构FPGA开发流程FPGA设计中的层次关系与转换关系硬件描述语言及其在FPGA开发中的作用硬件描述语言HDLHDL是HardwareDescriptionLanguage的缩写,正式中文名称是“硬件描述语言”。用类似于计算机编程语言的方式描述硬件。HDL并不是“硬件设计语言(HardwareDesignLanguage)”。但是目前经常被用于设计。能进行不同域、不同层次的描述。但是不同的HDL所能描述的层次略有差别。硬件描述语言HDL利用这种语言,可以从上层到下层(从抽象到具体)逐层描述自己的设计思想,用一系列分层次的模块来表示复杂的数字系统。然后,利用电子设计自动化(EDA)工具,逐层进行仿真验证,再把其中需要变为实际电路的模块组合,经过自动综合工具转换到门级电路网表。接下去,再用专用集成电路ASIC或现场可编程门阵列FPGA自动布局布线工具,把网表转换为要实现的具体电路结构。硬件描述语言HDL硬件描述语言的发展至今已有20多年的历史,并成功地应用于设计的各个阶段:建模、仿真、验证和综合等。到20世纪80年代,已出现了上百种硬件描述语言,对设计自动化起到了极大的促进和推动作用。这些语言一般各自面向特定的设计领域和层次,而且众多的语言使用户无所适从。因此,急需一种面向设计的多领域、多层次并得到普遍认同的标准硬件描述语言。20世纪80年代后期,VHDL和VerilogHDL语言适应了这种趋势的要求,先后成为IEEE标准。随着系统级FPGA以及系统芯片的出现,软硬件协调设计和系统设计变得越来越重要。为适应新的情况,出