首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Zynq上使用多核

在Zynq上使用多核
EN

Stack Overflow用户
提问于 2014-11-13 09:22:08
回答 2查看 3.1K关注 1票数 10

直到今天,我还在一个核上编程,现在我需要在多个核上运行我的代码。我研究了大约一个星期,并对此有一些疑问。

顺便说一下,我用的是Zynq 702,Arm DS-5和Dstream。当我使用我已经在Core0上运行的代码时,我正在尝试实现这个目标。

我真的没有在core1上做任何事情,只是连接到它,只想观察它跳到0xFFFFFFFF0和这个地址的值。我没有设置任何针对core1的中断处理程序。我唯一的“观察”情况可以吗?还是我真的需要设置一些配置?我怎样才能用最简单的方法实现这一点呢?

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

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

如果我设置了地址0xFFFFFFFF0的值,是什么使core1跳转到0xFFFFFF0的地址,在core1处于WFE/WFI状态时,是一个简单的SEV命令吗?如果0xFFFF0的值为0x00000000,那么会发生什么?Core1是否会再次回到呼叫WFE/WFI?还是别的什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-17 08:47:19

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

注意:在APU重置后,core1处于WFE状态,执行从0xFFFFE00到0xFFFFFF0的代码。

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

正确的“启动顺序”是:

  1. 将core1应用程序的地址写入0xFFFFF0
  2. 执行SEV指令

(请看Zynq-7000全可编程SoC技术参考手册第158页(6.1.10) )

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

票数 7
EN

Stack Overflow用户

发布于 2016-04-15 08:37:14

在我的例子(旋风V SoC)后,冷复位CPU1有“保持在复位”状态。为了从CPU1中启动CPU0,我向Reset_Handler添加了代码:

代码语言:javascript
复制
;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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26905258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档