随着计算机与微电子技术的发展电子设计自动化EDA(Electronic Design Automation)和可编程逻辑器件PLD(Programmable Logic Device)的发展都非常迅速熟练地利用EDA软件进行PLD器件开发已成为电子工程师必须掌握的基本技能先进的EDA工具已经从传统的自下而上的设计方法改变为自顶向下的设计方法以硬件描述语言HDL(Hardware Description Language)来描述系统级设计并支持系统仿真和高层综合ASIC(Application Specific Integrated Circuit)的设计与制造电子工程师在实验室就可以完成这都得益于PLD器件的出现及功能强大的EDA软件的支持现在应用最广泛的高密度PLD器件主要是现场可编程门阵列FPGA(Field Programmable Gate Array)和复杂可编程逻辑器件CPLD(Complex Programmable Logic Device) EDA软件方面大体可以分为两类 ① PLD器件厂商提供的EDA工具较着名的如Altera公司的 Max+plus II和Quartus IIXilinx公司的Foundation SeriesLaticeVantis公司的ispEXERT System ② 第三方专业软件公司提供的EDA工具常用的综合工具软件有Synopsys公司的FPGA Compiler IIExemplar Logic公司的LeonardoSpectrumSynplicity公司的Synplify第三方工具软件是对CPLD/FPGA生产厂家开发软件的补充和优化如通常认为Max+plus II和Quartus II对VHDL/Verilog HDL逻辑综合能力不强如果采用专用的HDL工具进行逻辑综合会有效地提高综合质量 PLD器件的开发 CPLD/FPGA设计越来越复杂使用硬件描述语言设计可编程逻辑电路已经成为大势所趋目前最主要的硬件描述语言是VHDL(Very High Speed Integrated Circuit HDL)和Verilog HDL两种语言都已被确定为IEEE标准 用VHDL/Verilog HDL语言开发可编程逻辑电路的完整流程为 ① 文本编辑用任何文本编辑器都可以但通常在专用的HDL编辑环境中进行因为专业的集成开发环境通常提供各种结构模板并且可以自定义各种要素(例如关键字字符串注释等)的色彩显示提高可读性提高输入效率 ② 功能仿真将文件调入HDL仿真软件进行功能仿真检查逻辑功能是否正确 ③ 逻辑优化与综合将源文件调入逻辑综合软件进行逻辑分析处理即将高层次描述(行为或数据流级描述)转化为低层次的网表输出(寄存器与门级描述)逻辑综合软件会生成EDIF(Electronic Design Interchange Format)格式的EDA工业标准文件这步在PLD开发过程中最为关键影响综合质量的因素有两个即代码质量和综合软件性能 ④ 适配与分割如果整个设计超出器件的宏单元或I/O单元资源可以将设计划分到多片同系列的器件中 ⑤ 装配或布局布线将EDIF文件调入PLD厂家提供的软件中进行装配(对于CPLD)或布局布线(对于FPGA)即将设计好的逻辑写入CPLD/FPGA器件中 ⑥ 时序仿真即延时仿真由于不同器件不同布局布线给延时造成的影响不同因此对系统进行时序仿真检验设计性能消除竞争冒险是必不可少的步骤 利用VHDL语言进行PLD设计开发的基本流程如图所示如果选用Altera公司CPLD器件作为目标器件上述过程可以在Altera公司提供的 Max+plus II或Quartus II集成开发环境中完成但如果选用专用的EDA综合工具作为补充完成逻辑优化与综合设计质量会更好第三方综合软件的主要功能就是对HDL语言的源文件进行逻辑综合生成edf的EDA工业标准文件然后在PLD厂家提供的开发软件中调入edf文件进行编译仿真器件编程等过程最终完成整个设计针对Altera公司CPLD器件我们选用Quartus II + LeonardoSpectrum的EDA组合开发方式更重要的是广大学习爱好者可以在网站免费获得下面对两款软件作简要介绍 Quartus II软件的应用 Quartus II是Altera公司的第四代可编程逻辑器件集成开发环境提供从设计输入到器件编程的全部功能 Quartus II可以产生并识别EDIF网表文件VHDL网表文件和Verilog HDL网表文件为其它EDA工具提供了方便的接口可以在Quartus II集成环境中自动运行其它EDA工具 利用Quartus II软件的开发流程可概括为以下几步设计输入设计编译设计定时分析设计仿真和器件编程 ()设计输入 Quartus II软件在File菜单中提供New Project Wizard…向导引导设计者完成项目的创建当设计者需要向项目中添加新的VHDL文件时可以通过New选项选择添加 ()设计编译 Quartus II编译器完成的功能有检查设计错误对逻辑进行综合提取定时信息在指定的Altera系列器件中进行适配分割产生的输出文件将用于设计仿真定时分析及器件编程 图 LeonardoSpectrum软件Advanced FlowTabs界面 ① 首先确定软件处于Compile Mode可以通过Processing菜单进行选择 ② 在Processing菜单中选择Compiler Settings项如图所示可以进行器件选择模式设定综合和适配选项设定及设计验证等 ③ 单击Processing菜单下的Start Compilation 项开始编译过程 ④ 查看编译结果如图所示我们可以得到详细的编译报告 ()设计定时分析 单击Project菜单下的Timing Settings…选项可以方便地完成时间参数的设定Quartus II软件的定时分析功能在编译过程结束之后自动运行并在编译报告的Timing Analyses文件夹中显示如图所示其中我们可以得到最高频率fmax输入寄存器的建立时间tSU引脚到引脚延迟tPD输出寄存器时钟到输出的延迟tCO和输入保持时间tH等时间参数的详细报告从中可以清楚地判定是否达到系统的定时要求 ()设计仿真 Quartus II软件允许设计者使用基于文本的向量文件(vec)作为仿真器的激励也可以在Quartus II软件的波形编辑器中产生向量波形文件(vwf)作为仿真器的激励波形编辑方式与MAX+PLUS II软件的操作相似在Processing菜单下选择Simulate Mode选项进入仿真模式选择Simulator Settings…对话框进行仿真设置在这里可以选择激励文件仿真模式(功能仿真或时序仿真)等单击Run Simulator 即开始仿真过程 ()器件编程 设计者可以将配置数据通过MasterBlaster或ByteBlasterMV通信电缆下载到器件当中通过被动串行配置模式或JTAG模式对器件进行配置编程还可以在JTAG模式下给多个器件进行编程利用Quartus II软件给器件编程或配置时首先需要打开编程器(在New菜单选项中选择打开Chain Description File)在编程器中可以进行编程模式设置(Mode下拉框)硬件配置(Programming Hardware对话框)及编程文件选择(Add File…按钮)将以上配置存盘产生cdf文件其中存储了器件的名称器件的设计及硬件设置等编程信息当以上过程正确无误后单击Start按钮即可开始对器件进行编程配置 LeonardoSpectrum软件的应用 LeonardoSpectrum是Mentor Graphics的子公司Exemplar Logic的专业VHDL/Verilog HDL综合软件简单易用可控性较强可以在LeonardoSpectrum中综合优化并产生EDIF文件作为QuartusII的编译输入该软件有三种逻辑综合方式Synthesis Wizard(综合向导)Quick Setup(快速完成)Advanced FlowTabs(详细流程)方式三种方式完成的功能基本相同Synthesis Wizard方式最简单Advanced FlowTabs方式则最全面该方式有六个选项单如图所示分别完成以下功能器件选择设计文件输入约束条件指定优化选择输出网表文件设置及选择调用布局布线工具 以上每步操作都提供相应的帮助简单明了需要注意的是在输入设计文件时要正确排列文件的次序将底层文件放在前面顶层文件放到后面这样LeonardoSpectrum软件才能正确地建立数据信息库综合完成后可以将输出网表文件 (EDF)作为MAX+PLUS II或Quartus II的设计输入文件再完成编译仿真定时分析和器件编程等步骤完成整个系统的设计过程 (A)(B)(C)(D) VHDL编码方式对综合质量的影响 VHDL语言支持全部的仿真功能但并不是全部可综合的VHDL程序的许多硬件描述和仿真结构没有对应的数字电路来实现还有些描述在理论上可以映射为对应的数字电路但是却不能保证其精确性比如延时模型随着综合算法技术水平的提高针对某些寄存器传输级RTL(Register Transfer Level)电路描述可以进行有效的优化但是对于更普遍的电路描述这还不够因此综合结果是否满足给定的时间约束条件和面积约束条件还取决于VHDL编码方式下面给出几点经验相信对提高综合质量有所帮助与启发 ()资源共享 例如下面的两段代码中(A)需要个加法器而完成同样的功能略做修改(B)只需要个加法器有效地减少了使用面积 适当地利用圆括号进行重新组合有时也可以实现资源的共享如下面两段代码(C)和(D)(D)中输入信号b和c即可实现加法器的共享 ()使用带范围限制的整数 在VHDL中无约束整数的范围是~+这意味着至少需要位来表示但通常这会造成资源的浪费有些综合软件会自动优化但所消耗的时间是相当可观的因此如果不需要全范围的整型数据最好指定范围例如 signal small_int : integer range downto ; small_int在本例中只需要位而不是位有效地节约了器件面积 ()使用宏模块 当在VHDL中使用算术逻辑关系逻辑等通用逻辑结构时多数EDA开发软件及专用综合工具通常包含针对特定工艺的优化宏模块供我们选择从功能上可分为时序电路宏模块运算电路宏模块和存储器宏模块具有很高的执行效率使得综合结果面积更小频率更高所需编译时间更短当然它们是针对特定工艺的这将使VHDL程序依赖于具体的器件系列影响移植性 (E)(F) ()高级设计优化 上述几种方法是在没有改变其功能性的情况下进行综合优化的有时候我们可以在不妨碍设计规格约束的前提下稍微改变其功能来提高综合效率参考下面两个例子(E)和(F) 在(E)中综合工具建立递增计数器和完整的比较器在(F)中综合工具建立递减计数器和对于常数零的比较器由于和常数作比较更易于实现且占用逻辑单元更少因此(F)程序更高效 另外由于综合工具只能支持VHDL的子集为保证在综合前后的仿真保持相同以下语句在综合中应该避免使用 ◇ 避免使用 wait for xx ns这种语句不会被综合为实际的电路元件 ◇ 避免使用after xx ns在综合工具进行综合时会忽略after语句 ◇ 避免在信号和变量声明时赋初值因为大部分综合工具会忽略初始化语句如果使用初始化语句那么综合的结果和仿真的结果将会产生差异 功能强大的EDA开发软件和专业的综合工具的不断发展使PLD设计或ASIC 设计过程更简单更快捷但是要提高设计质量编程方式仍然起着至关重要的作用需要我们在实践中不断摸索积累经验提高设计水平 |