PSoC 6 SRAMコントローラの詳細

Tip / ログイン to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
Translation_Bot
Community Manager
Community Manager
Community Manager

こんにちは

私はアーキテクチャ技術マニュアルを読んでいましたが、38ページで「CPUSSには最大3つの同一のSRAMコントローラがあります。詳細については、デバイスのデータシートを参照してください。 デバイスのデータシートで「3つの」SRAMコントローラに関する明確な情報を見つけようとしましたが、この質問を明確にできませんでした。

SRAMは1ブロックメモリですか、それとも3ブロックの個別のメモリで、各ブロックには独自のコントローラとシステムバスへの接続がありますか? 私の質問にもう少し色を付けるために、両方のコアがこのメモリに同時にアクセスしている場合、SRAMが競合遅延に苦しむかどうか疑問に思っていました。

 

感謝。

 

0 件の賞賛
1 解決策
Translation_Bot
Community Manager
Community Manager
Community Manager

@Raz3l ,

私はあなたの両方の質問に答えようとしましょう。 最後に1つ先。


...両方のコアがこのメモリに同時にアクセスしている場合、SRAMが競合遅延に苦しむかどうか疑問に思っていました。

 

両方のコアが同じSRAMセクションにアクセスしようとすると、SRAMの読み出しまたは書き込みが自動的に正しく処理されます。 実際の内容を読み取ることを保証するために、内部 HW アービトレーションがあります。 アービトレーション HW は DMA HW に似ています。

このアービトレーションにより、1つのコアがそのSRAMにアクセスすると、ある程度の遅延が発生する可能性があります。 これは予期されるものであり、実行時に正確に予測することはできません。 したがって、SWに基づくタイミングループはわずかに長くなる可能性があります。

今あなたの最初の質問のために:


SRAMは1ブロックメモリですか、それとも3ブロックの個別のメモリで、各ブロックには独自のコントローラとシステムバスへの接続がありますか?

 

SRAMの3つの分離されたブロックの主な理由は、動作させたい低電力モードに応じて、SRAMの特定のセクション(バンク)の電源 がオフになるためです。 低電力モードで電源を入れたままにしたSRAMは、数百pAからuAの電流を消費する可能性があります。  これにより、バッテリーの消耗が早くなります。

したがって、戦略は、低電力モードで生き残るためにどのSRAMバンクをオンのままにしておく必要があるかを決定することです。

あなたが持つべき最も重要な懸念は、「複数のライター/複数のリーダー」のジレンマです。 これは、2人が口座の残高を調整せずに同じ当座預金口座から小切手を書くのに似ています。 オーバードローされる可能性が高いです。  (ここで古代の参照で申し訳ありません  。

両方のコアがまったく同じSRAM変数に同時に効果的に書き込む場合、後でどちらかのCPUでそのデータを読み取るときに、値が期待どおりにならない可能性があります。

 「複数の ライター/複数のリーダー」のジレンマを回避するために使用することが推奨される 3つのテクニックです 。

  1. 変数 (または変数の範囲) を IPC 変数として宣言します。 IPC (プロセッサ間通信)。
    このSWメソッドは、セマフォ、ミューテックス(相互排除)シグナリングなどのSW技術を使用して、使用時に可変の所有権を保証します。これは、変数にアクセスするためにより多くのCPU時間とレイテンシーを必要としますが、「安全」で推奨される方法です。
  2. IPC 呼び出しを使用して変数にアクセスします。 変数に直接アクセスしないでください。 IPC 呼び出しは、読み取られた場合、変数を別の変数にロードします。IPC呼び出しでは、書き込み時にIPC関数内に「新しい」変数値が必要になります。
  3. 共有変数を使用する一時変数を「volatile」として宣言します。これにより、コンパイラの最適化が一時変数をレジスタ内に格納するのを防ぐことができます。最適化コンパイラによっては、この手順が必要ない場合があります。 それは単なる合理的な予防策です。

元の投稿で解決策を見る

0 件の賞賛
3 返答(返信)
Translation_Bot
Community Manager
Community Manager
Community Manager

@Raz3l ,

私はあなたの両方の質問に答えようとしましょう。 最後に1つ先。


...両方のコアがこのメモリに同時にアクセスしている場合、SRAMが競合遅延に苦しむかどうか疑問に思っていました。

 

両方のコアが同じSRAMセクションにアクセスしようとすると、SRAMの読み出しまたは書き込みが自動的に正しく処理されます。 実際の内容を読み取ることを保証するために、内部 HW アービトレーションがあります。 アービトレーション HW は DMA HW に似ています。

このアービトレーションにより、1つのコアがそのSRAMにアクセスすると、ある程度の遅延が発生する可能性があります。 これは予期されるものであり、実行時に正確に予測することはできません。 したがって、SWに基づくタイミングループはわずかに長くなる可能性があります。

今あなたの最初の質問のために:


SRAMは1ブロックメモリですか、それとも3ブロックの個別のメモリで、各ブロックには独自のコントローラとシステムバスへの接続がありますか?

 

SRAMの3つの分離されたブロックの主な理由は、動作させたい低電力モードに応じて、SRAMの特定のセクション(バンク)の電源 がオフになるためです。 低電力モードで電源を入れたままにしたSRAMは、数百pAからuAの電流を消費する可能性があります。  これにより、バッテリーの消耗が早くなります。

したがって、戦略は、低電力モードで生き残るためにどのSRAMバンクをオンのままにしておく必要があるかを決定することです。

あなたが持つべき最も重要な懸念は、「複数のライター/複数のリーダー」のジレンマです。 これは、2人が口座の残高を調整せずに同じ当座預金口座から小切手を書くのに似ています。 オーバードローされる可能性が高いです。  (ここで古代の参照で申し訳ありません  。

両方のコアがまったく同じSRAM変数に同時に効果的に書き込む場合、後でどちらかのCPUでそのデータを読み取るときに、値が期待どおりにならない可能性があります。

 「複数の ライター/複数のリーダー」のジレンマを回避するために使用することが推奨される 3つのテクニックです 。

  1. 変数 (または変数の範囲) を IPC 変数として宣言します。 IPC (プロセッサ間通信)。
    このSWメソッドは、セマフォ、ミューテックス(相互排除)シグナリングなどのSW技術を使用して、使用時に可変の所有権を保証します。これは、変数にアクセスするためにより多くのCPU時間とレイテンシーを必要としますが、「安全」で推奨される方法です。
  2. IPC 呼び出しを使用して変数にアクセスします。 変数に直接アクセスしないでください。 IPC 呼び出しは、読み取られた場合、変数を別の変数にロードします。IPC呼び出しでは、書き込み時にIPC関数内に「新しい」変数値が必要になります。
  3. 共有変数を使用する一時変数を「volatile」として宣言します。これにより、コンパイラの最適化が一時変数をレジスタ内に格納するのを防ぐことができます。最適化コンパイラによっては、この手順が必要ない場合があります。 それは単なる合理的な予防策です。
0 件の賞賛
Translation_Bot
Community Manager
Community Manager
Community Manager

@Raz3l ,

どういたしまして。

IPCの使用方法の例を示すインフィニオンのコードがあります。それを出発点として使用してください。

0 件の賞賛
Translation_Bot
Community Manager
Community Manager
Community Manager

レン、返信をありがとう、私の質問 🙂を完全に明確にしました

0 件の賞賛