[MPC5777C] 了解 e200z759n3 内核的指令流水线您好!
在研究 e200z759n3 内核的指令执行路径时,我想到了以下问题:
- 看来e200z7核心参考手册在管道执行单元的内容上并不十分一致。在图 17 中,整数执行单元和乘法单元是分开的。不过,"4.2.1 整数执行单元 "部分涵盖了整数乘法和除法。4.6 并发指令执行 "一节提到了 "双标量整数单元 "的存在,但没有提到任何乘法单元。我认为内核有两个整数执行单元,可以执行任何整数运算(如和、乘、除)。我的结论正确吗?双发行流水线能否同时执行两个乘法运算?
- 我画了下图来说明管道执行流程,并根据参考手册更好地理解它。我误解了什么概念吗?

顺祝商祺!
马特乌斯
Re: [MPC5777C] Understanding the instruction pipeline of the e200z759n3 core1) 当然是的,这张图片与 e200z4 有关,也是双重问题

2) 这取决于管道内容本身。您可以从上一个答案的图片中看到。第一条指令很短,不会对另一条指令造成任何停滞。第二条指令较长,会导致停滞,因为第三条指令取决于第二条指令的结果。
3) 还得再等等。
4) 基本上是的。在此,编译器优化也会对其产生影响,编译器可能会改变指令顺序,以更好地利用双发架构(即:"......")。指令调度),以实现最高级别的优化。
Re: [MPC5777C] Understanding the instruction pipeline of the e200z759n3 core感谢您的回复,大卫!
还有几个问题:
- 由于流水线具有双发功能,而执行单元有两个整数单元,那么它能否在同一时钟周期内启动两个独立的整数乘法或整数除法指令的取数阶段?
- 在执行加法这样的简单指令时,手册上说它在一个时钟周期内完成执行阶段。WB 级是紧随 E0 级之后进入时钟周期,还是必须再等待三个空闲时钟周期,就像必须增加一个空闲填充,才能使用流水线的所有 10 级完成从 IF0 到 WB 的整个周期?
- 当两条指令之间存在数据依赖关系时,目标指令是在与源指令最后执行阶段相同的时钟周期内开始执行阶段,还是必须等待下一个时钟周期?我不清楚馈送器是如何工作的。
- 既然是解码阶段检查指令之间的数据依赖性,那么所有流水线停滞都发生在 D1 和 E0 流水线阶段之间的结论是否正确?
顺祝商祺!
马特乌斯
Re: [MPC5777C] Understanding the instruction pipeline of the e200z759n3 core1) 我认为它无论如何都不会与执行单元分离,它只是执行单元的一部分:

2) 我无法确认您的草图是否准确,但从原则上讲,这肯定是正确的,而且符合流水线的各个阶段。原则上,这肯定是正确的,也符合管道阶段的要求:

我可以推荐以下演示文稿,它可能比 e200 手册更容易阅读:
https://community.nxp.com/t5/MPC5xxx-Knowledge-Base/e200-Core-Training-relevant-to-MPC55xx-and-MPC56...
Re: [MPC5777C] Understanding the instruction pipeline of the e200z759n3 core你好,戴维
为了了解指令流水线中的内存依赖性,我为以下代码片段构建了时序图,其中包含与 r6 相关的依赖关系:
mtctr r5
.loop:
e_addi r6, r6, 1
e_mulli r6, r6, 1
e_bdnz .loop
不过,在绘制图表(附在本回复后)时,我注意到,虽然吞吐量保持不变,但指令执行延迟每次迭代都会增加两个周期,而且似乎没有上限。我错过了什么吗?流水线是否规定了滞留指令的最大数量?
欢迎指出我图表中的其他错误。
致以最诚挚的问候,
Matheus
Re: [MPC5777C] Understanding the instruction pipeline of the e200z759n3 coreFF 的意思是前锋,与 STALL 不同。我建议大家也看看 e200z6 RM,因为它是较早的核心变体,有些主题的描述方式有些不同,可能更容易理解。

https://www.nxp.com/webapp/Download?colCode=E200Z6RMAD&location=null
是的,演示可能会简化,但我觉得差别不大。
Re: [MPC5777C] Understanding the instruction pipeline of the e200z759n3 core你好
似乎每迭代一次循环,滞留指令的数量就会增加两条。
- 流水线对停滞指令的数量有限制吗?
- 它们被储存在某个缓冲器中吗?
- 如果是,该缓冲区有多少条目?
- 这是否与缓冲区的问题有关?
- 如果停滞的指令被保存在某个缓冲区中,那么当缓冲区满了,又有一条指令停滞时,会发生什么情况?
顺祝商祺!
马特乌斯
Re: [MPC5777C] Understanding the instruction pipeline of the e200z759n3 core我认为这可能是正确的,乘法运算的延迟指定为 3 或 4 个周期(每 4 个周期有一个结果)。这种情况是最糟糕的极端情况,即所有操作都依赖于前一个操作的结果,此外还在循环中运行,这基本上导致管道的完全消除。 它的工作原理与完全无管道的情况基本相同。

Re: [MPC5777C] Understanding the instruction pipeline of the e200z759n3 core您好!
回到管道填充问题上来。如果没有像您发送的图像所示的那样填充所有四个执行阶段的填充,那么为什么参考手册中的图表显示 " FF " 边距?
没有填充物的演示图不是简化版吗?

带填充的参考手册图:



顺祝商祺!
马特乌斯
Re: [MPC5777C] Understanding the instruction pipeline of the e200z759n3 core我认为你的图表中的错误在于,你总是从左侧开始。我不知道我是否能够解释清楚。
使用 e200z6 手册中的图片,在指令缓冲器之后是指令寄存器(标记),然后是解码级。当执行单元出现停滞时,意味着指令缓冲区中的指令在无法进入后续阶段时也无法解码。
理想情况下,您可以考虑每个单位在某些点的确切状态。总之,在图表中将停滞点置于何处并不重要,因为其结果总是导致相同的性能。
性能受限于流水线的瓶颈,这里指的是欧盟单元的停滞,影响整个系统。

我不确定这是否有帮助。 总之,你为什么要知道这么确切的细节呢?
无论如何都无法以这种方式分析真实代码,为此目的,有性能监测器、调试跟踪等工具。
Re: [MPC5777C] Understanding the instruction pipeline of the e200z759n3 core你好,戴维
我正在研究通过共享硬件进行的内核间交互如何影响执行时间和资源消耗。我使用性能监测进行了一些验证,但我无法理解我的结果,现在我明白了。非常感谢你的澄清!
最良好的祝愿,
Matheus