【发布时间】:2017-06-13 17:48:52
【问题描述】:
我正在使用 MAX10 FPGA 并已连接 DDR3 内存。我注意到与片上内存相比,我的 DDR3 内存运行缓慢。我开始了解这一点,因为我编写了一个闪烁的 LED 程序,并且对于与片上存储器相同的延迟功能,与 DDR3 存储器相比,它的工作速度更快。可以做些什么来提高速度?什么可能是错的?我的系统时钟运行在 50MHz。 附言我的系统中没有指令或数据缓存。
【问题讨论】:
我正在使用 MAX10 FPGA 并已连接 DDR3 内存。我注意到与片上内存相比,我的 DDR3 内存运行缓慢。我开始了解这一点,因为我编写了一个闪烁的 LED 程序,并且对于与片上存储器相同的延迟功能,与 DDR3 存储器相比,它的工作速度更快。可以做些什么来提高速度?什么可能是错的?我的系统时钟运行在 50MHz。 附言我的系统中没有指令或数据缓存。
【问题讨论】:
首先,您的功能不是您描述的管道功能。因为您使用内存做了一些事情,然后让 LED 闪烁。每件事都按顺序运行。
在这种情况下,你应该估计你的内存的响应时间和吞吐量。例如,你从内存中读取一个数据,然后执行一个 add 函数,并且这样做了 10 次。如果你总是在 add 函数之后读取内存,您的总时间消耗约为 10*响应时间 + 10 附加功能时间。
不同的是内存响应时间。内部ram的响应时间在50MHz下可以是1个周期。但是DDR3内存应该是80ns左右。这就是区别。
但是您可以将您的模块更改为流水线模式。读/写数据并并行执行您的其他功能。并且提前 r/w DDR。这就像 PC 中的缓存。这样可以节省一些时间。
顺便说一下,DDR的吞吐量很大程度上取决于你的函数模式。如果你在序列顺序地址读取或写入数据,那么你会得到更大的吞吐量。
毕竟,外部存储器的容量和响应时间永远不会超过内部存储器。
原谅我的英语。
【讨论】: