java怎么拦截某个对象
254
2022-10-28
采用MPC8260和FPGA的DMA接口设计
关键词 MPC8260 FPGA DMA
引言
1 MPC8260的 DMA系统结构
主控板上的FPGA和SDRAM都是挂接在MPC8260的60x总线上的,所以只能利用IDMA来实现二者之间的DMA传输。根据传输启动的触发方式不同,IDMA可分为握手信号控制的IDMA传输和CP命令控制的IDMA传输两种。下面分别介绍两种方式的特点。
1.1 握手信号控制的IDMA传输
在这种方式下,PowerPC内核只需要参与IDMA通道初始化,之后的传输过程全部由CP按照通道参数设置和握手信号控制数据的收发,在最大程度上释放内核。握手信号控制的缺点在于:① SDRAM中的数据和MPC8260的数据同步比较复杂。② 每次发出请求信号后都要进行总线仲裁,并且在得到总线使用权之后一次只能够传输外设端口大小或者32位的数据,总线利用率低。③ 握手控制逻辑和时序比较复杂,加重了FPGA内部控制逻辑设计的负担。
虽然这种传输方式基本上不占用内核资源,但是由于总线带宽有限且利用率较低,所以在连续高速的通信条件下会造成内核长时间得不到总线使用权而一直处于等待状态。因此,握手信号控制的IDMA一般只适用于由外设发起的、数据不是太频繁的传输使用。
1.2 CP命令控制的IDMA传输
相比握手信号控制的IDMA传输,在这种方式下,PowerPC内核除了需要初始化IDMA通道以外还要以命令的形式启动每一次的传输,所以要占用多一些的内核资源。不过,在一次传输启动之后最多可以传输4 GB的数据,所以只要每次传输的数据长度比较长,内核写一个寄存器的额外开销就完全可以忽略不计。同时,由于内部命令触发方式不需要握手信号,不需要频繁地每几个字节就竞争一次总线控制权,所以这种方式的传输效率更高、传输速度更快。内部命令触发方式是以空间换时间——用前端大的缓冲区来换取传输速度的提升。
考虑到主控板上软硬件系统的瓶颈都在于总线带宽,而存储资源相对比较丰富,所以选择CP命令控制的IDMA传输作为数据流从FPGA到SDRAM的传输方式。
2 DMA传输方案设计
FPGA和MPC8260间的数据传输接口设计如图3所示。图中左侧FPGA,通过16位数据线、10位地址线、2根中断请求线和一些读写控制信号线连接到右侧的MPC8260。MPC8260通过64位数据线与本地内存SDRAM相连。
FPGA内部分配有两个大的存储空间,用于轮流缓冲从数据源接收到的数据。任何一个缓冲区收满后,继续接收的数据保存到下一个缓冲区,同时以中断的方式触发MPC8260启动相应的IDMA通道把数据传到SDRAM中。IDMA控制、数据同步和错误处理都由MPC8260完成,FPGA只负责收发数据和触发中断。下面分别介绍二者的程序设计。
2.1 MPC8260程序设计
MPC8260内部的程序处理流程如图4所示。MPC8260预先初始化两个IDMA通道:通道的源地址和传输数据长度等信息与FPGA中的缓冲区一一对应。当收到FPGA的中断信号之后,如果此时对应的IDMA通道空闲,则在中断处理程序中发出CP命令开始接收数据,同时将对应的IDMA通道置忙状态;否则,在FPGA中可能发生了未读取的数据被覆盖的情况,MPC8260进入错误处理程序。在数据传输结束时由DMA控制器发送CPM内部中断到内核,在中断处理程序中一方面要恢复IDMA通道的参数设置,另一方面要把该IDMA通道置闲状态等待下一次传输的开始。
MPC8260程序的核心部分是IDMA通道设置和中断处理。
2.1.1 IDMA通道设置
与一般的DMA通道设置一样,IDMA通道设置的主要参数包括:源地址、目的地址和传输数据长度。除此之外,MPC8260的 IDMA通道设置还包括通道模式、缓冲区和中断配置等,所涉及的寄存器比较多,配置比较复杂。IDMA通道设置的逻辑结构如图5所示。
BD(Buffer Descriptors)表是用于指定传输方式、源/目的地址和数据长度等基本信息的数据结构。BD表的基地址由参数RAM中IBASE寄存器的值指定。除IDMA BD表的基地址之外,IDMA参数RAM内还存放有IDMA BD指针、IDMA传输缓冲区的起始地址、IDMA传输缓冲区大小和DMA通道模式等IDMA通道信息。IDMA参数RAM的基地址由参数RAM中IDMAx_BASE寄存器的值指定。IDMAx_BASE寄存器的地址是固定的,如IDMA1_BASE在偏移RAM基地址0x87FE的位置。CP就是通过IDMAx_BASE寄存器找到IDMA参数RAM,再通过IBASE找到BD表的顺序初始化IDMA通道的。具体的寄存器配置可以参考文献[1]第19章的IDMA编程示例。
IDMA通道初始化以后等待CP发出START_IDMA命令开始传输。在最后一个BD表传输结束时触发中断信号通知PowerPC内核本次传输过程的完成。传输过程中会发生改变的通道设置寄存器包括IDMA BD表指针、源地址、目的地址和BD表有效位等,所以在BD表传输结束的中断处理程序中需要恢复这些寄存器为下一次传输作准备。
2.1.2 中断处理
系统设计中使用了两类中断方式: IRQ引脚引入的外部中断和CPM触发的内部中断。初始化过程包括:使能对应的中断屏蔽位、选择中断优先级、连接对应中断向量号和中断服务程序等。为了保证较好的传输实时性,需要把中断优先级尽量设得高一些。
与一般中断处理过程的区别在于:MPC8260中断处理控制器采用分级结构来扩展中断信号总数。CPM内的中断就是二级中断,需要通过CPM中断控制器和SIU中断控制器两级中断控制。本设计中用来通知内核本次传输过程结束的中断是CPM内最后一个BD表传送结束的信号BC(BD Completed)。BC信号和命令结束等几个信号一起通过SIU中断挂起寄存器中的IDMA位向内核发出中断信号。所以在中断初始化时要同时有效IDMA屏蔽寄存器和SIU中断屏蔽寄存器对应的比特位。具体的中断初始化实例如下:
尤其要注意的是,中断处理程序结束之前的清SIU中断挂起寄存器,不能直接在SIU中断挂起寄存器的IDMA位写1,而是要通过在IDMA事件寄存器的BC位写1来间接地清SIU中断挂起寄存器。
2.2 FPGA部分程序
系统中的FPGA芯片选用Xilinx公司的VirtexII 3000。利用VirtexII内嵌的大容量BlockRAM配置为单口RAM来做缓冲区,在程序中可以用Xilinx的集成开发环境ISE 7.1i内部自带的IP核生成。对FPGA来说,由于数据的输入/输出都是顺序的,所以两端都只要1根地址线用于区分相邻的两个数据就可以了。地址线配合内部计数器构成读写指针,当写指针从缓冲区的一半跳到另外一半时发相应的中断信号。
3 总结
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~