我正在努力理解DSP体系结构和指令执行中的这个基本概念:
"基于哈佛体系结构,CPU可以同时获取数据和指令字…-指令获取可以在以前指令执行,而不等待指令执行或必须停止处理器的在获取下一条指令时执行操作。"
然而,由于我对计算机体系结构的了解有限,我想到了这个问题:"如果要操作的数据(操作数)是以指令字为目的地的,这怎么可能呢!?想象一下,通过从第一个循环开始的迭代,指令是从程序内存加载的,那么这两个操作数应该在下一个循环中加载,这里是模糊性:现在轮到执行时间/周期了,所以如果在加载数据时,下一个指令同时加载,上一个加载的指令就丢失了,那么执行会发生什么!?或者我错了,通过将数据从内存加载到数据寄存器来立即执行!?"
**代码示例:MPYF3*(AR0)++,*(AR1)++,R0
*附录:我认为,由于没有寄存器文件,所以没有任何数据加载到任何寄存器中——直接通过内存完成!!因此,在我看来,在第一个指令提取后,在下一个周期中,prev指定的所需数据(操作数)。指令由功能单元通过存储器进行操作(指令执行),同时提取下一个指令字,并且操作数的地址也被更新(作为执行的结果,通过地址寄存器ALU);所有这些操作(数据访问、算术运算、地址更新、指令提取)都是通过独特的物理体系结构进行处理的。
有谁能向我保证我的解释!?非常感谢对DSP哈佛体系结构中利用并发数据和指令访问在循环中迭代的典型指令的解释。
提前感谢
Harvard体系结构有两个不同的内存、缓存、总线等。一个用于指令,另一个用于数据。这与冯·诺依曼体系结构形成了鲜明对比,后者有一个用于指令和数据的统一存储器。
旁白:C/C++软件的一个常见问题是缓冲区溢出,你(坏人)恶意地将大量指令作为"输入数据"写入程序,希望有人没有检查输入长度,并意外地允许你的"数据"(实际上是一个程序,伪装成数据!)覆盖内存的"指令"部分。然后当程序运行到这些新指令时:BAM!您的"数据"(实际上是一个程序)现在可以控制原始程序。哈佛大学的体系结构由于其两个独立的内存空间而没有遇到这个问题。
那么,这个DSP CPU是如何一次完成多项任务的呢?这是魔法吗?不是。这意味着CPU是流水线。流水线化意味着CPU可以同时执行一条指令的开始、另一条指令中间和第三条指令的结束。怎样通过保留一组中间结果寄存器,这些寄存器充当管道的一个阶段的"输出"和另一阶段的"输入"。
值得注意的是,流水线与Harvard/Von Neumann体系结构无关。两者都可以通过管道传输。