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

问题描述 投票:0回答:1

对于德州仪器(TI)制造的CC3220S,我开发了一种使用C编程语言的函数,该函数使用内联汇编等待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"); 
}
assembly arm instruction-set
1个回答
2
投票

根据您的参考,

周期计数基于等待状态为零的系统。

从您的来源看,循环是,

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

假设编译器未插入其他代码,则在重新填充指令管道时,您的内存可以处于2个等待状态。另外,供应商可以修改内核,而无需满足此时序要求。一些供应商许可“架构”并设计用于实现指令集的逻辑。其他人则购买实现Cortex-M4的逻辑块。我想TI会晚一些,而内存等待状态就是您的问题。您没有注意到代码位于哪个存储设备中。如果您的系统使用“串行闪存”,则两个等待状态的额外延迟根本就不足为奇。这会将周期数增加到8,这就是您观察到的。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.