美章网 资料文库 双处理器通信方案的研习与策划范文

双处理器通信方案的研习与策划范文

本站小编为你精心准备了双处理器通信方案的研习与策划参考范文,愿这些范文能点燃您思维的火花,激发您的写作灵感。欢迎深入阅读并收藏。

双处理器通信方案的研习与策划

双处理器之间通信方式

目前,基于FPGA的双处理器之间的通信按照通信方式来划分,主要有:共享存储器、邮箱核(mailbox)、串口通讯和DMA等四种方式。共享存储器通信是一种两个处理器之间的阻塞通信方式。在双处理器系统中,可以通过共享片上RAM的方式来实现处理器之间的数据交互。为了防止死锁的发生,需要通过设置标志位或者中断信号的方式,实现双处理器的异步接收或发送。同时发送进程和接收进程必须在两个处理器上成对出现,只有当两个处理器上的发送进程和接收进程同时到来时,两个处理器才能共同退出当前通信进程,进入下一条指令。邮箱核主要提供了两组互斥体,一个用于保证对共享存储器的唯一写访问,另外一个用于保证对共享存储器唯一的读访问。邮箱核结合片上RAM,可以实现双处理器之间的数据交换。邮箱核加片上RAM的组合方式,适合于双处理器之间的单向传输数据,具有实时性好,速度快的优点,但是对于通信的数据结构有一些要求。串口通讯在双处理器之间的数据交换主要是通过串口通信设备完成的。将系统中的处理器分为主设备和从设备,当主设备要读取从设备数据时,就向从设备发送一个读取的指令,从设备接收到指令后将数据发送到主设备中。主设备向从设备写入数据过程也是如此。这种通信方式,对于软件程序方面依赖性较小,但是传输模式单一,存在一定的延时。DMA方式主要是用于数据量比较大的情况下,通过对数据整块的处理,能够有效的缩减数据通信占用处理器的时间。

互联模块概要设计

通过对以上双处理器之间通信方式的优缺点分析,结合本系统通信的特点,设计出符合本系统的FIFO互联模块。在该系统中,使用的是定制IP核的方式来设计该模块,在IP核中设计相关的寄存器,设计出相关的读写控制逻辑。该IP核的设计主要分为以下几个方面。第一是对于系统的非实时部分而言,要在操作系统的层次上,读取FIFO缓冲区数据和将数据写入FIFO缓冲区,保证数据的读取和写入正常。在操作系统中编写该FIFO缓冲区设备的驱动,在驱动中判断该设备的读写状态。第二是对系统的实时部分而言,要在规定的时间内,将数据从该FIFO缓冲区中读取,同时将反馈数据在规定的时间内写入到FIFO缓冲区中。通过对该IP核中定义的控制寄存器的读取,实时的判断该FIFO设备的状态,保证及时的读取或写入数据。第三就是要实现对该FIFO缓冲区的互斥访问,保证每次读取或者写入的数据都是完整的,确保数据的准确。通过对缓冲区的大小进行设定,当读或者写完成时,设置控制寄存器中相应的标志位,达到互斥访问的目的。

详细设计

1IP核的设计

该IP核主要的功能一是对写入的数据进行缓冲,二是对输入的数据进行分隔,保证每次读写的数据都是完整的一帧。该IP核在QuartusII环境中顶层模块如图2所示。该FIFO的缓冲区大小为128位,宽度为32。使用了一个读指针READ_POINTER和一个写指针WRITE_POINTER来控制CPU对该缓冲区的读写,读写指针大小都设置为2。该FIFO的读写数据模型如图3所示。当对该缓冲区进行读或者写操作时,相应的指针发生变化。当读或写指针达到一定的条件时,就设置相关寄存器的状态。当从该缓冲区中读取数据完成时,就将READ_DONE置1,同时将READ_ENABLE置0,将WRITE_ENABLE置1,从而完成读操作,保证读取数据的完整性。同理,当写数据完成了,将WRITE_DONE置1,同时将READ_ENABLE置1,将WRITE_ENABLE置0,完成写操作。这样就可以控制CPU对缓冲区的读写,保证数据的唯一性。

可以看出通过对读写标志位的判断,可以达到对该FIFO状态的判断,从而控制读写数据的时机。整个状态的判断和控制是通过控制寄存器(CONTROL_REG)来实现的,在控制寄存器中判断FIFO可读或者可写状态是由CONTROL_REG[7:6]来控制的,而向FIFO中每次写入或读取数据的大小是由CONTROL_REG[1:0]来控制的,系统可以随时读取该寄存器来确定FIFO的读写状况。该IP核的控制寄存器结构如图4所示。在QuartusII下进行功能仿真如图5所示。从图5中可以看出,IP核复位后,FIFO的状态是可写的。此时,读取寄存器的状态位0x80,表明该FIFO是可写的。将0x2写入到控制寄存器(CONTROL_REG[1:0])中,就确定了FIFO中每帧的大小。读取寄存器,为0x82,表明数据已经写入到控制寄存器中。然后向FIFO中写入数据0x12345678和0x87654321后,可以看到WRITE_DONE置1,READ_ENABLE被置1,WRITE_ENABLE被置0,同时写指针WRITE_POINTER也是正确的,此时读取寄存器,为0x42,表明写操作完成,数据可读。在后面对FIFO进行读操作可以看出,各个标志位和读写指针都是正确的,可以看到读出的数据为0x87654321和0x12345678。此时,读取寄存器中数据,为0x82,表明数据可写。

2FIFO的驱动的设计

在实时部分和非实时部分之间通过FIFO传递数据,非实时部分运行的是µClinux操作系统,需要对FIFO编写驱动。在µClinux下开发FIFO设备的驱动和常规Linux下开发驱动流程一样。在Linux系统中,设备的驱动程序被组织为一组完全不同任务的函数的集合,通过这些函数使得设备操作犹如文件一般。在应用程序看来,硬件设备只是一个设备文件,应用程序可以像操作普通文件一样对硬件进行操作。如open()、close()、read()、write()等等。Linux主要将设备分为两类:字符设备和块设备。字符设备是指设备发送和接收数据以字符的形式进行;而块设备则以整个数据缓冲区的形式进行。本文中FIFO设备属于字符设备,其设备驱动主要定义一下几个函数初始化完成后,对设备的读写主要是通过调用write_data()和read_data()来实现的。µClinux针对无MMU的处理器做了移植,与Linux使用虚拟内存不同,µClinux采用真实地址方式,这样操作硬件设备非常方便。SOPC系统把存储设备,IO映射为统一编制的存储设备。

自定义IP核在双处理器中应用

1双处理器平台的搭建

根据设计的需要,构建一个完整的SOPC系统后,才能真正实现双处理器的设计。在SOPCBuilder中加入CPU1和CPU2,一个Timer,定制的FIFO组件以及sdram、flash、JTAG等外围设备。其中非实时部分的CPU1选择NIOSII/f,复位向量设置为flash,异常向量设置为sdram。另外连接CPU1的Timer要选择全功能型(Full-featured),并将该Timer的优先级设置为0。而实时部分的CPU2也要选择NIOSII/f,复位向量设置为flash,异常向量设置为sdram。

2自定义IP核功能验证

将定制的IP组件添加入到系统中,在CPU1上运行µClinux操作系统,CPU2的程序是在NIOSIIIDE环境下运行。在CPU1上运行的程序首先使用函数open()打开该FIFO设备,然后通过读函数read()和写函数write()区读写数据,从而实现CPU1读取和发送数据。而在NIOSIIIDE环境下,使用查询方式,来读取该定制FIFO数据,使用函数IORD()存器CONTROL_REG的状态,如果为可读的,则执行读操作,如果为不可读,则什么都不执行。写数据也是如此。经过验证,数据都能按时按序到达,该IP核很好的满足了设计的需要。

结束语

本文提出的设计,是在传统的双处理器通信技术的基础上,对传统双处理器通信技术流程进行改进。针对不同的业务逻辑,提出不同的解决方案。所设计的IP核很好的满足了实时系统和非实时系统之间的通信需要。整个系统的设计体现了自顶向下的模块化设计思想,同时还充分利用了SOPC技术的优势,具有很好的可扩展性和易裁剪性,具有较好的应用前景。

作者:朱伟伟彭建朝 代俊锋 单位:北 京工业大 学计算机学院北京首科凯 奇电 气技术有限公司