从 ARM 购买 IP 的半导体制造商是否应该满足参考手册中描述的指令的时钟周期?

Should a semiconductor manufacturer buying IPs from ARM meet the clock cycles for an instruction described in the reference manual?

针对德州仪器的CC3220S,我用C语言开发了一个使用inline Assembly等待1秒的函数(不包括循环前和循环外的指令)。 根据 ARMv7-M reference manual,以 PC 为目标的 MOV 指令需要 1 + P 个指令周期,其中 P 在 1 和 3 之间,具体取决于流水线的重新填充。 最坏情况这意味着循环在 6 个时钟周期内执行。

CC3220S 其时钟速度为 80 MHz。然而,执行循环 1000 万次会产生所需的 1 秒延迟(已使用逻辑分析仪验证)。 这意味着循环使用 8 个时钟周期。 我怀疑指令使用的时钟周期数。 因此我的问题是,从 ARM 购买 IP 的半导体制造商是否应该满足参考手册中描述的指令的时钟周期?

void delay_1sec(void)
{
    __asm("    PUSH {r4-r5,lr}");  

    __asm("    LDR r4, [pc, #12]"); 

    __asm("    MOV r5, pc");        
    __asm("    NOP");               

    __asm("    SUBS r4, #1");   /* 1 instruction cycle */ 
    __asm("    ITE NEQ");       /* 1 instruction cycle */ 

    __asm("    MOV pc, r5");    /* 1 + P instructions (where P is between 1 and 3 depending on                   pipeline refill) */ 


    __asm("    POP {r4-r5,pc}"); 
    __asm("    .word    10000000"); 
}

根据您的参考,

The cycle counts are based on a system with zero wait states.

从你的来源来看,循环是,

SUBS r4, #1   /* 1 cycle */ 
ITE NEQ       /* 1 cycle */ 
MOV pc, r5    /* 4 cycles */ 

假设编译器没有插入额外的代码,您的内存在重新填充指令流水线时可以处于 2 个等待状态。此外,供应商可能会修改内核并且不需要满足此时序要求。一些供应商许可 'architecture' 并设计逻辑来实现指令集。其他人购买一个实现 Cortex-M4 的逻辑块。我猜 TI 是后者,内存等待状态是你的问题。您没有注意到您的代码位于哪个存储设备中。如果您的系统使用 'serial flash' 两个等待状态,额外的延迟就不足为奇了。这将使循环计数达到您所观察到的 8。

Hence my question, should a semiconductor manufacturer buying IPs from ARM meet the clock cycles for an instruction described in the reference manual?

从上面的答案是否定的。如果他们是架构被许可人,则周期计数可能会有所不同。它们需要二进制兼容(但情况并非总是如此)。但是,在您的情况下,我相信他们正在满足文档,它只需要通过计算内存等待状态将其完全应用于用例。板载 SRAM 也可以有等待状态。通常只有 TCM 是零等待状态。