哪个时钟源用于 cortex-M4 中的时钟指令
Which clock source is used for clocking instructions in cortex-M4
在我的 Cortex-M4 中,我使用 8Mhz 振荡器作为 HSE,然后使用 PLL 将其倍增至 72Mhz,然后驱动 SYSCLK。这让我开始思考,哪个时钟是用来执行指令的?换句话说,如果我们的 CPI 是 1(当然是理想值),那是否意味着我们每秒执行 800 万条指令或每秒 7200 万条指令?
我还发现了这个 DWT 可以用来测量时钟周期,从而测量 CPI。所以我猜测用于执行指令的时钟与 DWT 使用的时钟相同吗?
它由 HCLK 驱动(不是为系统定时器计时的 SYSCLK,它不必等于 HCLK)。 HCLK 的来源可由程序员设置。
if our CPI is 1 (an ideal value, of course), does that mean we would
execute 8 million instructions per second or 72 million instructions
per second?
您可以看到每条指令需要多少个周期:http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0439b/CHDDIGAC.html
实际速度取决于很多因素,但主要取决于代码和数据所在的位置以及高级 uC 功能。
如果您从内部 TCM SRAM 执行代码并将数据放入 SRAM(或者甚至在 TCI 和 TCD SRAM 中的某些 uC 上更好),您可以存档理论执行效率,因为这些存储器以核心时钟频率工作没有等待状态或总线等待状态。理想情况下,如果 uC 具有 TC 内存并且指令和数据都使用单独的总线获取。
如果您的代码驻留在闪存中 - 此内存可能会引入一些等待状态。 STM uC(ART 加速器)以较大的块读取闪存并提前获取指令。它允许那些 uC 几乎以最大速度执行。问题是分支指令需要刷新管道并再次获取指令。
在我的 Cortex-M4 中,我使用 8Mhz 振荡器作为 HSE,然后使用 PLL 将其倍增至 72Mhz,然后驱动 SYSCLK。这让我开始思考,哪个时钟是用来执行指令的?换句话说,如果我们的 CPI 是 1(当然是理想值),那是否意味着我们每秒执行 800 万条指令或每秒 7200 万条指令?
我还发现了这个 DWT 可以用来测量时钟周期,从而测量 CPI。所以我猜测用于执行指令的时钟与 DWT 使用的时钟相同吗?
它由 HCLK 驱动(不是为系统定时器计时的 SYSCLK,它不必等于 HCLK)。 HCLK 的来源可由程序员设置。
if our CPI is 1 (an ideal value, of course), does that mean we would execute 8 million instructions per second or 72 million instructions per second?
您可以看到每条指令需要多少个周期:http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0439b/CHDDIGAC.html
实际速度取决于很多因素,但主要取决于代码和数据所在的位置以及高级 uC 功能。
如果您从内部 TCM SRAM 执行代码并将数据放入 SRAM(或者甚至在 TCI 和 TCD SRAM 中的某些 uC 上更好),您可以存档理论执行效率,因为这些存储器以核心时钟频率工作没有等待状态或总线等待状态。理想情况下,如果 uC 具有 TC 内存并且指令和数据都使用单独的总线获取。
如果您的代码驻留在闪存中 - 此内存可能会引入一些等待状态。 STM uC(ART 加速器)以较大的块读取闪存并提前获取指令。它允许那些 uC 几乎以最大速度执行。问题是分支指令需要刷新管道并再次获取指令。