第2章可编程逻辑器件的设计第2章可编程逻辑器件的设计2.1可编程逻辑器件的设计流程2.2在系统可编程技术2.3边界扫描技术第2章可编程逻辑器件的设计2.1可编程逻辑器件的设计流程可编程逻辑器件的设计是指利用开发软件和编程工具对器件进行开发的过程。高密度可编程逻辑器件的设计流程如图2.1所示,它包括设计准备、设计输入、设计处理和器件编程四个步骤以及相应的功能仿真(前仿真)、时序仿真(后仿真)和器件测试三个设计验证过程。第2章可编程逻辑器件的设计图2.1高密度可编程逻辑器件的设计流程设计准备设计输入·原理图·硬件描述语言·波形图设计处理·优化、综合·适配、分割·布线、布局功能仿真器件编程时序仿真器件测试第2章可编程逻辑器件的设计2.1.1设计准备在对可编程逻辑器件的芯片进行设计之前,首先要进行方案论证、系统设计和器件选择等设计准备工作。设计者首先要根据任务要求,如系统所完成的功能及复杂程度,对工作速度和器件本身的资源、成本及连线的可布性等方面进行权衡,选择合适的设计方案和合适的器件类型。第2章可编程逻辑器件的设计数字系统设计有多种方法,如模块设计法、自项向下(Top―Down)设计法和自底向上设计法等等。自顶向下设计法是目前最常用的设计方法,也是基于芯片的系统设计的主要方法。它首先从系统设计入手,在顶层进行功能划分和结构设计,采用硬件描述语言对高层次的系统进行描述,并在系统级采用仿真手段验证设计的正确性,然后再逐级设计低层的结构。由于高层次的设计与器件及工艺无关,而且在芯片设计前就可以用软件仿真手段验证系统方案的可行性,因此自顶向下的设计方法有利于在早期发现结构设计中的错误,避免了不必要的重复设计,提高了设计的一次成功率。第2章可编程逻辑器件的设计自顶向下的设计采用功能分割的方法从顶向下逐次进行划分。在设计过程中采用层次化和模块化将使系统设计变得简洁和方便。层次化设计是分层次、分模块地进行设计描述。描述器件总功能的模块放在最上层,称为顶层设计;描述器件某一部分功能的模块放在下层,称为底层设计;底层模块还可以再向下分层,这种分层关系类似于软件设计中的主程序和子程序的关系。层次化设计的优点一是支持模块化,底层模块可以反复被调用,多个底层模块也可以同时由多个设计者同时进行设计,因而提高了设计效率;其次模块化设计比较自由,它既适合于自顶向下的设计,也适合于自底向上的设计。第2章可编程逻辑器件的设计2.1.2设计输入设计者将所设计的系统或电路以开发软件要求的某种形式表示出来,并送入计算机的过程称为设计输入。设计输入通常有以下几种方式:1.原理图输入方式这是一种最直接的设计描述方式,它使用软件系统提供的元器件库及各种符号和连线画出原理图,形成原理图输入文件。这种方式大多用在对系统及各部分电路很熟悉的情况,或在系统对时间特性要求较高的场合。当系统功能较复杂时,原理图输入方式效率低,它的主要优点是容易实现仿真,便于信号的观察和电路的调整。第2章可编程逻辑器件的设计2.硬件描述语言输入方式硬件描述语言是用文本方式描述设计,它分为普通硬件描述语言和行为描述语言。普通硬件描述语言有ABEL―HDL#,CUPL等,它们支持逻辑方程、真值表、状态机等逻辑表达方式。行为描述语言是目前常用的高层硬件描述语言,有VHDL和Verilog―HDL等,它们都已成为IEEE标准,并且有许多突出的优点:如语言与工艺的无关性,可以使设计者在系统设计、逻辑验证阶段便确立方案的可行性;第2章可编程逻辑器件的设计又如语言的公开可利用性,使它们便于实现大规模系统的设计等;同时硬件描述语言具有很强的逻辑描述和仿真功能,而且输入效率高,在不同的设计输入库之间转换非常方便。因此,运用VHDL,Verilog―HDL硬件描述语言设计已是当前的趋势。第2章可编程逻辑器件的设计3.波形输入方式波形输入主要用于建立和编辑波形设计文件以及输入仿真向量和功能测试向量。波形设计输入适合用于时序逻辑和有重复性的逻辑函数。系统软件可以根据用户定义的输入/输出波形自动生成逻辑关系。波形编辑功能还允许设计者对波形进行拷贝、剪切、粘贴、重复与伸展,从而可以用内部节点、触发器和状态机建立设计文件,并将波形进行组合,显示各种进制的状态值,还可以通过将一组波形重叠到另一组波形上,对两组仿真结果进行比较。第2章可编程逻辑器件的设计2.1.3设计处理这是器件设计中的核心环节。在设计处理过程中,编译软件将对设计输入文件进行逻辑化简、综合和优化,并适当地用一片或多片器件自动地进行适配,最后产生编程用的编程文件。1.语法检查和设计规则检查设计输入完成之后,在编译过程中首先进行语法检验,如检查原理图有无漏连信号线,信号有无双重来源,文本输入文件中关键字有无输错等各种语法错误,并及时列出错误信息报告供设计者修改;第2章可编程逻辑器件的设计然后进行设计规则检验,检查总的设计有无超出器件资源或规定的限制并将编译报告列出,指明违反规则情况以供设计者纠正。2.逻辑优化和综合化简所有的逻辑方程或用户自建的宏,使设计所占用的资源最少。综合的目的是将多个模块化设计文件合并为一个网表文件,并使层次设计平面化(即展平)。第2章可编程逻辑器件的设计3.适配和分割确定优化以后的逻辑能否与器件中的宏单元和I/O单元适配,然后将设计分割为多个便于适配的逻辑小块形式映射到器件相应的宏单元中。如果整个设计不能装入一片器件时,可以将整个设计自动划分(分割)成多块并装入同一系列的多片器件中去。划分(分割)工作可以全部自动实现,也可以部分由用户控制,还可以全部由用户控制进行。划分时应使所需器件数目尽可能少,同时应使用于器件之间通信的引脚数目最少。第2章可编程逻辑器件的设计4.布局和布线布局和布线工作是在设计检验通过以后由软件自动完成的,它能以最优的方式对逻辑元件布局,并准确地实现元件间的互连。布线以后软件会自动生成布线报告,提供有关设计中各部分资源的使用情况等信息。5.生成编程数据文件设计处理的最后一步是产生可供器件编程使用的数据文件。对CPLD来说,是产生熔丝图文件,即JEDEC文件(电子器件工程联合会制定的标准格式,简称JED文件);对于FPGA来说,是生成位流数据文件(BitstreamGeneration)。第2章可编程逻辑器件的设计2.1.4设计校验设计校验过程包括功能仿真和时序仿真,这两项工作是在设计处理过程中间同时进行的。功能仿真是在设计输入完成之后,选择具体器件进行编译之前进行的逻辑功能验证,因此又称为前仿真。此时的仿真没有延时信息,对于初步的功能检测非常方便。仿真前,要先利用波形编辑器或硬件描述语言等建立波形文件或测试向量(即将所关心的输入信号组合成序列),仿真结果将会生成报告文件和输出信号波形,从中便可以观察到各个节点的信号变化。若发现错误,则返回设计输入中修改逻辑设计。第2章可编程逻辑器件的设计时序仿真是在选择了具体器件并完成布局、布线之后进行的时序关系仿真,因此又称后仿真或延时仿真。由于不同器件的内部延时不一样,不同的布局、布线方案也给延时造成不同的影响,因此在设计处理以后,对系统和各模块进行时序仿真,分析其时序关系,估计设计的性能以及检查和消除竞争冒险等是非常有必要的。实际上这也是与实际器件工作情况基本相同的仿真。第2章可编程逻辑器件的设计2.1.5器件编程编程是指将编程数据放到具体的可编程器件中去。对CPLD器件来说是将JED文件“下载(DownLoad)”到CPLD器件中去,对FPGA来说是将位流数据BG文件“配置”到FPGA中去。器件编程需要满足一定的条件,如编程电压、编程时序和编程算法等。普通的CPLD器件和一次性编程的FPGA需要专用的编程器完成器件的编程工作。第2章可编程逻辑器件的设计基于SRAM的FPGA可以由EPROM或其它存储体进行配置。在系统的可编程器件(ISP―PLD)则不需要专门的编程器,只要一根下载编程电缆就可以了。器件在编程完毕之后,可以用编译时产生的文件对器件进行检验、加密等工作。对于具有边界扫描测试能力和在系统编程能力的器件来说,测试起来就更加方便。第2章可编程逻辑器件的设计2.2在系统可编程技术在系统可编程(In―SystemProgrammable,简称ISP)技术是20世纪80年代末Lattice公司首先提出的一种先进的编程技术。所谓“在系统编程”是指对器件、电路板或整个电子系统的逻辑功能可随时进行修改或重构的能力。这种重构或修改可以在产品设计、制造过程中的每个环节,甚至在交付用户之后进行。支持ISP技术的可编程逻辑器件称为在系统可编程逻辑器件(ISP―PLD)。第2章可编程逻辑器件的设计ISP―PLD不需要使用编程器,只需要通过计算机接口和编程电缆,直接在目标系统或印刷线路板上进行编程。传统的可编程逻辑器件只能插在编程器上先进行编程,然后再装配,而ISP―PLD则可以先装配,后编程。因此ISP技术有利于提高系统的可靠性,便于系统板的调试和维修。第2章可编程逻辑器件的设计2.2.1在系统编程的基本原理ISP技术是一种串行编程技术。下面以Lattice公司的ispLSI器件为例说明其编程原理。ispLSI器件的编程结构如图2.2所示。器件的编程信息数据用E2CMOS元件存储,E2CMOS元件按行和列排成阵列,编程时通过行地址和数据位对E2CMOS元件寻址。第2章可编程逻辑器件的设计图2.2ispLSI器件的编程结构79…高位移位寄存器…0159…低位移位寄存器…80数据输入(SDI)SDOE2CMOS存储阵列95…地址移位寄存器0…SDISDO数据数据第2章可编程逻辑器件的设计编程的寻址和移位操作由地址移位寄存器和数据移位寄存器完成。两种寄存器都按F1F0(先入先出)的方式工作。数据移位寄存器按低位字节和高位字节分开操作。由于器件是插在目标系统中或线路板上进行编程,因此在系统编程的关键是编程时如何使芯片与外系统脱离。从图2.3所示的编程接口可以看到,计算机和ISP―PLD的编程接口有五根信号线,它们起到了传递编程信息的作用。其中是编程使能信号。ispEN1第2章可编程逻辑器件的设计器件为正常工作状态,时,器件所有的I/O端被置成高阻状态,因而割断了芯片与外电路的联系,避免了被编程芯片与外电路的相互影响。SDI向串行移位寄存器提供编程数据和其它命令;SDO为数据输出线;MODE为编程状态机的控制线;SDI同时为模式控制线,同MODE一起为编程状态机的控制线;SLCK为串行时钟线。ispEN0第2章可编程逻辑器件的设计图2.3编程连接口ispLSIispENSCLKMODESDISDO第2章可编程逻辑器件的设计图2.4ISP编程操作状态转移图移位态(取指令)闲置态(空操作)执行态(执行指令)HHHLHLHHHH移出IDL×取指令L×取指令L×L×MODESDI第2章可编程逻辑器件的设计SDI具有双重功能:首先是作为器件的串行移位寄存器的数据输入端;其次它与MODE一起作为编程状态机的控制信号。SDI的功能受MODE控制。当MODE为低电平时,SDI作为移位寄存器的串行输入端;当MODE为高电平时,SDI为编程状态机的控制信号。ISP状态机共有三个状态:闲置态(IDLE)、移位态(SHIFT)和执行态(EXECUTE),其状态转移如图2.4所示。第2章可编程逻辑器件的设计ispLSI器件内部设有控制编程操作的时序逻辑电路,其状态受MODE和SDI信号的控制。器件进入ISP编程模式时,闲置态是第一个被激活的状态。在编程模式、器件空闲或读器件标识时(每一个类型的ISP器件都有唯一的八位标识码ID),状态机处在闲置态。当MODE和SDI都置为高电平,并且在ISP状态机处在时钟沿时,状态转移到命令移位态。移位态主要是把指令装入状态机。在移位态下,当MODE处于低电平时,SCLK将指令移进状态机。第2章可编程逻辑器件的设计一旦指令装进状态机,状态机就必须转移到执行态,以执行指令,将MODE和SDI均置为高电平,状态机就从移位态转移到执行态。如果需要使状态机从移位态转移到闲置态,则将MODE置为高电