[EN]: は、アメリカのサイトへのジャンプを意味しています。
アカウント・インフォ         see this page in English

LatticeNEWS April 2009


LatticeMico32 システムがLatticeMico32ベース・プラットフォームの "インラインメモリ" をサポート

LatticeMico32システムのMicoSystemBuilderツールを使用して作成されたシステム・プラットフォームに、インラインメモリを内蔵可能に

LatticeMico32 (CPU) を、WISHBONEインターフェイスではなく、LatticeMico32の専用プロセッサ・ローカルバスを通じて、オンチップ・メモリ(EBR)に接続できるようになりました。このようにCPUに高速接続されたメモリはインラインメモリと呼ばれます。図1に示すように、プロセッサ・ローカルバスはインラインメモリとの間に高速なポイントツーポイント・リンクを実現し、LatticeMico32の命令(およびデータ)ポートを提供します。

インラインメモリには次の2種類があります。

  • 命令インラインメモリ – このメモリ・コンポーネントはLatticeMico32の命令ポートに接続され、すべてのソフトウェア・アプリケーションのプログラムコードのみの格納に使用されます。
  • データ・インラインメモリ – このメモリ・コンポーネントはLatticeMico32のデータポートに接続され、すべてのソフトウェア・アプリケーションの読み取り専用または読み書きデータの格納に使用されます。

 

LatticeMico32 with Inline Memories

図 1

 

LatticeMico32システムビルダで作られた設計では、すべてのコンポーネント(LatticeMico32を含む)がシステムWISHBONEバスに接続されます。このアーキテクチャには、LatticeMico32の性能を低下させる2つの要因があります。

  • バスマスタとスレーブ間のすべてのトランザクションに、1クロックサイクルよりも余分に要します。そのため、WISHBONEインターフェイスを通じたLatticeMico32からEBRへのすべてのアクセスが、完了までに1サイクルよりも長くかかるため、そのサイクルの間LatticeMico32が停止します。
  • バスマスタとスレーブ間に実行中のトランザクションが存在するときは、他のバスマスタが起動したトランザクションを開始できません。そのため、WISHBONEインターフェイスを通じたLatticeMico32からEBRへのすべてのアクセスが、不定時間だけ保留されます。

インラインメモリを使用すると、LatticeMico32が必要とするアプリケーション・プログラムとデータの両方に対して、WISHBONEバスでEBRを使用した場合の前述の欠点が解消されます。LatticeMico32とインラインメモリとの間の専用ポイントツーポイント・リンクによって、リソース競合が確実に防止されます。そのためLatticeMico32は、システムWISHBONEバス上に実行中のトランザクションが存在していても、インラインメモリへのアクセスを開始でき、LatticeMico32の性能がシステム上の問題による影響を受けなくなります。また、このポイントツーポイント・リンクはLatticeMico32と密結合されているため、シングルサイクル・アクセスが可能です。

インラインメモリの主な特長

  • 命令とデータそれぞれに対する専用メモリ.
  • 各インラインメモリのサイズを制限するのは、FPGA上で利用可能なEBRリソースのみ
  • LatticeMico32からインラインメモリへのシングルサイクル・アクセスを保証
  • 命令実行が、システムWISHBONEバスの使用率/負荷状態の影響を受けないため、インラインメモリ内のアプリケーションに対してLatticeMico32が一定のパフォーマンスを発揮
  • インラインメモリは、LatticeMico32の設計内で他のWISHBONEベースのメモリ・コンポーネントと共存可能

インラインメモリの適用範囲

インラインメモリを使用可能な設計の代表は、ソフトウェア全体がシステムWISHBONEバス上のオンチップ・メモリに格納されているものです。このような設計では、WISHBONEベースのオンチップ・メモリをインラインメモリに置換すると、EBRリソースを浪費することなく、アプリケーションの性能が高まります。その他の例としては、LatticeMico32ベースの設計のソフトウェア・サイズが大きく、DRAMやSRAMなどのオフチップ・メモリが必要になる場合があります。そうした設計ではインラインメモリも使用可能ですが、サイズに制限があるため、アプリケーションのタイム・クリティカルな部分のみをインラインメモリに格納するとよいでしょう。その一例としては、LatticeMico32上で実行されるリアルタイム・オペレーティング・システム (RTOS)があります。RTOSの特長の1つは、割り込みなど一部のイベントはタイミングが重要で、可能な限り高速に処理する必要があることです。そのような実装では、ソフトウェアのタイム・クリティカルなイベントを処理する部分をインラインメモリに割り当てると、応答時間が保証されます。

LatticeMico32キャッシュを持たないWISHBONEベースのメモリに対するパフォーマンス上の利点

LatticeMico32とインラインメモリを直接接続すると、LatticeMico32でシングルサイクルの読み書きアクセスが可能になるという利点があります。図2は、インラインメモリを使用した場合と、WISHBONEインターフェイスでLatticeMico32に接続されたオンチップメモリ(EBR)を使用した場合の、サイクルレベルでの性能上の利点の分析を示しています。図2では、インラインメモリとWISHBONEベースのオンチップEBRが、LatticeMico32からの読み取りアクセスに要するサイクル数を比較しています。インラインメモリが起動した読み取りアクセスは、その次のサイクルで完了しますが、WISHBONEベースのEBRが起動した読み取りアクセスには4サイクルかかっています。LatticeMico32が起動した書き込みアクセスでも、同様の動作が見られます。したがって、プログラム・コードやデータをインラインメモリに格納すると、WISHBONEベースのメモリに比べて3倍以上の高速化を実現できます。

 

LatticeMico32 and Inline Memories

図 2

 

LatticeMico32キャッシュを持つWISHBONEベースのメモリに対する性能の利点

LatticeMico32に命令およびデータキャッシュを構成し、WISHBONEベースのメモリによるパフォーマンスへの影響を軽減することはよく行われます。キャッシュを使用すると、理論上はシングルサイクル・アクセスが可能になります。ただし実際には、シングルサイクルのキャッシュアクセスが行えず、インラインメモリの方が性能が向上することがよくあります。次のシナリオがあります。

  • キャッシュアクセス(読み取りまたは書き込み)にミスがあると、WISHBONEインターフェイス上のメモリ・コンポーネントへのアクセスが発生します。その結果、キャッシュアクセスの完了までに複数サイクルを要します。
  • LatticeMico32内のデータキャッシュはライトスルー方式であるため、LatticeMico32からデータキャッシュへの書き込みが発生すると、WISHBONEインターフェイス上のメモリ・コンポーネントへのアクセスが直ちに行われます。そのため、設計上のルールとして、すべてのデータキャッシュ書き込みが複数サイクルのアクセスになります。

インラインメモリを持つLatticeMico32デザインの作成

インラインメモリは、MicoSystemBuilder(MSB)のLatticeMico32 GUIを使用して、自動的に実装することができます。実装されると、設計内の他のメモリ・コンポーネントと同様に認識されます。インラインメモリのサイズは、FPGA上で利用可能なEBRリソースの数のみに制限されます。このメモリは、4GB(32ビットアドレス可能な範囲)内の任意のアドレスに配置でき、設計者がアドレスを決定することも、MSBで自動的に配置することもできます。

ソフトウェア開発者にとって、インラインメモリは設計内の他のメモリ・コンポーネントと同じであり、LatticeMico32 C/C++ SPEを使用してインラインメモリに、アプリケーション全体を自動的に割り当てることも、デフォルトのアプリケーション部分(.boot、.text、.rodata、.data、.bss)を割り当てることもできます。このプロセスは、ソフトウェアを他のWISHBONEベースのメモリに割り当てるために使用するプロセスと同一です。それに対して、前述のようにインラインメモリのアプリケーションや用途の代表例は、ソフトウェアコードとデータのタイム・クリティカルな部分のみをインラインメモリに割り当てることです。これを実現するためには、ソフトウェア開発者がソフトウェアコードとデータのタイム・クリティカルな部分を確認し、ユーザ定義のセクションに分離してから、それをユーザ定義のリンカスクリプトでインラインメモリに割り当てる必要があります。このようなユーザ定義のセクションとリンカスクリプトの作成は、オープンソース・コミュニティでは一般的であり、広く使用されています。ソフトウェア開発者に便利なよう、このプロセスはLatticeMico32 Software Developer User Guideに詳しくまとめてあります(コード例もあります)。