Other Parts Discussed in Thread: TMS320F28377D
主题中讨论的其他器件:TMS320F28377D
您好!
我们使用的是 TMS320F28377D。 我对 FMC 中的此指令预取和数据缓存选项有2个问题。
1.指令缓冲器是否应被视为指令缓存?
2. 禁用预取和数据缓存后,性能会下降什么?
谢谢、
Sundaram
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
Other Parts Discussed in Thread: TMS320F28377D
您好!
我们使用的是 TMS320F28377D。 我对 FMC 中的此指令预取和数据缓存选项有2个问题。
1.指令缓冲器是否应被视为指令缓存?
2. 禁用预取和数据缓存后,性能会下降什么?
谢谢、
Sundaram
Sundaram、
1.是的、可以将其视为由预取机制填充的指令缓存。
2. 我不能给你一个特定的数字、因为它取决于许多因素、例如地址偏移量(来自128位对齐的地址)、指令大小、分支等 假设代码是顺序代码、如果预取被禁用、您将在从闪存取的每次指令时产生闪存等待状态。 如果启用了预取、并且您访问了地址0x80000、则在第一次128位取指令时会产生闪存等待状态、并将其存储在第一个128位预取缓冲区中。 当 CPU 处理第一个32位或第一个16位指令时、提取的128位中的其余位将存储在预取缓冲区中、并且无需从该缓冲区提取其他等待状态。 不仅仅是这样、当 CPU 处理来自前128位的指令时、预取机制将从闪存访问接下来的128位并将其填充到第二级128位预取缓冲器中-这意味着应用程序不会因为第二次取而丢失任何额外的周期。 如果代码是连续的、则应用程序不会为地址范围0x80002到0x8000F 的所有指令产生等待状态(假设0x80000处的指令是32位指令)。 如果预取被禁用、这些指令中的每一条都会产生等待状态-大约7x3 = 21个等待周期(假定为32位指令)。
谢谢、此致、
Vamsi
Sundaram、
如果数据高速缓存中没有数据可用、则会产生等待状态、以将数据(128位对齐数据段)引入数据高速缓存(CPU 从此处获取)。 但是、整个128位将进入数据高速缓存、而不仅仅是请求的数据。 因此、如果下一个数据请求落入缓存中的128位数据、则不会造成等待状态损失。 请注意、这没有进一步的预取优势(就像我在代码空间中解释的那样)。
请注意、进入缓存的128位数据始终是 Flash 存储器中的128位对齐数据段。 例如、如果 CPU 在地址0x80003处请求数据、如果该数据丢失、则数据高速缓存将填充从0x80000到0x80007的数据。
谢谢、此致、
Vamsi
Sundaram、
1.我可以理解。 它们不受保护。 在进入指令缓冲区和数据高速缓存之前、会评估闪存内容的 ECC 正确性。
正如我在 TRM 的"3.12.8.1.1标准读取模式"一节中提到的、你可以使用它。 但性能将会很差、因为每次 闪存访问都会产生3个等待状态(您需要3个处于160MHz 的等待状态)、因为每次访问都会创建一个唯一的闪存组访问。
谢谢、此致、
Vamsi