SOPC开发流程SOPC设计包括以Nios II软核处理器为核心的嵌入式系统的硬件配置、硬件设计、硬件 仿真、IDE环境的软件设计、软件调试等。SOPC系统设计的基本软件工具包括Quartus II, 用于完成Nios II系统的分析综合、硬件优化、适配、配置文件编程下载以及硬件系统测试等;Qsys,它是Nios II软核处理器的开发包,用于实现Nios II系统配置、生成以及与 Nios II系统相关的监控和软件调试平台的生成;ModelSim,用于对Qsys生成的 NiosII的HDL描述语言程序进行系统功能仿真; matlab/DSP Builder,用于生成Nios II系统的硬件加速器,进而为Nios II系统定制新的指令;Nios II IDE,用于完成基于Nios II系统的软件开发和调试,并可借助其自带的Flash编程器完成对Flash以及EPCS的编程操作,此外Nios II IDE还包括一个指令集成模拟器、Microc/OS - II实时操作系统、文件系统以及小型 TCP/IP 协议栈。 SOPC的开发过程中要使用到Quartus II、Qsys以及Nios II IDE,三者之间关系如图2. 1所示。 SOPC的开发流程通常包括2个方面:基于Quartus II、Qsys的硬件设计,基于 Nios II IDE的软件设计。对于比较简单的Nios II系统,一个人便可执行所有设计;对于比较复杂的系统,硬件和软件设计可以分开进行。 硬件开发硬件开发使用Quartus II和Qsys。硬件设计工作如下: (1)用Qsys软件从Nios II处理器内核和Nios II开发套件提供的外设列表中选取合适的CPU、存储器以及各外围器件(如片内存储器、PIO、定时器、UART、片外存储器接口等),并定制和配置它们的功能;分配外设地址及中断号;设定复位地址;最后生成系统。用户也可以添加用户自身定制指令逻辑到Nios II内核以加速CPU性能,或添加用户外设以减轻CPU的任务。 (2)使用Qsys生成Nios II系统后,将其集成到整个Quartus II工程中。可以在Quartus II工程中加入Nios II系统以外的逻辑,大多数的SOPC设计都包括NioslI系统以外的逻辑,这也是SOPC系统的优势所在。用户可以集成自身定制的硬件模块到SOPC设计,或集成从Altera或第3方IP供应商中得到的其它现成知识产权设计模块。 (3)使用Quartus II软件来选取具体的Altera FPGA器件型号;然后为Nios II系统上的各I/O口分配引脚,另外还要根据要求进行硬件编译选项或时序约束的设置;最后编译Quartus II工程,在编译过程中Quartus II将对Qsys生成系统的HDL设计文件进行布局布线,从HDL源文件综合生成一个适合目标器件的网表,生成FPGA配置文件(.sof)。 (4)使用Quartus II编程器和Altera下载电缆(如USB Blaster),将配置文件(用户定制的Nios II处理器系统的硬件设计)下载到目标板上。当校验完当前硬件设计后,可将新的配置文件下载到目标板上的非易失存储器里(如EPCS器件)。下载完硬件配置文件后,软件开发者就可以将此目标板作为软件开发的初期硬件平台进行软件功能的开发验证了。 2.1.2软件开发软件开发使用Nios II IDE。它是一个基于Eclipse IDE构架的集成开发环境,包括: Ø GNU开发工具(标准GCC编译器、连接器、汇编器和makefile工具等); Ø 基于GDB的调试器,包括软件仿真和硬件调试; Ø 提供用户一个硬件抽象层HAL(HardwareAbstrac tion Layer); Ø 提供嵌入式操作系统MicroC/OS-II和LwTCP/IP协议栈的支持; Ø 提供帮助用户快速入门的软件模板; Ø 提供 Flash 下载支持(FlashProgrammer 和Quartus II Programmer) 熟悉Linux下GNU开发工具的开发者基本上可以毫无困难地使用Nios II IDE。 使用Nios II IDE,可完成Nios II处理器系统的所有软件开发任务。使用Qsys 生成系统后,可以直接使用Nios II IDE开始设计C/C+ +应用程序代码。Altera提供外设驱动程序和硬件抽象层(HAL),使用户能够快速编写与低级硬件细节无关的Nios II程序。除了应用代码,用户还可以在Nios II IDE工程中设计和使用定制库。 如果没有软件开发的目标板,可以通过Nios II指令集仿真器(ISS)运行和调试代码;ISS 可仿真处理器、存储器和stdin/stdout/stderr流,使用户可以检验程序流和算法正确性。一旦有一个目标板,用户就可以使用下载电缆(如USB Blaster)下载软件到目标板进行调试/运行。
2.1.3 SOPC基本幵发流程简介在开始进行SOPC设计前,让我们先了解一下SOPC系统的基本开发流程。图2.2所示为基于Nios II系统的SOPC开发流程。 参照图2.2说明SOPC基本的开发流程如下: 1) 在进行SOPC开发之前,首先必须确定系统的需求,如应用系统需要的计算性能、带宽和吞吐量、接口类型以及是否需要多线程的软件等。完整的基于Nios II的SOPC系统是一个软硬件复合的系统。在开发时,可分为硬件和软件两个部分,但在实际设计过程中,有时候所需要的功能既可以用软件也可以用硬件来实现。具体采用什么方式,要根据系统设计要求来权衡。一般来说,用软件实现时,在设计上容易修改或者增删,査错也比较容易,又几乎不增加占用的逻辑资源,但执行速度较慢。所以,在设计规划时,在满足性能的前提下,优先考虑软件实现。 2) 每个开发过程开始时都应建立一个工程,Quartus II是以工程的方式对设计过程进行管理的。在工程中建立顶层模块文件.bdf,其将整个工程的各个模块包容在里面,编译的时候就将这些模块整合在一起。这个顶层文件相当于传统 电路设计中的电路板( PCB)。 3) 在Qsys中添加需要的功能模块(Nios II及其标准外设模块),完成后生成一个系统模块。如果需要,用户可以定制指令和外设逻辑。由Qsys最终生成的系统模块相当于传统的 单片机或ARM。 4) 如果需要,可以使用Altera公司提供的LPM功能模块。Quartus II包含了大量常用功能模块(如计数器、累加器、比较器、译码器等),使用这些模块能大大加快开发的速度。一般来说,一个设计只有很少部分的模块需要自己从零设计。LPM功能模块相当于传统设计中除处理器以外的逻辑芯片(如74系列)。 5) 如果需要,建立自己的功能模块。当设计中现有的模块功能不能满足设计要求时,要求用户自己设计。可以用硬件描述语言,也可以用原理图的输入方法来设计自己的功能模块。设计自己的功能模块时,可以作为一个独立的工程来设计,并生成模块符号(Symbol),然后将源文件(实现该模块的原理图或HDL文件)拷贝到顶层模块所在的工程目录下,这样在顶层模块中就可以使用这个自定义模块的符号。使用自定义功能模块,相当于在传统设计中,市面上买不到某种芯片而去定做芯片。 6) 在顶层模块中,分别将Qsys生成的系统模块、LPM功能模块以及用户自定义功能模块添加到顶层模块中,然后将各个功能模块用连线连起来组成系统功能原理图。这个过程类似传统电路设计中,将所有要使用到的芯片焊接到电路板上,然后通过PCB上的连线将各个芯片连接起来,组成电路系统。 7) 为系统功能原理图选择芯片载体并为各个输入/输出信号分配芯片的引脚。 8) 设置编译选项,从而让编译器按照用户设定来进行编译。 9) 编译系统,生成硬件系统的配置文件.sof和.pof。编译系统是一个非常复杂的过程,包括优化逻辑的组合、综合逻辑、适配FPGA、布线以及时序分析等步骤。 10) 打开Nios II IDE软件进行用户程序开发。当然这1步也可以在Qsys生成系统模块后立即进行。这个过程与传统嵌入式系统的软件开发类似, 唯一的不同在于,软件所运行的嵌入式系统是自己定制的、裁剪过的,因此可能受硬件的局限会小一些。 11) 对用户软件进行编译,生成可执行文件.elf。 12) 可以在IDE的指令集仿真器(ISS)上仿真软件和运行/调试软件。 13) 将配置文件.sof下载到FPGA,将可执行文件.elf下载到RAM(外部或内部)。 14) 在目标板上调试软件,直到硬件和软件设计都达到设计要求。 15) 利用IDE的编程工具将配置文件烧写到FPGA的配置芯片或Flash。将可执行文件 .elf 编程到 Flash。
|