- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
NiosII多核处理器之间通信技术的研究
引言
随着应用领域的扩大,人们对微处理器系统的性能、功耗和成本提出了越来越严格的要求。单纯依靠提升时钟的方法已经不能满足需要,在移动通信、军事应用、消费电子、智能控制设备等领域,多核处理器的解决方案成为一种主流趋势。
Altera公司在其FPGA中实现的NiosII处理器是一个用户可配置的通用32位RISC软核微处理器,Nios II 5.0及其以上版本支持多处理器系统的创建和调试。Nios II多处理器,除了软核本身超过200DMIPS的高性能之外,Altera开发用于Nios/NiosII处理器的Avalon参数化接口总线具有友好的多主从仲裁能力,可以有效地实现系统资源共享。在清华-Altera联合实验室的支持下,笔者对NiosII多核处理器之间共享通信的几种可行方案进行研究,并且在自行设计的NiosII开发板上完成设计测试验证,分析比较各种方案的技术特点、优势与不足,提供给不同系统的应用者参考。
NiosII多核间几种可行的通信方案
双口RAM和PIO核的多核中断通信方案
双处理器可采用一个双口RAM和中断信号通过定义某种信息数据结构来进行通信。在NiosII双处理器系统,可以采用FPGA中实现的片上双口RAM和通用IO组件PIO核来实现多核中断通信。通信的中断信号使用PIO组件产生和接收,双核通信的连接如图1所示。由于Avalon总线具有多主从仲裁能力,同一外设可以同时挂载在不同软核上,有访问竞争时由总线自己仲裁决定哪个主方取得从设备访问权,双口RAM和单口RAM均可以通过Avalon总线挂载在多个NiosII软核上,二者的区别在于:双口RAM设备有两套从端口被Avalon总线当作两个设备,双核可以同时对其进行读操作;单口RAM只有一套从端口被Avalon总线当作一个设备,多核对其的读写操作是分时进行的。
这里设计双核通过双口RAM和PIO中断进行通信的例程。设计信息交换的数据结构share_msg_buf如表1所示。安装中断程序及终端服务例程如图2所示。
通信的关键在于消息标志flag状态的定义:NO_DATA-内存空闲、DATA_IN-有新消息写入、DATA_OUT-新消息已送出,单个软核处理器在存储器空闲(NO_DATA状态)或者有消息进入(DATA_IN状态)将新消息读走之后才能在存储区写入新的消息数据;在自己发的消息还未被对方接收(DATA_OUT状态)时,不做处理,返回继续等待对方接收消息。标志状态的定义从软件上实现了双核对双口RAM的互斥访问,有效防止双核对共享数据的破坏。这种通信方案经过笔者的NiosII双核系统验证测试,消息接收正确。
互斥硬核和共享存储的多核查询通信方案
Altera在SOPC Builder工具箱中提供具有Avalon接口的互斥硬核Mutex组件来协调共享资源的访问。Mutex核提供一个基于硬件的原子测试和置位(test-and-set)操作,允许多处理器环境下决定软核对Mutex核的使用权,使用Mutex核就可实现多核对相应共享资源(如存储器)的互斥访问。这样多核的通信就可以舍弃双口RAM,使用片上RAM或者片外存储器作为共享存储器,采用查询方式实现。双核通信的设备连接如图3所示,与双口RAM不同,这里的片上RAM仅作为一个设备挂载到Avalon总线上。
Altera提供NiosII HAL环境下对Mutex核访问的函数:打开、加锁、解锁、判断Mutex属主等。使用Mutex核控制片上RAM,单个软核每次对片上RAM操作之前都要首先取得Mutex核所有权,操作完之后应立即放弃对Mutex核的所有权,避免单个软核对Mutex核及共享资源的独占。采用前面表所定义的数据结构作为通信的消息,在查询方式下,单个软核需要有任务通过循环不断检查共享数据区标志位flag,等待其它软核送来消息,以便激活自身系统挂起的任务,执行下一步工作。整个流程如图4所示。
在循环中使用等待延时,避免了多核对Mutex核资源的不停争用,同时留给处理器一定的消息处理时间,但缺点是延长了通信呼叫和应答的时间,在实时设计中应考虑到延时时长对多核通信的影响。此方案在笔者的NiosII双核系统工程中通过验证。
邮箱内核和共享存储的多核阻塞通信方案
Altera还提供带Avalon接口的邮箱内核mailbox组件在多核处理器之间发送消息。邮箱内核含有两个互斥体:一个保证对共享存储器的唯一写访问;另一个保证对共享存储器的唯一读访问,它与独立共享存储器一起使用实现多核处理器间的消息队列通信。邮箱内核适于双核间单方向的消息通信,功能相当于FIFO缓冲队列,其传送的消息往往是指向共享内存块结构体的指针,代替实际的数据传输,提高数据交换效率。该系统连接如图5所示。
在NiosII HAL环境下对邮箱内核访问的函数有:打开、关闭、获取消息、等待消息、发送消息。在构建邮箱内核组件时,选择可用的共享存储器作为消息队列内存,指定消息队列长度size(不超过存储器容量)及其在存储器中的偏移量Offset。这里选择片上RAM作为共享存储器,将其分为两部分:一部分作为消息队列内存;一部分作为消息指针指向的内存数据结构块。定义内存数据结构如表2所示,头信息info可以作为数据帧的序号,保证数据的按序接收。使用邮箱内核消息队列完成双核间大量数据传输的流程如图6时进行等待;数据接受方处理器处于等待消息的状态,一有消息就接收进来。可以在实时操作系统中单独建立发送数据和接收数据的任务,由于没有中断和查询过程,此方案可以达到单方向很高的数据传输率,在笔者的NiosII系统工程中得到了验证测试。
通用串行接口总线的多核通信方案
在NiosII多核处理器中可以使用通用串行接口总线如UART、SPI、I2C等进行相互间的通信。这些总线有的是NiosII的通用组件在SOPC Builder中直接添加使用,有的可成熟的第三方组件在SOPC Builder中使用。目前NiosII中可用的几种串行总线如表3所示。
几种总线各有优缺点和使用限制,例如UART总线比较通用、工作在异步方式,使用方便,但针对一对一的通信,数据率稍低;SPI总线工作在同步方式,一个主设备可以挂多个从设备,数据率较高,但控制比UART复杂、数据线较多。应根据具体应用选择合适总线。这里以UART总线说明和验证通用串行接口总线完成多核间通信的方案。UART核是Altera提供的NiosII通用组件,实现了一个简单的寄存器映像的Avalon从接口,可以很容易集成到NiosII处理器中,允许主外设(如NiosII软核)通过读写寄存器与其进行通信。UART核至少创建Rxd输入和Txd输出两个IO端口,可根据需要创建CTS输入和RTS输出两个流控信号。这里为每个NiosII软核创建一个无流控波特率为1.152Mbps的UART组件,其发送端口Txd与另外一方的接收Rxd连接。NiosII HAL提供UART系统库驱动程序,可使用ANSC C标准函数或者UNIX风格IO函数访问UART,双核通信流程如图7所示。
双核中的数据发送方查询监测输入字符,出现关键字时发送数据,并以结束符结束发送;数据接收方等待用户输入字符命令,如果是关键字则开始接收数据,在收到结束符时结束接收,处理数据。这个方案实现的是数据接收方请求发送,在笔者NiosII系统工程中以1.152Mbps传输大数据量,验证测试没有问题。也可以根据实际需要使用其它方案。
PIO核自定义协议的多核通信方案
Altera为NiosII提供并行输入/输出PIO核,在Avalon从端口和通用I/O端口之间建立存储器映像接口,PIO组件可配置为输入、输出、输入输出、双向三态四种类型,其中后三种类型可提供信号边沿捕获(Edge Capture)和中断请求。利用PIO并口可将双核连接起来,定义自己的接口形式和通信访问协议进行通信。双核间的互连使用的是FPGA片上逻辑,不占用FPGA的IO引脚,宽度最高32位,同等数据率下效率大大高于串行总线,可使用中断、查询或者二者相结合方式进行通信。这里定义一种PIO通信接口和时序如图8所示。
在中断信号PIO_irq的上升沿提出中断申请,启动一次通信,数据传输方将读写标志信号PIO_R/W置高,同时向数据线PIO_D写入数据;数据接收方在相应中断信号后,检测到PIO_R/W信号变高,则读数据线PIO_D获取数据,同时将PIO_R/W置低表明数据已读,可以进行下次数据传送。数据传输方通过将PIO_irq信号置低表明完成一次通信,数据接收方检测到PIO_irq信号为低时停止本次通信。这种中断和查询相结合的方案效率很高,任意一方都可以发起通信,通信的速率取决于NiosII软核对端口读写延时和数据的处理速度或者写数据缓冲区的速度。软件通信流程如图9所示。
结语
表4对上述各种方案进行了一下比较,分析了每种方案的特点和适用范围。
笔者的PDA考评系统项目采用了NiosII双核设计,使用方案三(邮箱内核和共享存储的多核阻塞通信方案)完成双核间的通信。PDA设备作为实验考评系统的客户端,通过蓝牙无线通信与建有学生课程成绩数据库的服务器进行通信,实现实验现场学生成绩的查询、修改、数据文件的传输等功能,系统的功能结构如图10所示。NiosII双核分为两个系统:(1)NiosII人机界面系统。负责管理矩阵键盘按键和LCD显示界面的驱动;(2)NiosII通信主机系统。实现完整的蓝牙协议栈,完成与数据库服务器进行通信的任务。双核之间键盘操作指令和LCD显示数据的交换通过上文所述的方案三——邮箱内核和共享存储的方式实现。
NiosII多核处理器在FPGA中易于实现,并且多核之间通信可选方案较多,适应范围广,相信会在越来越多的系统中采用。
参考文献:
1. Altera Corp. QuartusII Version6.1 Handbook. Altera. 2006
2. Altera Corp. Creating Multiprocessor NiosII System Tutorial. Altera. 2005
3. Altera Corp. NiosII Processor Reference Handbook. Altera. 2005
4. Altera Corp. NiosII Software Developer’s Handbook. Altera. 2005
5. Altera Corp. Avalon Interface Specification. Altera. 2005
6. www.altera.com.cn
射频工程师养成培训教程套装,助您快速成为一名优秀射频工程师...