1. 引言:
NIOSII系列软核处理器是Altera公司的第二代FPGA(可编程门阵列)嵌入式处理器,主要利用了SOPC(System on a programmable chip)技术,通过将包括32位高性能处理器在内的多种应用模块嵌入到一个通用的FPGA/CPLD(复杂的可编程逻辑控制器件)内,实现一个完全可重置的嵌入式系统。
嵌入式系统SOC,可基于现场FPGA/CPLD或专用集成电路(ASIC).SOPC片上可编程系统是Altera公司提出来的一种灵活、高效的解决方案,它将处理器、存储器、I/O端口、网络接口等系统设计需要的东西集成到一个PLD(可编程逻辑器件)器件上,构建成一个可编程的片上系统,具有灵活的设计方式,可裁减、可扩充、可升级,具备软硬件在系统可编程的功能.SOPC技术中以Nios为代表的RISC(精简指令集)处理器IP核以及用户以HDL语言开发的逻辑部件,可以最终综合到一片FPGA 芯片中,实现真正的可编程片上系统。
在嵌入式SOPC系统中,由于处理器设计、器件性能、系统外设等原因,整体性能比较差,提高嵌入式系统性能,成为嵌入式系统发展的
一个趋势。为此,Altera提供了多处理器支持,但在
SMP(对称多处理器)构架下,并没有解决缓冲区一致性问题,本文对此提出了解决方案,并对上层软件设计的关键问题提出了解决方法。
2. NiosII与 Avalon总线
NiosII是一种32位、哈佛结构、5级流水线的RISC处理器,它有32个32位通用寄存器和5个32位控制寄存器,支持缓存、中断、自定义指令,外部数据和地址总接口使用简单的Avalon总线,指令支持算术运算,关系运算,逻辑运算,移位运算,系统内集成UART、PIO、SPI、时间控制器、网卡等IP核,性能可超过150 MIPS。系统具有可编程性、可扩展性等灵活特点[3]。
Avalon总线是一种相对简单的总线结构,用于连接处理器与外设,以构成可编程单芯片上系统。它描述了主从构件间的端口连接关系,以及构件间通信的时序关系。Avalon总线在主设备和从设备之间能够实现字节、字、长字数据传输,总线也支持高级特征,如延迟设备、流设备、多主设备,这些高级特征保证多个数据单元在单一总线交易期间在外围设备间传输。Avalon主设备和从设备之间相互作用,且没有技术上的关联性,称之为从侧仲裁。如果多个主设备试图同时访问同一个主设备,从侧仲裁决定哪一个主设备获得访问从设备。如图:

3. 硬件架构设计
目前,大多数 SMP系统的处理器通过高速监听总线(snoopy bus)连接处理器和共享存储器,由于争用共享总线和争用共享存储器,从而限制了总线型的 SMP 系统中处理器的数目。为了解决此问题,现在的 SMP 系统基本上都采用增大高速缓存容量的方法来减少抢占内存,因为高速缓存是处理器的“本地内存”,它与处理器之间的数据交换速度远远高于内存总线速度,又由于高速缓存不支持共享,这样就不会出现多个处理器抢占同一段内存资源的问题了,许多数据操作就可以在处理器内置的高速缓存或外置的高速缓存中顺利完成。然而,高速缓存的作用虽然解决了SMP系统中的抢占内存问题,但又引起了另一个较难解决的缓冲区一致性问题。其解决方法分为两类:目录协议、监听协议。
从上节对Avalon总线介绍可知,Avalon总线是由系统自动生成的,内部集成了仲裁器,用户无法监控总线上的信号,那么传统的目录协议、监听总线协议将不适用于此系统。为此,必须对其改进。文献1提出解决方案,其设计思想:监听从设备端的读写信号,当发生写时,锁存地址,并中断所有CPU,CPU根据ISR确定缓冲区中的无效行。
在CCM(cache coherency module)模块设计时,根据具体需要来设计。方案1是根据监听片外资源数来确定监听FIFO的数量、多CPU共享同一中断源[1]。方案2是根据CPU的数量来设置监听FIFO的数量、独占中断源。在这里采用了方案2,其主要是基于以下几点:所有的CPU享有独立的中断源、提供多CPU交互功能、提供了各个CPU的并行性。在方案1中,使得任一CPU都要进行同一ISR的处理,则最佳情况下为24条指令周期(这里指进入ISR程序以后),最坏情况下需要8+16N条指令,N代表监听总线上发生的次数。方案2在双核的情况下与方案1的资源占用相同,且在设计、调试等方面都比较快捷、方便。下面给出其结构框图:

CCM模块主要解决缓冲区一致性问题,并且提供多CPU之间中断功能。MUTEX为NIOS提供的组件,它提供一种基于硬件的原子测试-设置(test-and-set)操作,其主要功能是解决多个CPU争用共享设备。RAM1、RAM2分别为CPU1、CPU2所独占,SRAM及其它外设为共享设备。