3.1.1软件直接内存存储支持(SDMA):
3.1.2 MPMC 的内部结构
如图1,MPMC最多有8个端口,这些端口是相互独立的。也就是说,随时可以通过任意一个端口来访问内存。如果有两个端口同时访问内存,MPMC的仲裁器会按一定的规则来仲裁并决定其先后。而且MPMC的每个端口均带有缓存,所以在往一个口写入数据的时候,数据是先写入缓存,等到这个端口取得内存写入权后再从缓存写入内存。数据写入缓存再写入内存的过程对用户是不可见的。所以对于用户自己的逻辑来说,只要把数据写入MPMC的端口就可以了。但是这里要注意判断一下缓存是否已满,否者会出现数据丢失。使用缓存就像CPU使用CACHE一样,可以大大提高MPMC的吞吐效率。但是和CACHE一样,会带来数据不同步的问题。下面会详细讨论这个问题。
同时在多端口进行数据读写的时候要注意数据同步的问题。 由于MPMC 是把数据先写入缓存再写入内存的,而读出数据是直接从内存读出,写入的数据可能还在缓存中并没有真正的写入内存,所以读出的数据可能是上次写入的数据。 对于同一个端口进行读写操作,可以在读之前看一下写缓存是否空。对于读写是不同口的情况,可以在设定各个口的优先级上把写端口的优先级设置的比读端口高。请注意,使用这两个方法会降低MPMC的效率,所以只有确定读写存在同步问题的时候才采用。

图3.1.1 MPMC内部结构图
3.1.3 MPMC 接口
MPMC一共提供了4种接口:PLB,XCL,SDMA,NPI。PLB接口主要用作处理器通过PLB总线访问内存。XCL主要是用作处理器的CACHE从内存读取数据时使用。SDMA 是外部数据要用DMA方式写入内存的时候使用,其支持SGDMA。NPI接口是让用户在自己的设计中利用MPMC特性的接口,下面就将详细讲述NPI接口。
NPI接口有以下特性: