执行传输到 CPU 的长字需要多少周期和多大的周期

How many and what size cycles will be needed to perform longword transferred to the CPU

该任务适用于架构 ColdFire 处理器 MCF5271:

我不明白执行到 CPU 的长字传输或字传输需要多少周期和多大的周期。我正在阅读图表,但看不出有什么联系?非常感谢任何意见。我附上了 2 个示例和答案。

DATA BUS SIZE

MCF5271 manual在第17章讨论了处理器的外部接口。处理器实现了一个字节可寻址地址space,带有32位外部数据总线。 D[31:0]信号代表数据总线,A[23:0]信号代表地址总线,BS[3:0](低电平有效)信号代表字节使能信号。即使数据总线为 32 位宽,连接到它的内存模块也可以是 32 位、16 位或 8 位宽。这称为内存端口大小。该章的图 17-2 显示了所有这些信号是如何相互关联的。

Table同一章的 17-2 显示了支持的传输大小(由称为 TSIZ[1:0] 的信号指定)。

A[0]和A1地址信号指定传输的对齐方式。内存对齐在同一章的第 17.7 节中定义。

Because operands can reside at any byte boundary, unlike opcodes, they are allowed to be misaligned. A byte operand is properly aligned at any address, a word operand is misaligned at an odd address, and a longword is misaligned at an address not a multiple of four. Although the MCF5271 enforces no alignment restrictions for data operands (including program counter (PC) relative data addressing), additional bus cycles are required for misaligned operands.

将所有这些信息放在一起,我们可以轻松确定通过内存端口将 1 字节、2 字节、4 字节数据传输到任何内存位置(对齐或未对齐)需要多少个周期大小 1 字节、2 字节或 4 字节。

让我们考虑一下您所附图片中的示例。如何通过 32 位内存端口在地址 0x0000003 存储一个长字?关注端口大小为 32 位的行。我们有 A[1:0] = 11。因此首先必须使用 BS[3:0] = 1110 执行单字节传输。其他三个字节需要传输到位置 0x0000004(A[1:0] = 00)、0x0000005 (A[1:0] = 01) 和 0x0000006 (A[1:0] = 10)。这可以使用三个单字节传输(需要三个周期)或使用一个双字节传输后跟一个单字节传输(需要两个周期)来完成。