(57)【要約】  ブロックダイヤグラム・モデルのブロックにおける信号Ｉ／Ｏバッファーをアドレス指定する方法は、基底アドレスと、要素オフセットと、折り返しサイズと、先頭オフセットと、ストライド因子とを決定する段階を含む。
2007525727.tif 000002
【特許請求の範囲】
【請求項１】
動的システムのブロックダイヤグラム・モデルにおいて、各計算領域に複数の信号入出力（Ｉ／Ｏ）タイプを提供する段階を含む方法。
【請求項２】
前記信号Ｉ／Ｏタイプをアドレス指定する段階が、
基底アドレスをアドレス指定する段階と、
要素オフセットをアドレス指定する段階と、
折り返しサイズをアドレス指定する段階と、
先頭オフセットをアドレス指定する段階と、
ストライド因子をアドレス指定する段階とを含む、請求項１に記載の方法。
【請求項３】
前記基底アドレスが、前記信号Ｉ／Ｏタイプの順次アクセス可能要素の先頭メモリアドレスである、請求項２に記載の方法。
【請求項４】
前記要素オフセットが、前記信号Ｉ／Ｏタイプにおけるi番目の要素を得るために前記基底アドレスと共に使用されるオフセット指標iである、請求項２に記載の方法。
【請求項５】
前記折り返しサイズは整数指標であって、これに達した後に前記信号Ｉ／Ｏタイプが折り返されると考えられる、請求項２に記載の方法。
【請求項６】
前記先頭オフセットは、前記基底アドレスに対する前記信号Ｉ／Ｏタイプの第１要素の相対位置を決定する整数オフセットである、請求項２に記載の方法。
【請求項７】
前記ストライド因子は、前記信号Ｉ／Ｏタイプの要素間のスペーシングを表す整数である、請求項２に記載の方法。
【請求項８】
前記信号Ｉ／Ｏタイプが柔軟な次元を含む、請求項２に記載の方法。
【請求項９】
信号Ｉ／Ｏタイプが、前記ブロックダイヤグラム内のブロックの出力からの信号値を維持し、当該信号値を１つ又は複数のブロックの入力に伝達するために用いる専用又は共用メモリ空間を含む、請求項１に記載の方法。
【請求項１０】
信号Ｉ／Ｏタイプは、前記入出力をメモリ内で編成する様態を含む、請求項１の方法。
【請求項１１】
前記計算領域が時間ベース領域である、請求項１の方法。
【請求項１２】
前記計算領域が物理モデリング計算領域である、請求項１の方法。
【請求項１３】
前記計算領域がデータフロー計算領域である、請求項１の方法。
【請求項１４】
前記計算領域がグラフィカル・プログラミング計算領域である、請求項１の方法。
【請求項１５】
前記Ｉ／Ｏタイプが、複数ポートブロックの各ポートで異なる、請求項１の方法。
【請求項１６】
前記ブロックダイヤグラムは複数ブロックを含むことができ、当該ブロック１つ又は複数が、信号値を保持するために用いられる信号Ｉ／Ｏタイプを取り決める、請求項１の方法。
【請求項１７】
前記取り決めは、信号Ｉ／Ｏタイプの選択に影響を与える利用可能な信号Ｉ／Ｏタイプの順位付けを含む、請求項１６に記載の方法。
【請求項１８】
ブロックダイヤグラム・モデルのブロックにおける信号Ｉ／Ｏバッファーをアドレス指定する方法であって、基底アドレスと、要素オフセットと、折り返しサイズと、先頭オフセットと、ストライド因子とを決定する段階を含む、方法。
【請求項１９】
前記基底アドレスが、前記信号Ｉ／Ｏバッファーの順次アクセス可能要素の先頭メモリアドレスである、請求項１８に記載の方法。
【請求項２０】
前記要素オフセットが、前記信号Ｉ／Ｏバッファーにおけるi番目の要素を得るために前記基底アドレスと共に使用なオフセット指標iである、請求項１８に記載の方法。
【請求項２１】
前記折り返しサイズは整数指標であって、これに達した後に前記信号Ｉ／Ｏバッファーが折り返されると考えられる、請求項１８に記載の方法。
【請求項２２】
前記先頭オフセットは、前記基底アドレスに対する前記信号Ｉ／Ｏバッファーの第１要素の相対位置を決定する整数オフセットである、請求項１８に記載の方法。
【請求項２３】
前記ストライド因子は、前記信号Ｉ／Ｏバッファーの要素間のスペーシングを表す整数である、請求項１８に記載の方法。
【請求項２４】
前記ブロックダイヤグラムにおいて前記Ｉ／Ｏタイプの視覚描写を遅延させる段階を更に含む、請求項１の方法。
【請求項２５】
前記視覚描写がＩ／Ｏタイプのテキスト注釈である、請求項２４に記載の方法。
【請求項２６】
前記視覚描写が、特定の線におけるＩ／Ｏタイプのテキスト注釈である、請求項２４に記載の方法。
【請求項２７】
前記視覚描写が、ラインスタイルとしてのＩ／Ｏタイプのグラフ描写である、請求項２４に記載の方法。
【請求項２８】
前記視覚描写が、ブロックのポートの表示子としてのＩ／Ｏタイプのグラフ描写である、請求項２４に記載の方法。
【請求項２９】
前記ブロックダイヤグラム・モデルのコードを生成する段階を更に含む、請求項１の方法。
【請求項３０】
前記ブロックダイヤグラム・モデルのコードを生成する段階を更に含む、請求項１８の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ブロックダイヤグラム・モデリング入出力（Ｉ／Ｏ）バッファーに関する。
【背景技術】
【０００２】
ブロックダイヤグラム・モデリングは、（ソフトウェア又はハードウェアでの）カスタム信号処理システムを概念化、設計、シミュレーション、及び実現する過程を単純化する。信号処理システムのブロックダイヤグラム・モデルは、信号を表す線（有向矢印）により相互連結されたブロックの集まりとして概念的に表される。各ブロックは、基本的な動的システムを表す。１つのブロックから出て別のブロックで終結する線は、最初のブロックの出力が２番目のブロックの入力となることを示す。任意のブロックにおける個別の各入力又は出力はポートと呼ばれる。信号は、各線結合により表される時間変化データ値に対応し、各瞬間において値を持つと仮定する。
【０００３】
ブロックダイヤグラム・モデルは、動的システムを表す信号と状態変数との時間ベース関係である。モデルの解（システム応答の計算）は、これら関係を経時的に評価することより得られ、この時間はユーザが指定する「開始時刻」で開始され、ユーザが指定する「停止時刻」で終了する。これら関係の各評価は、時間段階と呼ばれる。信号は経時的に変化する量を表し、これら量は、ブロックダイヤグラムの開始時刻と停止時刻との間の全時刻に関して定義される。信号と状態変数との間の関係は、ブロックにより表される式の組により定義される。これら式は、入力信号と、出力信号と、状態変数との関係を定義する。この定義にはパラメータの概念が含まれ、パラメータは式の係数である。このブロックダイヤグラム・モデリングのアプローチは、シミュリンク（原語：Simulink）（登録商標）などの、システム分析及び設計の様々な側面を扱う多様なソフトウェア製品を生み出してきた。
【０００４】
１つの信号のデータ値は、一般に１つ又は複数の個別データ要素の集まりである。所与の信号のデータ要素のこうした集まりは、ブロックＩ／Ｏバッファーと呼ばれるメモリバッファーに一般に格納されるが、それは信号が、ブロックの入力及び出力ポートに対応するからである。データ要素は概して数値であるが、これらは多数の属性を備えたストリング又はオブジェクトなどの他の形式もとりうる。
【０００５】
モデリング・ソフトウェアの主要タスクの１つは、動的システムのブロックダイヤグラム・モデルからの出力の計算及び追跡を可能とすることである。実行エンジンは、ブロックダイヤグラム・モデルを実行するというタスクを、コンパイル、リンク、コード生成、及び実行ループからなる４段階で行う。コンパイル段階は、ブロックダイヤグラムのブロック相互連結の完全性及び妥当性のチェックを含む。この段階では、エンジンは、ブロックダイヤグラム内のブロックを階層リストに分類し、このリストは、ブロックダイヤグラム全体を実行するためには、どの順序でブロックを実行すべきかを表す。リンク段階では、エンジンはコンパイル段階の結果を用いて、ブロックダイヤグラムの様々な構成要素の実行に必要なメモリを割り当てる。又、この段階は、効率的に実行するのに適したブロック分類済みリストの抽出バージョンである実行リストを生成する。コード生成に関わるエンジンの次の段階はオプションである。この段階では、エンジンは、ブロックダイヤグラム・モデル（又はその一部）をソフトウェア・モジュール又はハードウェア記述（広くコードと呼ぶ）に翻訳する。この段階が実行されると、リンク及び後続の実行段階は、ブロックダイヤグラム実行時にこの生成コードを用いることになる。この段階を完全に飛ばすと、エンジンは、ブロックダイヤグラムの実行に関して解釈モードを用いることになる。場合によっては、ユーザはブロックダイヤグラム・ソフトウェアの範囲外にコードを導入したいと考えるので、ブロックダイヤグラムの実行に進めないことがある。最後の実行ループ段階では、エンジンは実行ループを使って実行リストを繰り返し、システムの応答を経時的に追跡する。
発明の概要
【０００６】
一様態では、本発明は、動的システムのブロックダイヤグラム・モデルで、各計算領域において複数の信号入出力（Ｉ／Ｏ）タイプを提供する段階を含む方法を特徴とする。
【０００７】
次の１つ又は複数の有利な特徴も含まれうる。信号Ｉ／Ｏタイプをアドレス指定する段階は、基底アドレスをアドレス指定する段階と、要素オフセットをアドレス指定する段階と、折り返し（原語：wrap-around）サイズをアドレス指定する段階と、先頭オフセットをアドレス指定する段階と、ストライド因子（原語：stride
factor）をアドレス指定する段階とを含む。基底アドレスは、信号Ｉ／Ｏタイプの順次アクセス可能要素の先頭メモリアドレスとすることができる。要素オフセットは、信号Ｉ／Ｏタイプにおけるi番目の要素を得るために基底アドレスと共に使用可能なオフセット指標iでよい。折り返しサイズは整数指標とすることができ、これに達した後に信号Ｉ／Ｏタイプが折り返されると考えられるものである。先頭オフセットは、基底アドレスに対する信号Ｉ／Ｏタイプの第１要素の相対位置を決定する整数オフセットとすることができる。ストライド因子は、信号Ｉ／Ｏタイプの要素間のスペーシングを表す整数とすることができる。信号Ｉ／Ｏタイプは柔軟な次元を備えることができる。
【０００８】
幾つかの実施形態では、信号Ｉ／Ｏタイプは、ブロックダイヤグラム内のブロックの出力からの信号値を維持し、この信号値を１つ又は複数のブロックの入力に伝達するために用いる専用又は共用メモリ空間でよい。信号Ｉ／Ｏタイプは、入出力をメモリ内で編成できる様態とすることができる。計算領域は、時間に基づくシミュレーション領域、物理モデリング計算領域、データフロー計算領域、又はグラフィカル・プログラミング計算領域とすることができる。Ｉ／Ｏタイプは、複数ポートブロックの各ポートで異なっていてもよい。ブロックダイヤグラムはブロックを含むことができ、１つ又は複数のブロックが、信号値を保持するために用いられる信号Ｉ／Ｏタイプを取り決める。取り決めには、信号Ｉ／Ｏタイプの選択に影響を与える利用可能な信号Ｉ／Ｏタイプの順位付けを含むことができる。
【０００９】
別の様態において、本発明は、ブロックダイヤグラム・モデルのブロックにおける信号Ｉ／Ｏバッファーをアドレス指定する方法を提供し、この方法は、基底アドレスと、要素オフセットと、折り返しサイズと、先頭オフセットと、ストライド因子とを決定する段階を含む。
【００１０】
次の１つ又は複数の有利な特徴も含まれうる。基底アドレスは、信号Ｉ／Ｏバッファーの順次アクセス可能要素の先頭メモリアドレスとすることができる。要素オフセットは、信号Ｉ／Ｏバッファーにおけるi番目の要素を得るために基底アドレスと共に使用可能なオフセット指標iでよい。折り返しサイズは整数指標であって、これに達した後にＩ／Ｏバッファーがそれ自身に折り返されると考えられるものである。先頭オフセットは、基底アドレスに対する信号Ｉ／Ｏバッファーの第１要素の相対位置を決定する整数オフセットである。ストライド因子は、信号Ｉ／Ｏバッファーの要素間のスペーシングを表す整数である。
【００１１】
本発明の実施形態は、次の利点の内１つ又は複数を含みうる。
【００１２】
Ｉ／Ｏバッファーは、１つの計算領域で使用される２つ以上の入出力の存在を可能とし、ここでは、入出力は、モデル内の１つの構成要素の出力からの信号値を維持し、この信号値を１つ又は複数の構成要素の入力に伝達するために用いる専用又は共用メモリ空間である。Ｉ／Ｏタイプは、その入出力がメモリで編成又は定義される様態であり、且つ／又はメモリの要素がアクセスされる様態であって、その入出力へのアクセスが、ブロックダイヤグラム・モデル内で典型的に使用される１つ又は複数の処理に最適となるようにするものである。「処理（原語：operation）」には、数学的アルゴリズム、データ再編成、データ指標付け、代入（原語：assignment）などが含まれる。）例えば、計算アルゴリズムによっては、行列の連続した行が順次メモリ位置に配されるようにＩ／Ｏメモリを編成しようとするものもあり、他のアルゴリズムによっては、行列の連続した列を順次メモリ位置に配そうとするものもある。他の例には、順次メモリ位置がメモリの循環バッファーに入れられているかのようにアクセスされるメモリ編成が含まれる。他の例には、メモリ要素の逆順序アクセスがある。この例はデータ値がどこに位置するかに影響するだけでなく、そのデータ値が書き込まれているメモリ部分から要素がアクセスされる様態にも影響する。Ｉ／Ｏの編成及びＩ／Ｏへのアクセス方法は、「Ｉ／Ｏのタイプ」という用語に包含される。
【００１３】
Ｉ／Ｏバッファーは、モデル内の複数ブロック間でデータを交換するのに用いるＩ／Ｏタイプをこれらブロックが「取り決め」する機能を提供する。通常、この過程をブロック間の「ハンドシェーク」と呼ぶ。各ブロックは、それ自身が実行可能な複数のＩ／Ｏ技法を備えることができ、更に、各ブロックは、協力してデータ転送を行う必要があるブロックと通信する過程を通して、各データ転送に用いる共通の技法を取り決める。典型的には、この取り決めはシミュレーションの開始前に（或いは、等価的に、モデルのコードを生成する前に一度）一度行われるが、シミュレーションの過程を通じて定期的或いは連続的に（対応する生成コードの実行の間中）行うこともできる。
【００１４】
Ｉ／Ｏバッファーは、複数ポートブロックの各ポートで別々とすることができるＩ／Ｏタイプの選択肢を提供する。典型的には、計算ブロックは、１つ又は複数の入力ポートと１つ又は複数の出力ポートとを備える。特別なタイプのブロックには、出力ポートのみを備える「ソース」ブロックと、入力ポートのみを備える「シンク」ブロックとが含まれる。これら全てのタイプのブロックが複数のＩ／Ｏタイプを実行するモデルに参加でき、各タイプのブロックが１つ又は複数のＩ／Ｏタイプを提供できる。
【００１５】
Ｉ／Ｏバッファーは、最も望ましいものから最も望ましくないものまでに亘って各ブロックが順位付け可能なＩ／Ｏタイプの選択肢を提供し、これは、ブロックがモデル内の他のブロックと共通Ｉ／Ｏ技法を取り決めようとする際の順序に影響する。Ｉ／Ｏタイプの望ましさはアルゴリズム固有であることが多く、従って、各ブロックは、要素アクセスの効率及びメモリ利用の削減などを含む様々な目標に基づいて「より良い」或いは「より悪い」Ｉ／Ｏ技法というそれ自身に独自の概念を持つことができる。
【００１６】
このＩ／Ｏバッファーにより、シミュレータが、モデル内において統一した様態で複数のＩ／Ｏタイプを実行できる。
【００１７】
本発明の１つ又は複数の実施形態の詳細は、添付の図面及び以下の説明に記載されている。本発明のその他の特徴、目的、及び利点は、詳細な説明及び図面、並びに特許請求の範囲から明らかとなるはずである。
【発明を実施するための最良の形態】
【００１８】
図１は処理システム１０を示す。処理システム１０は、パーソナル・コンピュータ（ＰＣ）などのコンピュータ１２を含む。コンピュータ１２は、ＴＣＰ／ＩＰ（転送制御プロトコル／インターネット・プロトコル）又は他の適切なプロトコルを実行する、インターネットなどのネットワーク１４に接続されている。接続は、イーサネット（登録商標）、無線リンク、電話回線などを介したものでよい。コンピュータ１２はプロセッサ１６及びメモリ１８を含む。メモリ１８は、ウィンドウズ（登録商標）２０００（登録商標）又はリナックスなどのオペレーティング・システム（「ＯＳ」）と、ネットワーク１４を介して通信するためのＴＣＰ／ＩＰプロトコル・スタック２２と、プロセッサ１６より実行され後述のブロックダイヤグラム・モデリング・プロセス５０を実行する機械実行可能命令２４とを含む。コンピュータ１２は、グラフィカル・ユーザインターフェース（ＧＵＩ）２８をユーザ３０に表示するための入出力（Ｉ／Ｏ）装置２６も含む。
【００１９】
図２では、ブロックダイヤグラム・モデリング・プロセス５０は、シミュレートし且つグラフィカル・ユーザインターフェース（ＧＵＩ）２８に表示すべき動的システムのブロックダイヤグラム・モデルを生成する段階（５２）を含む。このブロックダイヤグラム・モデルは、動的システムの入力と、状態と、出力との間の時間依存の数学的関係を図示する。このプロセス５０は、ユーザ３０から時間枠を受け取る（５４）。プロセス５０は、この時間枠をブロックダイヤグラム・モデルに組み込み(５６)、この指定された時間枠においてブロックダイヤグラム・モデルを用いて動的システムの挙動をシミュレートする（５８）。
【００２０】
図３において、信号処理システムのブロックダイヤグラム・モデル７０は、信号７４を表す線（有向矢印）により相互連結されたブロック７２の集まりとして概念的に表される。各ブロック７２は、基本的な動的システムを表す。１つのブロックから出て別のブロックで終端する線７４は、最初のブロックの出力が２番目のブロックの入力となることを示す。任意のブロックにおける個別の各入力又は出力はポートと呼ばれる。信号７４は、各線結合により表される時間変化データ値に対応し、各瞬間において値を持つと仮定する。又、各ブロックは、対応する基本的システムに関する一組の状態を含む。状態を備えたブロックはメモリを持つと言われるが、それは、そうしたブロックが次に実行される時に状態を計算するため、これらブロックがその状態を所与の時刻にメモリに記憶するからである。１つのブロックに対応する式は、一般にそのブロック・オブジェクトに対応する方法としてソフトウェアで実現される。多くの式及び方法が動的システムの表現で使われているが、ここでは、出力及び更新という、信号処理システムの文脈で重要な２つのタイプの方法（及び式）に主として的を絞る。動的システムの応答の斬新的変化を追跡するため、これら方法は、ブロックダイヤグラム実行時に繰り返し呼び出される。
【００２１】
ブロックのサンプル時間は、所与のブロックに関する出力、更新、及び／又は導関数法（合わせてブロックの実行と呼ぶ）への呼出の間の時間間隔である。この間隔を計算する際に、同一瞬間（現実時間の瞬間でなく、動的システムの実行に対応した時刻）における繰り返しの呼出は同一呼出と見なされる。１つのブロックのサンプル速度は、そのブロックの連続的な実行の間隔と考えることができる。ブロックが特定時刻に実行されると、このブロックにサンプルヒットがあったと言う。呼出と呼出との間に均一の又は定期的な間隔が存在しない場合は、このブロックは連続的サンプル時間を備えると言う。均一の間隔が存在する場合は、このブロックは、その間隔に等しい離散的サンプル時間を備えると言う。ここでは離散的なサンプル時間を持つ例に限定するが、本発明は、連続的サンプル時間を備えたブロックを含むシステムにも適用可能である。
【００２２】
ブロックダイヤグラム・モデル７０では、信号は多数のデータ値を含むことができる。この信号は、名前、データ型（例えば、８ビット、１６ビット、又は３２ビット整数）、数値型（例えば、実数又は複素数）、及び次元（例えば、一次元配列、二次元配列、又は多次元配列）などの多様な属性を持つことができる。所与の信号のデータ要素の集まりは、ブロック入出力（Ｉ／Ｏ）バッファーと呼ばれるメモリバッファーに一般に格納されるが、それは信号が、ブロックのポートに関連付けられているからである。
【００２３】
従来から、ブロックダイヤグラム・モデリング・プロセスは、ブロックＩ／Ｏに関する基本的なフラット・バッファー・モデルをサポートしてきた。フラットＩ／Ｏバッファーは、これから列挙する４つの主要な属性で説明できる。
【００２４】
フラットＩ／Ｏバッファーの第１の属性はサイズである。各Ｉ／Ｏバッファーは、概してメモリサイズが固定されており（バッファーにおける１つのデータ要素のサイズにバッファーのサイズを掛けたものに等しい）、ブロックダイヤグラムの実行前に全てのメモリは一旦割り当てられる。割当て制限を行うのは、ブロックダイヤグラムを効率的に実時間で実行可能とするためである。
【００２５】
フラットＩ／Ｏバッファーの第２の属性はアドレス方式である。Ｉ／Ｏバッファーは、基底メモリアドレスから順次にアクセスされる要素の集まりからなる。すなわち、バッファーの基底メモリアドレスが与えられると、この基底アドレスと、要素指標（原語：element
index）を追跡する整数カウンタとを組み合わせて用いることで、バッファー内の要素に順次アクセスできる。例えば、バッファーが、基底ポインタアドレスuを備えた単純なＣ言語配列であれば、この配列の要素に*(u+0)
... *(u+N-1)としてアクセスできる。ブロックダイヤグラム実行時に配列の末端部を超える要素にアクセスすると、一般にメモリ分割違反となる。ここではｉ番目のメモリ要素へのアクセスを示すため、一般的な表記法であるu[i]を用いる。
【００２６】
フラットＩ／Ｏバッファーの第３の属性は次元である。次元属性を各Ｉ／Ｏバッファーに付加するのは、通常、一組の連続メモリ要素がＭ次元行列の要素として解釈されるようにすることが目的である。Ｎ個の要素を備えたＩ／Ｏバッファーは、次元[N]のベクトルとして見ることができる。更に、Ｉ／Ｏバッファーは、同一列（又は複数列）からの要素がメモリで互いに隣接する次元の行列[P
x Q]として見ることができる。ある列からの要素がメモリで互いに隣接した状態で行列がメモリに記憶される場合、この行列は列順序で記憶されていると言われる。ある行からの要素がメモリで互いに隣接した状態となる場合、この行列は行順序で記憶されていると言われる。本明細書で用いる例では、行列は列順序で記憶されているものと仮定する。  
【００２７】
図４では、メモリ１８のＩ／Ｏバッファー１００は、９つの要素u[0]、u[1]、u[2]、u[3]、u[4]、u[5]、u[6]、u[7]、及びu[8]並びにこれらの対応するベクトル解釈１０２を含む。この解釈では、x1がu[0]を表し、x2がu[1]を表し、x3がu[2]を表し、x4がu[3]を表し、x5がu[4]を表し、x6がu[5]を表し、x7がu[6]を表し、x8がu[7]を表し、x9がu[8]を表す。一般に、xi=u[i]である。
【００２８】
図５では、メモリ１８のＩ／Ｏバッファー１１０は、９つの要素u[0]、u[1]、u[2]、u[3]、u[4]、u[5]、u[6]、u[7]、及びu[8]並びにこれらの対応する行列解釈１１２を含む。この解釈では、x00がu[0]を表し、x10がu[1]を表し、x20がu[2]を表し、x01がu[3]を表し、x11がu[4]を表し、x21がu[5]を表し、x02がu[6]を表し、x12がu[7]を表し、x22がu[8]を表す。一般に、xij=u[i+jM]で、この式ではM=行の数である。
【００２９】
フラットＩ／Ｏバッファーの第４の属性は入出力写像である。所与のブロックに関して、そのブロックの入力バッファーと出力バッファーとの間には２つの基本的な関係があり、これらは独立Ｉ／Ｏバッファーと共用Ｉ／Ｏバッファーである。
【００３０】
独立Ｉ／Ｏバッファーでは、この入出力関係をサポートするブロックは、全く別個の入力及び出力バッファー空間を備える。この関係を用いるのは、出力が生成された後でも入力が持続する必要がある場合か、入力及び出力バッファーが異なる属性を備える場合である。
【００３１】
図６Ａ、６Ｂ、６Ｃ、及び６Ｄでは、独立入力及び出力バッファーを示す例を図示する。この図は、ソースブロック１２０及びフレーム遅延（原語：frame
delay）ブロック１２２を含む。フレーム遅延ブロック１２２は、入力バッファー１２４、状態バッファー１２６、及び出力バッファー１２８を含む。最適化として、ソースブロックの出力バッファーは、フレーム遅延ブロックの入力バッファーと同一であると仮定する。ブロックダイヤグラム・ソフトウェアでは、Ｉ／Ｏバッファーは、一般にブロック出力のみに割り当てられる。ブロックの入力バッファーは、対応する入力信号を発生するブロックの出力バッファーを示すのみである。この最適化は、本明細書の全ての例で実行されているものと仮定する。図６Ａでは、ソースブロック１２０は、フレーム遅延ブロック１２２の入力バッファー１２４に直接書き込みするが（１３０）、それはこのフレーム遅延ブロックの入力バッファーがソースブロックの出力バッファーと同一だからである。この書き込み処理が実行されるのは、ソースブロックにサンプルヒットがあり、その出力方法が実行された時である。フレーム遅延ブロックの出力方法がフレーム遅延ブロックのサンプルヒット時に実行されると、図６Ｂに示したように、状態バッファー１２６が出力バッファー１２８に転送される（１３２）。次に、フレーム遅延ブロックの更新方法が同一サンプルヒット時に呼び出されと、図６Ｃに示したように、入力バッファー１２４が状態バッファー１２６に転送される（１３４）。図６Ｄでは、ソースブロック１２０に次のサンプルヒットがあった時に、ソースブロックは、フレーム遅延ブロック１２２の入力バッファー１２４に次の値を書き込みする（１３６）。図６Ａ、６Ｂ、６Ｃ、及び６Ｄの例では、入力バッファー値が出力生成後にも持続している必要があるので、入力バッファー１２４及び出力バッファー１２８は独立している必要がある。
【００３２】
共用Ｉ／Ｏバッファーでは、出力バッファーと入力バッファーは同一メモリ空間を備える。この関係は、一致データ変換又は入れ換え計算（原語：in-place
computation）を用いて実現可能な変換を行うブロックにおいて概ね使用される。
【００３３】
図７Ａ及び７Ｂでは、共用入出力バッファーを用いるためにブロックをどのように実装できるかを示す例を図示する。この図は、ソースブロック１５０及び対数ブロック１５２を含む。対数ブロック１５２は入出力バッファー１５４を含む。図７Ａでは、ソースブロック１５０のサンプルヒットでこのブロックの出力方法が実行される時に、ソースブロックは、対数ブロック１５２の入出力バッファー１５４に書き込みする。図７Ｂでは、対数ブロック１５２の出力方法がこのブロックのサンプルヒットで実行される時に、対数ブロックは、入れ換え計算を用いて入出力バッファー１５４に対数（入力）で上書きする。対数ブロック１５２が入力及び出力に共通バッファーを備えるのは、このブロック１５２が入れ換え計算を実行できるからである。
【００３４】
上述のフラットＩ／Ｏバッファーにより、ユーザは、複雑な応用システムを概念化し構築でき、更にこうしたシステム用のコード（例えば、ハードウェア・プラットフォーム用の埋め込み可能コード）を生成できる。所望のシステム計算を正確に模倣させるように生成コードを作成することはできるが、この生成コードは、手動コード化実装に比べて、例えばメモリ消費又は計算効率又はその両方で不十分となる場合もある。こうした非効率性は、知識のある手動コード・プログラマーが高度なソフトウェア工学構成体を用いた結果として発生することがある。ブロックダイヤグラム設計からコードを生成する一方、ブロックＩ／Ｏバッファーのモデルに組み込んで効率を向上させうる、一組のそうした構成体を後述する。こうした構成体それぞれに関し、計算及びメモリ記憶効率を増加させる例を示す。
【００３５】
図８において、オフセット・アドレス指定を用いるＩ／Ｏバッファー１６０を示す。オフセット・バッファーとはＩ／Ｏバッファーであって、それに割り当てられたメモリセグメント全てが、ブロックダイヤグラム実行の所与の時刻にアクセスされないものである。その代わり、Ｉ／Ｏバッファーの全メモリのうち、Ｉ／Ｏバッファーの開始メモリ位置からオフセットした部分からアクセスする。つまり、uがオフセット・バッファー１６２の開始メモリアドレスを表し、x[i]が任意の実行時刻にアクセスされるi番目の要素を表すとすると、x[i]
= u[i+Z]であり、この式でZはオフセット・バッファーの始めからのオフセットである。Zは、ブロックダイヤグラム実行の過程を通じて固定してもよいし、各実行段階で変化してもよい。
【００３６】
図９では、上述のオフセット・バッファー１６２の有用性を、ブロックダイヤグラム・モデリング環境における信号セレクタ・ブロック１７０を用いて示す。シミュリンク（登録商標）では、信号セレクタ・ブロックは、入力ベクトル又は行列の選択要素を出力として生成する。ブロックダイヤグラムにおける信号セレクタ１７０の挙動によって、入力信号からＮ個の連続点を選択することで出力信号１７２が発生される。
【００３７】
図１０では、入力バッファーと出力バッファーを異なる長さを備えた別個のバッファーとした、フラットＩ／Ｏバッファーを用いたバッファー・ブロックを実装するためのアプローチを示す。セレクタ・ブロックのサンプルヒット毎に、入力のＮ個の連続値が出力バッファーにコピーされ、W+N個のメモリ要素が必要であり、サンプルヒット毎にW+N回のコピー処理が行われる。  
【００３８】
図１１では、ブロック１８０は、長さWの単一バッファー１８２を備える。サンプルヒット毎に、出力バッファー１８４は、Z
= Nのオフセットを備えていることを除いては入力バッファー１８６と同一となるように指定される。代入処理のメモリと回数を減少するには、オフセット・バッファーを信号セレクタ・ブロック１８０の出力バッファー１８４に用いればよい。W個のメモリ要素が必要で、実行時にZが固定ならば（或いはZが変化するなら）、実行ステップ毎にW（或いはW+1）回のコピー処理が必要である。
【００３９】
フラットＩ／Ｏバッファーを用いる場合、フラット・バッファーのi番目の要素にアクセスするには、バッファーの基底アドレスに指標値ｉを加え、この新たなアドレスにおける値にアクセスすればよい。従って、iを0 … N-1まで変化させることで、バッファー内にあるN個の全ての要素にアクセスできる。今、i
> Nであれば、通常はエラー又はメモリ分割違反となる。幾つかの例では、こうしたエラー（又は違反）を避けて、i > Nの時に、単純にメモリ空間の先頭まで折り返すのが有利である。すなわち、uがＩ／Ｏバッファーの基底メモリアドレスであれば、i番目の要素へのアクセスはx[i]
= u[i % N]と書くことができ、この式でNはバッファーのサイズであり、%はモジュロ演算子を表す。
【００４０】
図１２では、データのフレームをバッファーに入れるブロック１９０の所望の挙動を示す。
【００４１】
フレームバッファー・ブロック１９０は、入力信号１９４のそれ以前のN回にわたるサンプルのベクトルである出力信号１９２を生成する。図１３に示したように、この出力バッファーはフラット・バッファー実装を用いたもので、入力のN回のサンプルを記憶する連続メモリバッファーである。バッファー・ブロックのサンプルヒット毎に、出力バッファーの以前の値は、それらの現在位置の前のメモリ位置に桁送りされる。第１メモリ位置の値は廃棄される。従って、最後のメモリ位置の値は入力バッファーからの値で更新される。よって、N+1個のメモリ要素とN+1回のコピー処理が、サンプルヒット毎に必要なリソースである。
【００４２】
図１４に示したように、ブロックの入力と出力とで共用する循環Ｉ／Ｏバッファー１９６を用いることによって、代入処理の回数を大きく減らすことができる。新たな入力サンプル１９８は、循環バッファー１９６の適切な位置に代入される。すると、出力バッファー２０２の先頭２００は１個のメモリ要素分だけ移動して出力バッファー２０２の値を「更新」する。従って、N個のメモリ要素、１回のコピー処理、及び１回のインクリメント処理が実行段階毎に必要なリソースである。Nが大きい場合、実行段階毎の計算回数は、循環バッファー１９６ではフラット・バッファーに比べてかなり少なくなる。
【００４３】
図１５に示したように、フレーム・リバッファー・ブロックの入力と出力とで共用する循環Ｉ／Ｏバッファーを用いることによって、代入処理の回数及びこのブロックが必要とする全メモリを大きく減らすことができる。新たな入力サンプルは、循環バッファーの適切な位置に代入される。次に、出力バッファーの先頭を移動して、出力バッファーの値を「更新」する。このアプローチでは、新たな入力が使用可能となる毎に、１つの出力と４つの代入処理を実行するには１つの代入処理しか必要としない。このアプローチは、フラット・バッファーに基づく実装に比べ（各実行段階において）３つのメモリ位置と１回の代入処理を節約する。
【００４４】
図１６では、ユニット遅延ブロックの入力と出力とで共用する循環Ｉ／Ｏバッファー２３４を用いることによって、代入処理の回数及びこのブロックが必要とする全メモリを減少させる。遅延ブロックにサンプルヒットがあると、入力サンプルは循環バッファー２３４の適切な位置に代入される。次に、出力バッファーの先頭を移動して、出力バッファーの値を「更新」する。実行段階毎に必要なリソースは、６つのメモリ要素、３回のコピー処理、及び２回のインクリメント処理である。入力バッファーの長さがMで、所望の遅延がNである一般的な場合では、M+N個のメモリ要素、M回のコピー処理、及び２回のインクリメント処理が実行段階毎に必要である。Mが増加するに従い、フラット・バッファーを用いる実装に比べて、メモリ及び計算が大きく節約されることが分かる。例えば、M
= 256であれば、実行段階毎に２５６個のメモリ位置と２５６回のコピー処理を節約することになる。
【００４５】
図１７では、ストライド・バッファー２４０を示す。フラットＩ／Ｏバッファーを用いる場合、ストライド・バッファー２４０の要素にアクセスするには、バッファーの１つの要素から次の要素へ順次にストライドすればよい。一定の使用状況では、１つの要素より大きいストライド長さを用いると有利である。例えば、ストライド長さを２つとすると、元々のバッファーにおいて一つおきの要素がアクセスされ、ストライド長さを３つとすると、元々のバッファーにおいて２つおきの要素がアクセスされることになる。すなわち、uがＩ／Ｏバッファーの基底メモリアドレスであれば、こうしたストライドに基づくアクセスはx[i]
= u[Si]と書くことができ、この式でSは、ストライド因子に対応する整数である。Sは、ブロックダイヤグラム実行の過程を通じて固定しても、変化してもよい。
【００４６】
図１８では、フレーム入力データにダウンサンプリングを行うブロックの所望の挙動を示す。ここでは、例示目的で、このダウンサンプリング器がサンプリング速度を２分の１に減少させると仮定する。同一の概念を他のダウンサンプリング速度にも拡張できる。
【００４７】
図１９では、ストライド・バッファーとして実装されたダウンサンプリング器２４２を示す。この実装は、フラット・バッファーを用いる実装に比べ（各実行段階において）N/2個のメモリ位置とN/2回の代入処理を節約する。ダウンサンプリング器ブロックのサンプルヒット毎に、ダウンサンプリング器ブロックのＩ／Ｏバッファーには入力値が代入される。入力及び出力バッファーは同一のメモリ空間を共用するので、出力は自動的に更新される。ダウンサンプリング器２４２に結合された全てのブロックは、ダウンサンプリング器ブロックの出力バッファーに対してストライドに基づくアドレス指定を用いるだけで、適切な入力値を得ることができる。実行段階毎に必要なリソースは、Ｎ個のメモリ要素及びＮ回のコピー処理である。このアプローチでは、Ｎが大きい場合はフラット・バッファーに比べ大きなメモリ及び計算の節約となる。
【００４８】
ブロックダイヤグラム・モデルの実行時に、より最適なメモリ割当てを達成可能とするには、従来のフラット・バッファー・モデル以外のブロックＩ／Ｏの複数モデルをサポートする必要がある。更に、同一のブロックダイヤグラムに異なるモデルのブロックＩ／Ｏを混在可能とすることが不可欠である。
【００４９】
ブロックＩ／Ｏの異なるモデルを同一ブロックダイヤグラムに混在させるということは、複数ブロックが互いに取り決めして、モデル内の様々なＩ／Ｏバッファーに用いるモデルを決定する機能が必要であることを意味する。これは次の２つの主たる理由で重要である。第１の理由は、１つのブロックのＩ／Ｏバッファーは別のブロックの出力バッファーであることで、第２の理由は、Ｉ／Ｏバッファーが共用バッファーとして明示的に表記される場合は、これらが様々なブロック間で共用されることである。本発明は、モデル内の各ブロックＩ／Ｏバッファーに最も適したメモリモデルを特定する助けとなる伝搬機構を含む。
【００５０】
ブロックＩ／Ｏの複数モデルをサポートするため、我々は、オフセット、循環、及びストライドなどの上述の例で示した様々なバッファーモデルを包含する助けとなる包括的ブロックＩ／Ｏモデルを開発した。従来のフラット・バッファーを説明するのに用いた４つの属性、すなわちサイズ、アドレス指定モデル、次元、及び入出力写像の点からこの包括的モデルを説明できる。
【００５１】
このブロックＩ／Ｏモデルのサイズは固定されていると仮定する。サイズに関して同じ挙動を保持するが、それはこうした固定サイズＩ／Ｏバッファーが実時間システムの状況では最も適しているからである。
【００５２】
アドレス方式：  フラット・バッファーの場合、Ｉ／Ｏバッファーの特定要素にアクセスするには、このバッファーの基底メモリアドレス及び現在アクセスしている要素の要素オフセットという２つの情報部分を用いていた。ここでは、Ｉ／Ｏバッファーが、異なる５つの情報部分を用いてアドレス指定されていると仮定する。
【００５３】
第１の情報部分は基底アドレス(u)である。これは、Ｉ／Ｏバッファーの順次アクセス可能要素の先頭メモリアドレスである。
【００５４】
第２の情報部分は要素オフセットである。Ｉ／Ｏバッファーのi番目の要素は、オフセット指標iを基底アドレスと組み合わせて用いることにより得られる。バッファーのi番目をx[i]と表し、Ｉ／Ｏバッファーのi番目のメモリ位置へのアクセスはu[i]とい表記を用いて表す。
【００５５】
第３の情報部分は折り返しサイズ(W)である。これは整数要素指標であって、これに達した後にＩ／Ｏバッファーがそれ自身に折り返されるものである。従って、Ｉ／Ｏバッファーのi番目の要素へのアクセスは、x[i]
= u[i % W]と書くことができ、この式では「%」はモジュロ演算子を表す。
【００５６】
第４の情報部分は先頭オフセット(Z)である。これは、基底アドレスに対するバッファーの第１要素の相対位置を決定する整数オフセットである。例えば、先頭オフセットS=5は、第１要素がx[0]
= u[i+5]によって与えられることを示す。
【００５７】
第５の情報部分はストライド因子(S)である。場合によっては、Ｉ／Ｏバッファーの全ての要素は同時に使用できないことがある。そのかわり、１つおき（或いは２つ又は３つおき）の要素しか使用できない。従って、Ｉ／Ｏバッファーのi番目の要素は、x[i]
= u[Si]と書かれ、この式で、SはＩ／Ｏバッファーの要素間のスペーシングを決定するストライド因子である。
【００５８】
これら５つの別個部分それぞれの情報を組み合わせることで、Ｉ／Ｏバッファーのi番目の要素を、x[i]=u[(Si+Z)%W]としてアドレス指定することになる。S
= 1、Z = 0、Ｗ = 無限大を選択することで、フラット・バッファーが得られることに注目されたい。様々なアドレス指定に関連した属性は、図２０に示したようにオフセット、循環、及びストライド・アドレス指定を提供する。S、Z、及びWは、ブロックダイヤグラム実行の過程を通じて固定しても、動的に変化してもよい。これら属性が実行段階と共に変化する場合、Ｉ／Ｏバッファーのi番目へのアクセスをxn[i]
= un[(Sni + Zn) % Wn]として書き換えることができ、この式でnは実行段階を表す。
【００５９】
上述のように、Ｉ／ＯバッファーはM次元行列と解釈できる。しかし、バッファーの次元は、ブロックダイヤグラムの実行過程を通じて変化しないことが前提であった。ブロックＩ／Ｏバッファーの我々の新たなモデルでは、ブロックダイヤグラムの実行過程を通じてバッファーに柔軟な次元を持たせる。Ｉ／Ｏバッファーが柔軟な次元を持ちうる様態を図２１及び図２２に示した。図２１は動的次元Ｉ／Ｏバッファーを示す。このＩ／Ｏバッファーは、実行の進行に従って動的な次元を持つ。しかし、Ｉ／Ｏ要素は、Ｉ／Ｏバッファーのメモリマップにおける異なる要素に常に再写像される。図２２は、このＩ／Ｏバッファーが、実行の進行に従って動的な次元を持つことを示す。Ｉ／Ｏバッファーのメモリマップへの個別要素の写像は変わらない。
【００６０】
図２３では、部分的に共用されるバッファー、すなわち入力及び出力のメモリ空間が部分的に重複しているバッファーという概念を導入する。ここでは、入力及び出力バッファーは同一のメモリ空間を共用する。入力バッファーがメモリ空間における最初の５つの要素に写像され、出力バッファーは同一メモリ空間における最後の６つの要素に写像される。
【００６１】
これまで時間に基づくブロックダイヤグラムに焦点を当ててきたが、本発明は、メモリバッファーという概念が定義されている計算の他のブロックダイヤグラム・モデルにも拡張される。こうしたモデルの１つは、データの使用可能度（トークン）を用いてブロックの実行を駆動するグラフィカル・プログラミング・パラダイムを記述するデータフロー・ダイヤグラムであり、ここでは、１つのブロックが単一の処理を表し、線がブロック間の実行依存性を表す。本発明は、こうしたデータフロー・ブロックダイヤグラムにデータ・トークンを記憶するのに用いるメモリバッファーに拡張できる。
【００６２】
本発明は、デジタル電子回路、又はコンピュータ・ハードウェア、ファームウェア、若しくはソフトウェア、或いはそれらの組合せによっても実現可能である。本方法は、コンピュータ・プログラム製品、すなわち情報媒体（例えば、プログラム可能プロセッサ、単一のコンピュータ、又は複数のコンピュータなどのデータ処理装置により実行されるか、その動作を制御するための機械可読記憶装置又は伝搬信号）において具体的に実現されたコンピュータ・プログラムとして実装できる。
【００６３】
コンピュータ・プログラムは、コンパイル済み又は解釈実行言語を含む任意形式のプログラミング言語で書くことができ、こうしたプログラムは、独立型プログラム、又はモジュール、構成要素、サブルーチン、或いは計算環境における使用に適した他の単位を含む任意形式で導入できる。  
【００６４】
コンピュータ・プログラムは、単一のコンピュータ、又は単一サイトに配置した複数のコンピュータ、或いは複数サイトに分散されて通信ネットワークにより相互接続した複数のコンピュータで実行されるよう導入してもよい。
【００６５】
本発明の方法段階は、入力データに作用し且つ出力を生成することによって本発明の機能を実行するコンピュータ・プログラムを実行する１つ又は複数のプログラム可能プロセッサにより実行できる。又、方法段階は、例えば、ＦＰＧＡ（書替え可能ゲートアレイ）又はＡＳＩＣ（特定用途向けＩＣ）などの専用論理回路により実行でき、本発明の装置は、ＦＰＧＡ又はＡＳＩＣとして実装できる。
【００６６】
コンピュータ・プログラムの実行に適したプロセッサは、例示目的だが、汎用及び専用マイクロプロセッサ並びに任意種類のデジタル・コンピュータの１つ又は複数のプロセッサを含む。一般に、プロセッサは、読み取り専用メモリ又はランダムアクセス・メモリ或いはそれら両方から命令及びデータを受け取る。コンピュータの不可欠な要素は、命令を実行するためのプロセッサと、命令及びデータを記憶するための１つ又は複数の記憶装置とである。一般に、コンピュータは、例えば、磁気ディスク、光磁気ディスク、又は光ディスクなどの１つ又は複数の大容量記憶装置を含むか、それらからデータを受信又は転送、或いはその両方を行うため機能的に接続されている。コンピュータ・プログラム命令及びデータを実現するのに適した情報媒体は、例として半導体記憶装置（例えば、EPROM、EEPROM、及びフラッシュメモリ装置）、磁気ディスク（例えば、内部ハードディスク又はリムーバルブディスク）、光磁気ディスク、及びCD
ROM及びDVD-ROMディスクを含むあらゆる形式の不揮発性記憶装置を含む。プロセッサ及びメモリは、専用論理回路により補足するかそれに組み込み可能である。
【００６７】
本発明の幾つかの実施形態を説明してきた。しかしながら、本発明の精神及び範囲から逸脱することなく多くの修正が可能なことは理解されるであろう。従って、これ以外の実施形態も次の特許請求の範囲に入る。
【図面の簡単な説明】
【００６８】
【図１】システムのブロックダイヤグラムである。
【図２】ブロックダイヤグラム・モデリング・プロセスのフローチャートである。
【図３】代表的なブロックダイヤグラム・モデルである。
【図４】入出力（Ｉ／Ｏ）バッファーのブロックダイヤグラムである。
【図５】Ｉ／Ｏバッファーのブロックダイヤグラムである。
【図６】（Ａ）乃至（Ｄ）独立入力及び出力バッファーを示す。
【図７】（Ａ）及び（Ｂ）共用入力及び出力バッファーを示す。
【図８】Ｉ／Ｏバッファーのブロックダイヤグラムである。
【図９】信号セレクタ・ブロックを示す。
【図１０】フラットＩ／Ｏバッファーのブロックダイヤグラムである。
【図１１】ブロックを示す。
【図１２】フレームバッファー・ブロックを示す。
【図１３】フラットＩ／Ｏバッファーを示す。
【図１４】循環Ｉ／Ｏバッファーを示す。
【図１５】リバッファー・ブロックを示す。
【図１６】循環Ｉ／Ｏバッファーを示す。
【図１７】代表的なストライド・バッファーを示す。
【図１８】ダウンサンプリング・ブロックを示す。
【図１９】ストライド・バッファーを示す。
【図２０】アドレス指定に関連した属性を示す。
【図２１】動的次元Ｉ／Ｏバッファーを示す。
【図２２】動的次元Ｉ／Ｏバッファーを示す。
【図２３】部分共用バッファーを示す。
【図１】
2007525727.tif 000003
【図２】
2007525727.tif 000004
【図３】
2007525727.tif 000005
【図４】
2007525727.tif 000006
【図５】
2007525727.tif 000007
2007525727.tif 000008
2007525727.tif 000009
【図８】
2007525727.tif 000010
【図９】
2007525727.tif 000011
【図１０】
2007525727.tif 000012
【図１１】
2007525727.tif 000013
【図１２】
2007525727.tif 000014
【図１３】
2007525727.tif 000015
【図１４】
2007525727.tif 000016
【図１５】
2007525727.tif 000017
【図１６】
2007525727.tif 000018
【図１７】
2007525727.tif 000019
【図１８】
2007525727.tif 000020
【図１９】
2007525727.tif 000021
【図２０】
2007525727.tif 000022
【図２１】
2007525727.tif 000023
【図２２】
2007525727.tif 000024
【図２３】
2007525727.tif 000025
【国際調査報告】
2007525727.tif 000026
2007525727.tif 000027