Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arm 在Zynq上使用多核_Arm_Multicore_Zynq - Fatal编程技术网

Arm 在Zynq上使用多核

Arm 在Zynq上使用多核,arm,multicore,zynq,Arm,Multicore,Zynq,直到今天我还在单核上编程,现在我需要在多核上运行代码。 我研究了大约一周,对此有一些问题 顺便说一下,我正在使用Zynq 702、Arm DS-5和Dstream。当我使用运行在Core0上的现有代码时,我正在尝试实现这一点 我真的没有在core1上做什么,只是连接到它,只是想观察它跳到0xFFFFF0和这个地址的值。我没有设置任何以core1为目标的中断处理程序。我唯一的“观察”情况可以吗?或者我真的需要设置一些配置?如何以最简单的方式实现这一点 我连接到core1并观察其状态,同时我的程

直到今天我还在单核上编程,现在我需要在多核上运行代码。 我研究了大约一周,对此有一些问题

顺便说一下,我正在使用Zynq 702、Arm DS-5和Dstream。当我使用运行在Core0上的现有代码时,我正在尝试实现这一点


我真的没有在core1上做什么,只是连接到它,只是想观察它跳到0xFFFFF0和这个地址的值。我没有设置任何以core1为目标的中断处理程序。我唯一的“观察”情况可以吗?或者我真的需要设置一些配置?如何以最简单的方式实现这一点


我连接到core1并观察其状态,同时我的程序继续在core0上运行。顺便说一下,core1上没有运行的应用程序。。它上升到地址0x300,在这个地址有一个WFE命令,紧接着是一个B(ranch)命令,它再次分支到0x300。这就像一个循环,我的代码在WFE命令上停留约0.5秒,跳转到下一条指令B并再次分支到WFE

我认为core1应该在执行WFE命令后保持在那里,除非我发送一个事件,而不是执行下面的B(ranch)命令,对吗?如果是这样,这是否意味着core1会定期从某个地方获取evets? 将板与Dstream调试器连接是否会导致事件


如果我设置了地址0xFFFFF0的值,是什么使core1跳转到0xFFFFF0的地址,当core1处于WFE/WFI状态时,一个简单的SEV命令就足够了吗?
如果0xFFFFF0的值为0x00000000,那么会发生什么情况?Core1是否再次返回调用WFE/WFI?或者其他什么?

如果core1处于WFE循环(状态),core0上的SEV cmd会唤醒core1。如果输入WFE,则进入待机状态,SEV为唤醒,来自SCU的请求也可以进行唤醒(对于MP系统中的缓存一致性操作)

注: APU复位后,core1处于WFE状态,执行从0xFFFFFE00到0xFFFFF0的代码

启动后,core1处于WFE状态。如果core1获得SEV,它将跳转到存储在0xFFFFF0的地址。如果在SEV之后更新目标地址,则core1将返回WFE状态。这是因为0xFFFFF0具有WFE指令的地址

正确的“启动顺序”是:

  • 将core1应用程序的地址写入0xFFFFF0
  • 执行SEV指令
  • (请参阅Zynq-7000全可编程SoC技术参考手册第158页(6.1.10)

    如果0xFFFFF0的值为0x00000000,您将得到不可预测的结果。(取决于您的cpu状态)。

    在我的情况下(Cyclone V SoC)冷复位后,CPU1处于“保持在复位”状态。 为了从CPU0启动CPU1,我添加了重置\u处理程序的代码:

    ;System Manager addr is 0xFFD08000
    LDR r0, =0xFFD080C4 ;cpu1startaddr
    MOV r1, #0x02000000 ;start addr from linker script
    STR r1, [r0]
    ;Reset Manager add is 0xFFD05000
    LDR r0, =0xFFD05010 ;MPU Module Reset Register
    MOV r1, #0
    STR r1, [r0] ; write 0 to power_on cpu1