QEMU中CPU的定时器电源

QEMU中CPU的定时器电源,c,embedded-linux,stm32,qemu,cortex-m,C,Embedded Linux,Stm32,Qemu,Cortex M,我试图用CPU cortex m4模拟STM32机器的时钟控制。它由HCLK提供给堆芯的时钟提供 RCC将AHB时钟(HCLK)除以8,为Cortex系统定时器(SysTick)的外部时钟供电。SysTick可以使用此时钟或Cortex时钟(HCLK),可在SysTick控制和状态寄存器中配置 现在Cortex m4已经被QEMU模拟了,我也在STM32模拟中使用同样的方法。我的困惑是,我是否应该提供我为STM32开发的“HCLK”的时钟频率,以便向cortex m4发送时钟脉冲,或者corte

我试图用CPU cortex m4模拟STM32机器的时钟控制。它由HCLK提供给堆芯的时钟提供

RCC将AHB时钟(HCLK)除以8,为Cortex系统定时器(SysTick)的外部时钟供电。SysTick可以使用此时钟或Cortex时钟(HCLK),可在SysTick控制和状态寄存器中配置

现在Cortex m4已经被QEMU模拟了,我也在STM32模拟中使用同样的方法。我的困惑是,我是否应该提供我为STM32开发的“HCLK”的时钟频率,以便向cortex m4发送时钟脉冲,或者cortex-m4本身是否有自己的时钟,HCLK的时钟频率为168MHz?或者时钟频率不同


如果我必须将此频率传递给cortex m4,我该怎么做?

Systick通过多路复用器提供,您可以选择AHB总线时钟或除以8的系统计时器时钟


QEMU的模拟通常不会尝试模拟以兆赫速率发送脉冲的实际时钟线(这将是非常低效的)。相反,当来宾对计时器设备进行编程时,计时器设备的模型会设置一个内部QEMU计时器,以便在适当的持续时间后触发(处理程序随后会触发中断行或执行模拟硬件行为所需的任何操作)。持续时间是根据来宾写入设备寄存器的值以及时钟频率的值来计算的

QEMU没有任何处理诸如可编程时钟分频器或在SoC上路由时钟信号的“时钟树”之类的基础设施(可以添加一个,但还没有人找到它)。取而代之的是,定时器设备通常使用硬编码频率写入,或者可以写入具有QOM属性的定时器设备,该属性允许频率由创建它们的电路板或SoC型号代码设置

特别是对于Cortex-M型号中的SysTick设备,当前实施将使用与以下频率对应的持续时间对其使用的QEMU定时器进行编程:

  • 1MHz,如果来宾已将CLKSOURCE位设置为1(处理器时钟)
  • 如果客户将CLKSOURCE设置为0(外部参考时钟),则线路板型号通过“系统时钟刻度”全局变量(例如mps2线路板的25MHz)配置的某项功能
(系统时钟标度全局应设置为纳秒/秒/时钟频率(单位:赫兹)

1MHz只是一个愚蠢的硬编码值,还没有人费心改进它,因为我们还没有遇到关心它的客户代码。全球时钟系统虽然笨重,但仍能正常工作

所有这些都不会影响模拟QEMU CPU的速度(即在给定时间段内执行多少条指令)。默认情况下,QEMU CPU将“尽快”运行。您可以使用-icount选项指定您希望CPU以相对于实时的特定速率运行,该速率隐式地设置了“CPU频率”,但这只是粗略地设置了一个平均值——某些指令的运行速度比其他指令快得多,这是不可预测的。总的来说,QEMU的理念是“尽可能快地运行来宾代码”,我们不会尝试任何接近循环精度或其他紧时间模拟的方法


从2020年起更新:QEMU现在有一些API和基础设施用于建模时钟树,这些API和基础设施记录在源代码树的docs/devel/clocks.rst中。这基本上是上述概念的形式化版本,使一台设备更容易告诉另一台设备“我的时钟频率现在是20MHz”,而无需“系统时钟刻度”之类的破解全局变量或特殊QOM属性。

一个旧线程和一个经常被问到的问题,所以这应该可以帮助你们中的一些人尝试模拟cortex系统


如果在引导时使用.dtb,那么在.dts中可以向“timers”块添加一行
clock frequency=并重新编译它。这确实会提高cortex处理器的速度。显然,该值是一个很大的数字。

我认为您所指的参考手册是其他STM32变体,因为对于STM32407,该寄存器不存在。我的问题更多的是关于如何将这个实现与qemu@ChandrikaJoshi我认为你是一个很新的ARM程序员。这个寄存器存在于所有的皮层装置中,它是核心的一部分。但是要了解它,你需要阅读编程手册,而不是描述外围设备的参考手册。这是我关于硬件仿真和ARM处理器的第一个项目。你能告诉我编程手册吗?谢谢。@ChandrikaJoshi它和RM在同一个地方。进入STH STM网页,找到你的微博客。在“参考资料”中,您将拥有所有文档。顺便说一句,为uCs使用模拟器只是浪费时间。Buj核子板和使用真正的硬件这正是我想知道的。非常感谢你,彼得。我想知道是否有任何文档可供我获取有关仿真平台的此类信息?如果我想比较实时时钟和cpu时钟以及主机时钟的差异,我该怎么做?QEMU-monitor中是否有任何选项?或者我必须点击一个变量并打印它?