热度 21
2012-12-21 10:45
3076 次阅读|
0 个评论
上一篇博文我们认识到了 Delay 模块和 Memory Delay 模块的区别,但是,貌似我们还有个问题没有明确,认识到它们的区别到底有什么作用呢?笔者先来将一个自己在 DSP_Builder 算法设计过程中遇到的问题。笔者设计一个小波分解的算法,该算法需要把数据按次序奇偶性分离,还需要对行数据和变换后的数据进行延时,因此需要大量使用 delay 模块或者 memory delay 模块,当算法设计完成进行编译时,一个奇怪的事情发生了, memory bits 资源只占用了 60% 左右,但提示 memory 资源不够。笔者为了揭开上述错误的谜团,才进行了上述博文的实验。 本次我们就来看一下到底为什么会出现上述现象。 我们先来讲述一个 FPGA 的基础知识。我们知道,对于 Cyclone II 系列的 FPGA ,其逻辑单元( LE )是构成 FPGA 的基本单元之一,一个 LE 由一个 4 输入的 LUT 、一个寄存器及进位和互连逻辑组成。但我们设计一个由少于 4 个输入端和 1 个数据输出端组成的电路时,一个 LE 足矣,但当我们由 5 个输入端和 1 个输出端组成电路时,就必须有两个 LE 构建,但有 1 个 LE 没有得到充分利用,其他电路能否再利用这个没有得到充分利用的资源呢,答案是不能。这个也就解释了为什么 FPGA 逻辑资源不可能达到 100% 的缘故。 受此影响,我们想,既然剩余的逻辑资源不能被再利用,那未用完的 M4K 资源能否得到再利用呢,为了说明这一点,我们做个试验,就一目了然了。笔者这个实验所用的芯片是 Cyclone II 的 EP2C8Q208C8 ,该芯片有 8256 个 LE ,以及 36 个 M4Ks 资源。我们这个实验是把该芯片上 36 个 M4Ks 全部耗尽,但每个都有剩余空间,看还能否再利用。 笔者设计了一个算法,如图所示。 这个算法很明显, 36 个 M4Ks 全部消耗完毕,但至少有两个 M4Ks 资源没有得到充分利用,我们编译完查看资源消耗情况也很清楚。 接下来,我们就在上图算法基础上再加一部分,如下图。 看到了吧,笔者意图相当明显,如果能够编译通过,那可以证明,未完全使用的 M4Ks 可以得到再利用;如果编译失败,要就只能说明, M4Ks 如同 LE 一样,未完全使用的只能被丢弃。 实践证明,编译失败。由此可以说明,一个 M4Ks 被用过以后,即使有剩余空间,也不能被再利用了。这个结论揭示了笔者在算法设计中遇到的问题, memory 资源占用率仅为 60% ,但确提示没有足够的 memory 资源。 由这两篇博文也揭示出一个道理:在算法设计过程中,功能的实现是前提,但算法的优化也是必不可少的。