第1章 基于Nios Ⅱ处理器的嵌入式系统
1.1 片上系统概述
数字电路高度集成化是现代电子发展的大势所趋,片上系统(SOPC)的概念也就应运而生。它是指在单个芯片上集成一个完整的系统,一般包括系统级芯片控制逻辑模块、微处理器/微控制器内核模块、数字信号处理器模块、存储器或存储器控制模块、与外部通信的各种接口协议模块、含有ADC/DAC的模拟前端模块、电源及功耗管理模块,它是一个具备特定功能、应用于特定产品的高度集成电路。
片上系统其实就是系统小型化的代名词。如图1.1所示,一个相对复杂的系统采用传统的设计方案可能需要一个CPU做整体控制,一个FPGA做接口的逻辑粘合和一些信号的预处理,还需要一个DSPs做复杂的算法实现,Flash和SDRAM分别作为程序存储器和数据缓存器,此外还会有一些专用的外设模块,这些器件都放置在一块或者数块电路板上。这样一个系统显得相当繁杂,不仅调试难度大,而且系统维护也不方便。
图1.1 传统的复杂系统
基于FPGA的片上系统提出了这样一种解决方案:如图1.2所示,FPGA内部集成了CPU、DSPs以及各种接口控制模块,对有些存储量要求不大的系统甚至集成了外部的Flash和SDRAM。
图1.2 基于FPGA的片上系统
可以看出,SOPC就是一颗比MCU更强大的MCU。它的伟大之处在于系统的完全自主定制性,有了SOPC,设计者就不需要再拿着选型手册海选既必须具有这个外设又必须满足那个条件的处理器了;甚至有时都不需要考虑处理器都能够挂上什么样的存储器来读写数据、运行程序。只要有SOPC,一切就能轻松搞定,想加什么外设就加什么,一切由你做主。这就是SOPC相对于以往的嵌入式系统设计最大的特点和优势。
SOPC需要一个强大的系统开发工具。Altera的FPGA开发工具Quartus Ⅱ中集成的Qsys可以帮助用户定义并生成一个完整的片上可编程系统(System-on-Programmable-Chip),它比传统的手动集成方式要方便得多。Qsys中可以添加各种Altera FPGA器件可以使用的硬核或软核处理器、常用外设以及用户自定义的定制外设,非常灵活方便。Qsys使用起来就如同小朋友们的乐高积木一样简单,并没有传说中的那么“高深”,只要大家跟着教程一步一个脚印往下走,相信大家很快就可以玩转基于Qsys的Nios Ⅱ嵌入式处理器系统。
用户可以使用Qsys生成一个基于Nios Ⅱ处理器的嵌入式系统。然而,Qsys远不止一个Nios Ⅱ处理器而已,它还可以生成一个不包含处理器或者包含Nios Ⅱ以外的软核处理器的系统。
使用传统的设计方法,用户必须手动编写HDL代码用于连接各个子系统。而使用Qsys,用户只要通过傻瓜的图形界面接口(GUI)就可以自动生成各个组件的互连逻辑。Qsys生成了系统所有组件的HDL文件,顶层的HDL文件则例化好系统的所有组件。Qsys既能够生成Verilog代码也能够生成VHDL代码。
再看一个更接近实际应用的嵌入式系统板卡,如图1.3所示。在这块PCB(Printed Circuit Board)上,单论芯片可能只有一片FPGA、一片作为协处理器(Co-Processor)的CPU、两片DDR2 SDRAM存储器分别挂在FPGA和协处理器上,还有一个叫作总线桥(Bus Bridge)的接口(也许只是简单的连线,也许是一块协议芯片)。这个系统中,看似简单,其实不然,FPGA里大有文章可做。
从总线桥开始说,通俗地理解,桥就是用来连接河两岸的,比如主板上的南桥和北桥(CPU和内存居然还隔着条河?)。CPU很好很强大,可以处理海量数据,但是再强大也没法发出声音、显示图像,术业有专攻,CPU就是负责数据运算和控制,别的基本不管。因此,CPU需要通过桥和外围设备进行信息交互,把需要进行处理的数据接收进来,把处理完的数据发送出去,可能说得不是很专业,但是基本就是这样。那么总线又是什么?CPU的引脚终归是有限的,如果一个CPU要和所有外设都搭个“独木桥”,恐怕CPU要像巴掌那么大才够在肚子底下容下那么多“脚”了。这么看,这个桥真不能是独木桥,至少该是一座纵横南北的“立交桥”,再形象一点说,这座立交桥的交错中心点是贯通的,处于这个中心点的车可以通过处于任何高度的道路驶向四面八方。那么,CPU就处于这样的核心位置。这里不再深入,总线其实就是CPU的一组满足一定协议的引脚的集合,这组引脚可以和多个同样满足这个特定协议的不同外设进行连接。当CPU要用这个总线和某个外设交互信息时,就会在它们之间搭起一座独木桥,其他外设就只能望桥兴叹。总线从某种意义上看就是为了节约引脚而出现的,当然从另一种意义上看,也是为了统一信息交互方式。这里FPGA外面挂了个“总线桥”,用于这个系统和外部设备交互,其实FPGA内部的SOPC也有个总线桥,它的名字叫作Avalon,Avalon总线,以后大家越使用它越会发现它的强大。上面提到Nios Ⅱ只是一个处理器,而Avalon总线就是要把Nios Ⅱ和所有其他在FPGA内(如图1.3中的PIO)甚至FPGA外定制的外设(如图1.3中的DDR2存储器)连接起来。当然也可以理解那个系统互连逻辑(System Interconnect Fabric)就是Avalon,但是Avalon只是系统互连逻辑的一种形式而已,想了解其他的形式就得读者自己参考数据手册。
图1.3 FPGA上的SOPC系统实例
其实FPGA系统内和常见的嵌入式系统的架构有着异曲同工之妙,比如协处理器(Co-Proccessor)外面和系统模块(System Module)内的32位处理器(Proccessor,可认为它就是Nios Ⅱ)一样,要挂接DDR2存储器(Memory)。
图1.3中的系统里最核心的东西就是FPGA。用FPGA搭一个SOPC的最大优势,就是灵活性。传统的51单片机系统常常是一个MCU旁边挂很多诸如74xxx的芯片,而当16位、32位CPU在嵌入式系统中大行其道的时候,用户依然常常困扰于系统扩展的各种接口之间无法有效的得到控制和管理,甚至会感觉引脚数量受限,大大影响了系统的性能和扩展升级。因此,基于FPGA的SOPC被推上前台。因为它有足够的引脚,支持各式各样不同的电压标准,可以并行处理各类复杂任务,可以像一张白纸任大家涂画……这就是大家学习它的理由。其实图1.1和图1.2已经完全阐释了FPGA上SOPC与以往系统的不同,基本上一片FPGA就可以集成大多数常用的外设,无论从BOM成本上还是电路板面积上都有很大的优势。