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.

[参考译文] RTOS/TMDSEVM572X:DDR 访问延迟

Guru**** 2943030 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/669361/rtos-tmdsevm572x-ddr-access-latency

器件型号:TMDSEVM572X

工具/软件:TI-RTOS

你(们)好

我使用的是 GP evmAM572x 和 TI RTOS processor_sdk_rtos_am57xx_4_00_00_04。

我想知道、如何计算读取和写入外部存储器所需的时钟周期、以及 am572x 中的延迟是多少? 是否有关于 AM572x 外设时钟周期和延迟的任何文档。

谢谢、

Anjana Pathak

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    RTOS 团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    我们没有 DDR 延迟编号、但您可以使用时间戳对其进行测量。 例如、在 ti\drv\pci\examples\src\pcie _sample.c 中、有一个函数 uint32_t readTime32 (void)可用于测量时钟周期。

    此致、Eric
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我们在使用 Linux SDK 的标准测试中提供了一些性能数据、这些数据发布在此处:
    processors.wiki.ti.com/.../Processor_SDK_Linux_Kernel_Performance_Guide

    请参阅 LMBench 编号。 我们还提供了一份文档、介绍了 DRA7xx 器件(符合汽车标准的器件)的延迟/吞吐量性能、该文档也适用于 AM57xx 器件:
    www.ti.com/.../sprac46.pdf

    希望这对您有所帮助。

    此致、
    Rahul
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    非常感谢您提供的信息..........
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    但是、这个函数将如何为我提供执行从外部存储器指令读取数据所需的时钟周期数?

    Anjana Pathak
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    我认为您需要:
    t1 = readTime32();
    您的 DDR 访问代码
    t2 = readTime32();

    时间开销为 T2-T1;在 DSP 中使用时、函数为 DSP 周期计数器;在 A15中使用时、函数为 PMU 周期计数器。 如您所知、DSP 或 A15的运行速度有多快、您可以将其转换为时间戳。

    此致、Eric
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    函数是
    静态 uint32_t readTime32 (void)

    uint32_t timeVal;

    #if 定义(_TMS320C6x)
    timeVal = TSCL;
    #Elif __ARM_ARCH_7A__
    _ASM____volatile__("MRC P15、0、%0、C9、C13、 0\t\n":"=r"(timeVal);
    其他
    /* M4的具体执行*/
    静态 uint32_t silumTimer = 0;
    多路复用器++;
    timeVal = simumTimer;
    #endif
    返回 timeVal;

    在这里、当我调用该函数时、它将首先设置 simuTimer =0
    因此、我得到的返回值将始终相同
    t1 = readTime32();
    T1 = 1;
    您的 DDR 访问代码
    t2 = readTime32();
    T2=1;
    因此、这不会提供从外部存储器读取"n"个数据所需的确切时钟周期。
    请澄清。

    谢谢、此致、
    Anjana Pathak
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我使用此函数来查找从外部存储器(物理存储器)读取数据(大小为637000字节)所需的时间为407300000计数。

    这意味着时钟频率为1000MHz。 时钟节拍为1nsec、这意味着读取这些字节、处理器需要407300000 nsec、即407.3mil。 分析是否正确?

    我的代码是

    MEM_xdata =(uint16_t *) 0x0090000000;//0x80000010;

    // Nimu_log ("%d\n"、(int)*Mem_xdata);

    // Mem_xdata_1 =(uint16_t *) 0x0090000004;// 0x80000010;
    start_time=readTime32();//CountPRT;
    for (j=0;j<5;j++)

    对于(i=0;i<63700;i++、k++)

    array_triy[j][i]=*(Mem_xdata+k);
    //Nimu_log ("%d %d\n"、(int)*(Mem_xdata+I)、(int)* Mem_xdata_1);


    end_time = readTime32();//CountPRT;
    //CountPRP=0;

    /* for (j=0;j<5;j++)

    对于(i=0;i<63;i++)

    Nimu_log ("%d\n"、array_trial [j][i]);

    }*/
    Nimu_log ("开始时间:%d\n"、开始时间);
    Nimu_log ("结束时间:%d\n"、end_time);
    Nimu_log ("%d\n"、(end_time-start_time));

    请查找随附的  

    谢谢

    Anjana Pathak

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    这是使用计时器函数分析一段代码并解释结果的正确方法。 通常、您需要优化编译测试代码并在靠近 CPU (例如、L2)的内存中运行代码、还需要设置高速缓存以获得更好的性能。 此外,您还可以使用*(UINT32_t*)访问 DDR 数据。

    此致、Eric
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    我将类型从 uint16_t 更改为 uint32_t、现在从物理存储器读取637000字节所需的时间为350毫秒、以前为407.3毫秒。
    如何将其减少到微秒?
    如何设置高速缓存以获得更好的性能?
    如何在更靠近 CPU 的位置运行内存中的代码?

    谢谢、
    Anjana Pathak
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请回复..........