This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

EDMA数据搬移(DM8148)

Hello,

用EDMA传送数据在L2内存和DDR3之间,该段内存没有被cache使能。

这样的话,我就不用在数据从DDR搬到L2之前,对其cache_Inv无效,处理完,从L2搬到DDR,也不用cache_Wb.

因为该段L2本事没有cache。这样的理解是否正确?


如果在没有cache的内存段L2,使用cache_Inv,cache_Wb会出现什么样的结果?

非常感谢!

BRS,
Meng

  • Lingcon Meng 说:

    该段内存没有被cache使能。

    请问你这里说的内存是L2对么?如果是,你的理解有些偏差。L2如果不配置为cache,硬件是是会自动做cache维护,不需要用户手动调用代码。如果你是要EDMA搬移的DDR段设置为非cache,那就不需要对DDR段做cache_inv/cache_wb的相关操作了。

  • Hello Chirs,

    非常感谢您的回复!

    我说的是对L2,我现在搬移数据是从先从 DDR3搬移到 L2,算法开始运算,运算完成后,然后将计算结果再搬移到另一片DDR3.

    并且该L2段没有被Cache,外存DDR3的范围位cache。

    按您的解释:

    1) DDR3-->L2 之前, L2 不需要cache_inv()操作。

           直接EDMA搬移就可以。

    2)

           数据在L2运算完成后,计算结果从L2-->DDR3(EDMA操作)之后,需要做cache_wb()操作。

           

          我的理解正确吗?


    另外一个问题:

         

        如果我直接通过EDMA,从一段DDR3外存(cache)搬移到另一片DDR3(Cache)外存,这样的情况,cache如何操作。     

         非常感谢!


    BRS,

    Meng


  • Lingcon Meng 说:

    我说的是对L2,我现在搬移数据是从先从 DDR3搬移到 L2,算法开始运算,运算完成后,然后将计算结果再搬移到另一片DDR3.

    并且该L2段没有被Cache,外存DDR3的范围位cache。

    按您的解释:

    1) DDR3-->L2 之前, L2 不需要cache_inv()操作。

           直接EDMA搬移就可以。

    我的意思是如果DDR3不是cache的就不需要给相应的DDR3区域做cache_inv/wb的操作。

    Lingcon Meng 说:

    2)

           数据在L2运算完成后,计算结果从L2-->DDR3(EDMA操作)之后,需要做cache_wb()操作。

                 我的理解正确吗?

    无论DDR是否设置为cache,这种情况都不需要cahce写回。

    Lingcon Meng 说:
        

        如果我直接通过EDMA,从一段DDR3外存(cache)搬移到另一片DDR3(Cache)外存,这样的情况,cache如何操作。     

    建议你网上搜索一片叫《TI C64x+ DSP CACHE一致性分析与维护》的文章,对理解cache有较好的帮助。

  • Hello Chris,

    非常感谢您的回复!

    a)

    重新看了一下解释,有点地方没太理解。

    估计是我没有把问题描述清楚。

    目前,我们的应用情况是,DDR3地址是cache的,L2是没有被cache。

    数据流方向如下:

    DDR3(cached)--->L2(no cached)--->DDR3(cached)

    每一个阶段数据传送都是通过EDMA3完成。

    依据以前对cache一致性理解。DDR3数据搬移到L2之前,如果L2是被cache使能,需要cache_Inv()数据

    到L2的目标地址,又结合您的解释,我们的L2是没有Cache的,因此L2 cache_Inv()是完全不

    需要的。

    那么DDR3--->L2之前,DDR3(cached)还需要做操作吗?如果是,都要做哪些操作?

    b)

    另外数据通过EDMA 从 L2(no cached)--->DDR3(cached),根据您的解释是不需要任何回写操作的。

    c)

    数据通过EDMA3,直接从cached的DDR3到cached的DDR3,也就是说 数据通过EDMA3 从DDR3(cached)--->DDR3(cached),

    通过你提供的查阅的文档可以获得答案。

     

    非常感谢您给与的支持!

     

    BRS,

    Meng

  • Lingcon Meng 说:

    a)

    重新看了一下解释,有点地方没太理解。

    估计是我没有把问题描述清楚。

    目前,我们的应用情况是,DDR3地址是cache的,L2是没有被cache。

    数据流方向如下:

    DDR3(cached)--->L2(no cached)--->DDR3(cached)

    每一个阶段数据传送都是通过EDMA3完成。

    依据以前对cache一致性理解。DDR3数据搬移到L2之前,如果L2是被cache使能,需要cache_Inv()数据

    什么叫L2是被cache使能的?L2可以配置为L2 RAM或者是L2 cache,你说的是哪种?

    如果按照DDR3(cached)--->L2 RAM--->DDR3(cached)并且 每一个阶段数据传送都是通过EDMA3完成。对于DDR3(cached)--->L2 RAM,要保证DDR3上的数据是最新的,所以需要对DDR做cache写回。对于L2 RAM--->DDR3(cached),不需做任何cache操作,因为L2 RAM的自动被L1 cache的,而L1 cache的维护是系统自动完成的。

  • Hello Chris,

    非常感谢您的回复,我说的是L2 SRAM。

    根据您的回复,DDR3(cached)--->L2 RAM--->DDR3(cached),数据搬移都是通过EDMA3完成,

    只要在DDR3(cached)--->L2 RAM数据搬移之前,将DDR3的内容进行回写。

    这样的回写,是通过L2WBAR(L2 Writeback Base Address Register )和 L2WWC( L2 Writeback Word Count Register )寄存来设置完成的吗?

    回写的基地址是与EDMA3相关联的DDR3 所对应的地址?

    还是DDR3 本身有相关的回写操作寄存器?

    另外,cache无效时,无效的是L1或者L2的地址,还是无效的是其相关的DDR3的地址?

    cache一致性这一块,个人感觉还是比较复杂的,原来自己接触的也比较少!

    谢谢您的帮助。

    BRS,

    Meng