1

我试图理解 DSP 架构和指令执行中的这个基本概念:

“基于哈佛架构,CPU 可以同时获取数据和指令字......- 指令获取可以在前一条指令执行期间进行,无需等待指令执行完成或在下一条指令时必须停止处理器的操作正在被取走。”

然而,由于我对计算机体系结构的了解有限,我想到了这个问题:“如果要操作的数据(操作数)是由指令字决定的,这怎么可能!?想象一下从第一个周期开始迭代,指令。是从程序内存中加载的,那么这两个操作数应该在下一个周期中加载,这里有歧义:现在是执行时间/周期轮次,所以如果在加载数据时,下一个指令同时加载,前一个加载的指令丢失了,因此执行时会发生什么!?或者我错了,通过将数据从内存加载到数据寄存器来立即执行!?

** 代码示例:MPYF3 *(AR0)++, *(AR1)++, R0

*附录:我认为,由于没有寄存器文件,所以没有将任何数据加载到任何寄存器中 - 直接通过内存完成!所以在我看来,在第一次指导之后。已获取,在下一个周期中,由 prev 指定的所需数据(操作数)。指令 由功能单元通过内存操作(instr. exec.),同时下一个 instr. 取出字,并更新操作数的地址(作为执行的结果,通过地址寄存器 ALU);这一切都是因为这些操作(数据访问、算术运算、地址更新、指令获取)中的每一个都是通过独特的物理架构处理的。

有没有人可以向我保证我的解释!?非常感谢对利用 DSP 哈佛架构中的并发数据和指令访问的周期迭代的典型指令的解释。

提前致谢

4

1 回答 1

0

哈佛架构是一种具有两种不同的存储器、高速缓存、总线等的架构。一种用于指令,另一种用于数据。这与冯诺依曼架构形成鲜明对比,后者具有用于指令和数据的单一统一存储器。

顺便说一句:C/C++ 软件的一个常见问题是缓冲区溢出,您(坏人)恶意将大量指令作为“输入数据”写入程序,希望有人没有检查输入长度并且会意外地让您的“数据”(实际上是一个程序,伪装成数据!)覆盖内存的“指令”部分。然后当程序运行到那些新指令时:BAM!您的“数据”(实际上是一个程序)现在可以控制原始程序。哈佛架构因其两个独立的内存空间而不会遇到这个问题。

那么这个 DSP CPU 是如何一次完成多项工作的呢?是魔法吗?并不真地。这意味着 CPU 是流水线的。流水线意味着 CPU 可以同时执行一条指令的开始、另一条指令的中间和第三条指令的结束。如何?通过保留一组中间结果寄存器,这些寄存器充当流水线一个阶段的“输出”和另一个阶段的“输入”。

值得注意的是,流水线与哈佛/冯诺依曼架构无关。两者都可以流水线化。

于 2012-12-18T23:37:55.550 回答