10

今日まで、私は単一のコアでプログラミングしていましたが、今では複数のコアでコードを実行する必要があります。私は約1週間調査しており、これについていくつか質問がありました。

ちなみに、Zynq 702、Arm DS-5、Dstream を使用しています。そして、Core0で実行されている既存のコードを使用しながら、これを達成しようとしています.


core1 には何もせず、単に接続しただけで、0xFFFFFFF0 とこのアドレスの値にジャンプすることを確認したいだけです。core1 を対象とする割り込みハンドラは設定していません。私の唯一の「観察」状況で大丈夫ですか?または、本当にいくつかの構成を設定する必要がありますか? 最も簡単な方法でこれを達成するにはどうすればよいですか?


core1 に接続し、core0 でプログラムを続行しながらその状態を観察します。ところで、core1 で実行されているアプリケーションはありません。アドレス 0x300 まで上がります。このアドレスには WFE コマンドがあり、その直後に、再び 0x300 に分岐する B(ranch) コマンドがあります。これはループのようなもので、私のコードは WFE コマンドで約 0.5 秒留まり、次の命令 B にジャンプし、再び WFE に分岐します......

Core1 は WFE コマンドを実行した後、次の B(ranch) コマンドを実行するのではなく、EVENT を送信しない限りそこにとどまるべきだと思いますよね? もしそうなら、それはcore1がどこかから定期的にイベントを取得していることを意味しますか? ボードを Dstream Debugger に接続すると EVENT が発生しますか?


アドレス 0xFFFFFFF0 の値を設定すると、core1 が 0xFFFFFFF0 のアドレスにジャンプするのはなぜですか? core1 が WFE/WFI 状態にある間、単純な SEV コマンドで十分ですか? 0xFFFFFFF0 の値が 0x00000000 の場合、どうなりますか? Core1 は呼び出し元の WFE/WFI に戻りますか? または、他の何か?

4

2 に答える 2

7

core1 が WFE ループ (状態) にある場合、core0 の SEV コマンドは core1 をウェイクアップします。WFE に入り、スタンバイ状態になり、SEV がウェイクアップの場合、SCU からの要求によってウェイクアップも実行できます (MP システムでのキャッシュ コヒーレンシ操作用)。

注: APU のリセット後、core1 は WFE 状態になり、0xFFFFFE00 から 0xFFFFFFF0 までのコードを実行します。

起動後、core1 は WFE 状態になります。core1 が SEV を取得すると、0xFFFFFFF0 に格納されているアドレスにジャンプします。SEV の後に宛先アドレスを更新すると、core1 は WFE 状態に戻ります。これは、0xFFFFFFF0 に WFE 命令のアドレスがあるためです。

正しい「起動シーケンス」は次のとおりです。

  1. core1 アプリのアドレスを 0xFFFFFFF0 に書き込みます
  2. SEV命令を実行

(Zynq-7000 All Programmable SoC テクニカル リファレンス マニュアルの 158 ページ (6.1.10) を参照)

0xFFFFFFF0 の値が 0x00000000 の場合、予測できない結果が得られます。(CPUの状態によって異なります)。

于 2014-12-17T08:47:19.287 に答える