注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

dp: 生活的脚步,进步的点滴...

Cam、DSP、FPGA、PM、Life、More ...

 
 
 

日志

 
 

DSP内存读写  

2012-03-06 15:43:13|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

1.内存存取的程序序

为了优化带宽、功耗及编程容易,C6000 DSP结构支持强排序和松散排序存储模型的组合。这些定义是相对于由特定的编程序列隐含的内存操作顺序。这些顺序被称为内存存取程序序。

         C6000 DSP每个周期可以触发多达两个的并行存储操作。内存存取的程序序是基于一个假定的串行结构实现来定义内存存取的结果。也就是说,对一个特定操作的顺序,它用较早或较晚等时间顺序词汇来精确描述并行内存操作处理的顺序。

         程序序是基于一个执行包内的指令和一个序列执行包来定义。内存操作(包括那些并行发布的)用彼此间发生的相对较早或较晚来描述,较早或较晚的字眼是严格相对的:如果X不早于Y,则X就晚于Y

         由不同指令包触发的内存存取按指令包自己的时间顺序,也就是说,程序序定义为:在第i周期发布的内存操作,总是比第i+1周期发布的内存操作早,但总是比第i-1周期发布的内存操作晚。

         对于一个并行发布的存取操作,操作类型(读或写)、执行操作的数据寻址端口决定顺序。下表描述了顺序规则。

在同一个指令包里发布的内存操作的程序序

Data Address 1(DA1)操作

Data Address 2(DA2)操作

存取的程序序

Load

Load

DA1DA2

Load

Store

DA1DA2

Store

Load

DA2DA1

Store

Store

DA1DA2

         LoadStore指令的数据寻址端口由提供数据的数据通道决定,使用A数据通道的LoadStore指令使用DA1,使用B数据通道的LoadStore指令使用DA2;注意提供数据的数据通道决定使用DA1还是DA2。提供地址的数据通道与存取无关。

         C64x DSP支持非对齐的内存存取,使用的指令是LDNWSTNWLDNDWSTNDW,内存系统不保证这些内存操作是原子的,相反,它把这些指令的操作分解为多个操作,内存操作的程序序并不定义组成非对齐操作的单个内存操作的顺序,而仅仅定义整个非对齐操作的操作顺序先后。所以,尽管完整的非对齐存取是按照上面定义的顺序,但别的请求者可以看非对齐操作由一些碎片组成。

         前面定义描述了内存系统的语义。内存系统确保内存存取的程序序的语义被维持,内存系统可以是松散的操作顺序,它们被执行在内存层次结构范围内,只要维持正确的语义就可以。也可以允许别的对内存系统的请求者看存取发生的顺序而非原始的程序序,下面一节详细描述。

2.强或松散的内存存取顺序

内存存取的程序序描述的是一个内存存取的特定序列的希望的语义。在大部分环境中,内存系统为了维持这些语义在所有多级存储结构中都严格按照这个顺序执行内存存取是不必要的。的确,多级存储体系的松散的存取顺序有利于系统性能和功耗的改善。

当同外设通讯和同别的设备(如EDMA、或别的CPU)协同作业并存取同一个内存时,维持程序序可能会显得非常重要。面对各种各样的需求,内存多级体系支持强排序和松散排序的内存操作。

内存系统的一致性要求隐含着对单个内存地址的写被序列化给所有的请求,所有这些请求看到的是对那个地址一样的写序列。一致性并不对不同位置的存取顺序做任何暗示。内存系统排序规则(强或松散的)描述了应用于不同位置的存取的排序保证。

如果从系统的某些位置不可能观察到一个不同的内存操作顺序,这个内存操作序列我们成为强排序,比如:如果一个请求者写位置X比写另一个位置Y早,另一个请求者在看到X更新之前一定看不到Y的更新,这个存取被认为是强排序。在这个例子里。不管内存以什么顺序处理第一个请求者的写和第二请求者的读,第二个请求者一定不能观察到在写X之前发生的Y写,然而强排序不要求写序列化,写可以并行发生甚至以相反的顺序发生,只要第二个CPU不能再X之前观察到Y更新就可以。

非对齐操作(由LDNWSTNWLDNDWSTNDW发起)相对于别的操作可以是强排序,因为非对齐操作并不保证是原子的,强排序是分解后的多次操作被认为是一个完整的操作。而这些子操作并不需要按顺序。

内存分级体系对所有不可cache的长距离操作提供强排序,这样的存取通常是外设和外部存储器并且其对应的MAR cache使能位没有被置位。

对于一个外部内存的可cache位置,分级体系仅提供一个松散的排序,这样,其它请求者可以观察内存的更新以不同的顺序发生,而不是原有的程序序。尽管这是松散排序,CPU仍然会以前节描述一样来看期望的内存系统语义。

对于L2 SRAM中的可cache区域,C64x器件为CPU对处于一样的L1D cache行的那些位置提供强排序,这意味着高26位相等的地址数据存取是强排序的。

对于L2 SRAM不是一样的cache 行的地址(高26位地址不一样),强排序仅提供写和包含不在L1D中的地址的写。这能通过使用L1DWIBARL1DWIWC寄存器来确保。在所有其它情况下,一个松散的排序被提供用于CPUL2 SRAM的存取。

L2EDMA存取L2 SRAM提供限制性的排序保证。EDMAL2相对于其它EDMA读不重定序,EDMAL2写相对于其它EDMA写不重定序。然而读和写可以彼此间重定序。

  评论这张
 
阅读(720)| 评论(0)
推荐

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016