(57)【要約】単一チップマイクロコントローラは、マスタコアと、少なくとも１つのスレーブコアとを有する。マスタコアは、マスタシステムクロックによってクロックされ、スレーブコアは、スレーブシステムクロックによってクロックされ、各コアは、複数の周辺デバイスに関連付けられ、それぞれ、マスタマイクロコントローラおよびスレーブマイクロコントローラを形成する。通信インターフェースが、マスタマイクロコントローラとスレーブマイクロコントローラとの間に提供され、通信インターフェースは、方向を複数の構成データレジスタの各々に割り当てるように構成可能なフロー制御論理と結合される複数の構成可能方向性データレジスタを有する。
2018519587.tif 000002
【特許請求の範囲】
【請求項１】
マスタコアおよびスレーブコアを備えている単一チップマイクロコントローラであって、前記マスタコアは、マスタシステムクロックによってクロックされ、前記スレーブコアは、スレーブシステムクロックによってクロックされ、各コアは、複数の周辺デバイスに関連付けられ、それぞれ、マスタマイクロコントローラおよびスレーブマイクロコントローラを形成し、
前記単一チップマイクロコントローラは、前記マスタマイクロコントローラと前記スレーブマイクロコントローラとの間に通信インターフェースをさらに備え、前記通信インターフェースは、フロー制御論理と結合されている複数の構成可能方向性データレジスタを備え、前記フロー制御論理は、前記複数の構成可能データレジスタの各々に方向を割り当てるように構成可能である、単一チップマイクロコントローラ。
【請求項２】
各方向性データレジスタを構成するためのヒューズをさらに備えている、請求項１に記載の単一チップマイクロコントローラ。
【請求項３】
各方向性データレジスタを構成するための構成レジスタをさらに備えている、請求項１または請求項２に記載の単一チップマイクロコントローラ。
【請求項４】
ハンドシェイク論理ブロックをさらに備え、前記ハンドシェイク論理ブロックは、前記複数の構成可能方向性データレジスタに関する前記マスタおよびスレーブコア間のハンドシェイク信号を提供するように構成されている、請求項１〜３のいずれか１項に記載の単一チップマイクロコントローラ。
【請求項５】
前記通信インターフェースは、複数のメールボックスを定義するようにさらに構成可能であり、前記複数の構成可能データレジスタのうちの構成可能な数の連続したデータレジスタが、各メールボックスに割り当てられる、請求項１〜４のいずれか１項に記載の単一チップマイクロコントローラ。
【請求項６】
各方向性データレジスタを構成するためのヒューズをさらに備えている、請求項１〜５のいずれか１項に記載の単一チップマイクロコントローラ。
【請求項７】
各方向性データレジスタを構成するための構成レジスタをさらに備えている、請求項１〜６のいずれか１項に記載の単一チップマイクロコントローラ。
【請求項８】
構成可能データレジスタのデータ方向は、前記単一チップマイクロコントローラのプログラミング中に割り当てられる、請求項１〜７のいずれか１項に記載の単一チップマイクロコントローラ。
【請求項９】
メールボックスへのレジスタの割り当て、および前記複数の構成可能データレジスタの各々のデータ方向の割り当ては、前記単一チップマイクロコントローラのプログラミング中にプログラムされる、請求項１〜８のいずれか１項に記載の単一チップマイクロコントローラ。
【請求項１０】
各データレジスタは、方向信号およびハンドシェイク信号によって制御される、請求項１〜９のいずれか１項に記載の単一チップマイクロコントローラ。
【請求項１１】
メールボックスの前記構成可能レジスタのうちの１つは、制御レジスタとして使用される、請求項１〜１０のいずれか１項に記載の単一チップマイクロコントローラ。
【請求項１２】
前記複数の構成可能データレジスタのうちの少なくとも１つは、ステータスレジスタとしてのものである、請求項１〜１１のいずれか１項に記載の単一チップマイクロコントローラ。
【請求項１３】
前記複数の構成可能データレジスタのうちの少なくとも１つは、コマンドレジスタとしてのものである、請求項１〜１２のいずれか１項に記載の単一チップマイクロコントローラ。
【請求項１４】
前記構成可能データレジスタのうちの１つへの前記マスタコアからのみの書き込み経路および前記構成可能データレジスタのうちの１つから前記スレーブコアへの読み取り経路、または、前記構成可能データレジスタのうちの１つへの前記スレーブコアからのみの書き込み経路および前記構成可能データレジスタのうちの１つから前記マスタコアへの読み取り経路のいずれかを定義するための複数のマルチプレクサを備えている、請求項１〜１３のいずれか１項に記載の単一チップマイクロコントローラ。
【請求項１５】
前記マスタまたはスレーブコアから前記構成可能データレジスタのうちの１つへの書き込み経路がそれぞれ設定されると、前記構成可能データレジスタのうちの１つから前記マスタまたはスレーブコアへの読み取り経路が利用可能である、請求項１４に記載の単一チップマイクロコントローラ。
【請求項１６】
前記マスタコアから前記構成可能データレジスタのうちの１つへの書き込み経路が設定されると、前記マスタクロックは、前記構成可能データレジスタのうちの１つを書き込むためのクロックを提供し、前記スレーブクロックは、前記構成可能データレジスタのうちの１つを読み取るためのクロックを提供する、請求項１４に記載の単一チップマイクロコントローラ。
【請求項１７】
前記スレーブコアから前記構成可能データレジスタのうちの１つへの書き込み経路が設定されると、前記スレーブクロックは、前記構成可能データレジスタのうちの１つを書き込むためのクロックを提供し、前記マスタクロックは、前記構成可能データレジスタのうちの１つを読み取るためのクロックを提供する、請求項１４に記載の単一チップマイクロコントローラ。
【請求項１８】
読み取りＦＩＦＯメモリおよび書き込みＦＩＦＯメモリを前記通信インターフェース内にさらに備え、前記読み取りＦＩＦＯメモリは、前記スレーブコアと結合されているデータ入力と、前記マスタコアと結合されているデータ出力とを備え、前記書き込みＦＩＦＯメモリは、前記マスタコアと結合されているデータ入力と、前記スレーブコアと結合されているデータ出力とを備えている、請求項１〜１７のいずれか１項に記載の単一チップマイクロコントローラ。
【請求項１９】
前記読み取りＦＩＦＯメモリおよび書き込みＦＩＦＯメモリは、構成レジスタを通して随意にイネーブルにされる、請求項１８に記載の単一チップマイクロコントローラ。
【請求項２０】
複数のスレーブコアをさらに備え、前記通信インターフェースは、複数のデータレジスタ組を備え、各データレジスタ組は、フロー制御論理と結合されている複数の構成可能方向性データレジスタを備え、前記フロー制御論理は、前記複数の構成可能データレジスタの各々に方向を割り当てるように構成可能である、請求項１〜１９のいずれか１項に記載の単一チップマイクロコントローラ。
【請求項２１】
単一チップマイクロコントローラ上のマスタコアとスレーブコアとの間の通信を提供する方法であって、前記マスタコアは、マスタシステムクロックによってクロックされ、前記スレーブコアは、スレーブシステムクロックによってクロックされ、各コアは、複数の周辺デバイスに関連付けられ、それぞれ、マスタマイクロコントローラおよびスレーブマイクロコントローラを形成し、前記方法は、
前記マスタマイクロコントローラと前記スレーブマイクロコントローラとの間に通信インターフェースを提供することと、
フロー制御論理と結合されている複数の構成可能方向性データレジスタをそれぞれのメールボックスを形成するように構成することと、
前記複数の構成可能方向性データレジスタの各々のために、前記マスタコアからのデータ方向、または前記マスタコアへのデータ方向を構成することと、
前記複数の構成可能方向性データレジスタを通してのみ、データを前記マスタコアと前記スレーブコアとの間で交換することと
を含む、方法。
【請求項２２】
前記構成するステップは、前記単一チップマイクロコントローラのプログラミング中にヒューズを通して行われる、請求項２１に記載の方法。
【請求項２３】
前記交換するステップは、前記マスタコアと前記スレーブコアとの間のハンドシェイク信号を用いて行われる、請求項２１または請求項２２に記載の方法。
【請求項２４】
前記複数の構成可能データレジスタのうちの構成可能な数の連続したデータレジスタが、各メールボックスに割り当てられる、請求項２１〜２３のいずれか１項に記載の方法。
【請求項２５】
メールボックスの前記構成可能レジスタのうちの１つは、制御レジスタとして使用される、請求項２４に記載の方法。
【請求項２６】
前記複数の構成可能データレジスタのうちの少なくとも１つは、ステータスレジスタまたはコマンドレジスタとしてのものである、請求項２４に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願）
本願は、米国仮特許出願第６２／１８１，３７９号（２０１５年６月１８日出願）に対する優先権を主張し、上記出願は、あらゆる目的のために参照により本明細書に組み込まれる。
【０００２】
（技術分野）
本開示は、複数のコアを伴うマイクロコントローラ等のマルチプロセッサ内蔵システムに関し、特に、そのような内蔵システムのための構成可能メールボックスデータバッファ装置に関する。
【背景技術】
【０００３】
（背景）
マルチプロセッサコアマイクロコントローラは、全く別個のコアを伴って設計され得、各コアは、異なるシステムクロックに基づいて動作し得る。したがって、２つのコア間で通信するための能力を提供するために、特定の通信インターフェースが必要である。特に、少量のデータを２つのプロセッサ間のクロック境界を横断して迅速かつ確実に移動させる手段が、必要とされる。解決策は、完全構成可能であるが、シリコン使用に関して効率的である必要があった。
【発明の概要】
【課題を解決するための手段】
【０００４】
（要約）
ある実施形態によると、単一チップマイクロコントローラは、マスタコアと、少なくとも１つのスレーブコアとを備え得、マスタコアは、マスタシステムクロックによってクロックされ、スレーブコアは、スレーブシステムクロックによってクロックされ、各コアは、複数の周辺デバイスに関連付けられ、それぞれ、マスタマイクロコントローラおよびスレーブマイクロコントローラを形成し、単一チップマイクロコントローラは、マスタマイクロコントローラとスレーブマイクロコントローラとの間に通信インターフェースをさらに備え、通信インターフェースは、方向を複数の構成可能データレジスタの各々に割り当てるように構成可能なフロー制御論理と結合されている複数の構成可能方向性データレジスタを備えている。２．各方向性データレジスタを構成するためのヒューズをさらに備えている、項目１に記載の単一チップマイクロコントローラ。
【０００５】
さらなる実施形態によると、単一チップマイクロコントローラはさらに、各方向性データレジスタを構成するための構成レジスタを備え得る。さらなる実施形態によると、単一チップマイクロコントローラはさらに、複数の構成可能方向性データレジスタに関するハンドシェイク信号をマスタおよびスレーブコア間に提供するように構成される、ハンドシェイク論理ブロックを備え得る。さらなる実施形態によると、通信インターフェースはさらに、複数のメールボックスを定義するように構成可能であり、該複数の構成可能データレジスタのうちの構成可能な数の連続したデータレジスタが、各メールボックスに割り当てられる。さらなる実施形態によると、単一チップマイクロコントローラはさらに、各方向性データレジスタを構成するためのヒューズを備え得る。さらなる実施形態によると、単一チップマイクロコントローラはさらに、各方向性データレジスタを構成するための構成レジスタを備え得る。さらなる実施形態によると、構成可能データレジスタのデータ方向は、単一チップマイクロコントローラのプログラミング中に割り当てられることができる。さらなる実施形態によると、メールボックスへのレジスタの割り当て、および複数の構成可能データレジスタの各々のデータ方向の割り当ては、単一チップマイクロコントローラのプログラミング中にプログラムされることができる。さらなる実施形態によると、各データレジスタは、方向信号およびハンドシェイク信号によって制御されることができる。さらなる実施形態によると、メールボックスの該構成可能レジスタのうちの１つは、制御レジスタとして使用されることができる。さらなる実施形態によると、該複数の構成可能データレジスタのうちの少なくとも１つは、ステータスレジスタとしてのものであることができる。さらなる実施形態によると、該複数の構成可能データレジスタのうちの少なくとも１つは、コマンドレジスタとしてのものであることができる。さらなる実施形態によると、単一チップマイクロコントローラはさらに、構成可能データレジスタのうちの１つへのマスタコアからのみの書き込み経路および構成可能データレジスタのうちの１つからスレーブコアへの読み取り経路、または、構成可能データレジスタのうちの１つへのスレーブコアからのみの書き込み経路および構成可能データレジスタのうちの１つからマスタコアへの読み取り経路のいずれかを定義するための複数のマルチプレクサを備え得る。さらなる実施形態によると、マスタまたはスレーブコアから構成可能データレジスタのうちの１つへの書き込み経路がそれぞれ設定されると、構成可能データレジスタのうちの１つからマスタまたはスレーブコアへの読み取り経路が利用可能である。さらなる実施形態によると、マスタコアから構成可能データレジスタのうちの１つへの書き込み経路が設定されると、マスタクロックは、構成可能データレジスタのうちの１つを書き込むためのクロックを提供し、スレーブクロックは、構成可能データレジスタのうちの１つを読み取るためのクロックを提供する。さらなる実施形態によると、スレーブコアから構成可能データレジスタのうちの１つへの書き込み経路が設定されると、スレーブクロックは、構成可能データレジスタのうちの１つを書き込むためのクロックを提供し、マスタクロックは、構成可能データレジスタのうちの１つを読み取るためのクロックを提供する。さらなる実施形態によると、単一チップマイクロコントローラはさらに、読み取りＦＩＦＯメモリおよび書き込みＦＩＦＯメモリを通信インターフェース内に備え得、読み取りＦＩＦＯメモリは、スレーブコアと結合されているデータ入力と、マスタコアと結合されているデータ出力とを備え、書き込みＦＩＦＯメモリは、マスタコアと結合されているデータ入力と、スレーブコアと結合されているデータ出力とを備えている。さらなる実施形態によると、読み取りＦＩＦＯメモリおよび書き込みＦＩＦＯメモリは、構成レジスタを通して随意にイネーブルにされ得る。さらなる実施形態によると、単一チップマイクロコントローラはさらに、複数のスレーブコアを備え得、通信インターフェースは、複数のデータレジスタ組を備え、各データレジスタ組は、方向を複数の構成可能データレジスタの各々に割り当てるように構成可能なフロー制御論理と結合されている複数の構成可能方向性データレジスタを備えている。
【０００６】
別の実施形態によると、単一チップマイクロコントローラ上のマスタコアとスレーブコアとの間の通信を提供する方法において、マスタコアは、マスタシステムクロックによってクロックされ、スレーブコアは、スレーブシステムクロックによってクロックされ、各コアは、複数の周辺デバイスに関連付けられ、それぞれ、マスタマイクロコントローラおよびスレーブマイクロコントローラを形成し、方法は、マイクロコントローラとスレーブマイクロコントローラとの間に通信インターフェースを提供することと、フロー制御論理と結合されている複数の構成可能方向性データレジスタをそれぞれのメールボックスを形成するように構成することと、複数の構成可能方向性データレジスタの各々ために、マスタコアからまたはそこへのデータ方向を構成することと、該複数の構成可能方向性データレジスタを通してのみ、データをマスタコアとスレーブコアとの間で交換することとを含む。
【０００７】
方法のさらなる実施形態によると、構成するステップは、単一チップマイクロコントローラのプログラミング中にヒューズを通して行われる。方法のさらなる実施形態によると、交換するステップは、マスタおよびスレーブコア間のハンドシェイク信号を用いて行われることができる。方法のさらなる実施形態によると、該複数の構成可能データレジスタのうちの構成可能な数の連続したデータレジスタが、各メールボックスに割り当てられることができる。方法のさらなる実施形態によると、メールボックスの該構成可能レジスタのうちの１つは、制御レジスタとして使用されることができる。方法のさらなる実施形態によると、該複数の構成可能データレジスタのうちの少なくとも１つは、ステータスレジスタまたはコマンドレジスタとして使用されることができる。
【図面の簡単な説明】
【０００８】
【図１】図１は、デュアルコアマイクロコントローラの第１の実施形態のブロック図を示す。
【図２】図２は、ディアルまたはマルチコアマイクロコントローラの第２の実施形態のブロック図を示す。
【図３】図３は、種々の実施形態による、通信インターフェースのより詳細なブロック図を示す。
【図４】図４は、種々の実施形態による、例示的メールボックス構成を示す。
【図５】図５は、データ書き込みチャネル（上）およびデータ読み取りチャネル（下）を示す。
【図６】図６は、メールボックスハンドシェイクプロトコルシーケンス図を示す。
【図７】図７は、ディアルまたはマルチコアマイクロコントローラのための随意の追加のＦＩＦＯメモリのブロック図を示す。
【図８】図８は、読み取りＦＩＦＯ割り込み動作を示す。
【図９】図９は、種々の実施形態による、組み合わせられたメールボックスおよびＦＩＦＯ通信インターフェースのブロック図を示す。
【発明を実施するための形態】
【０００９】
（詳細な説明）
図１および２に示されるように、ディアルまたはマルチコア処理デバイス１００、２００が、マスタ中央処理ユニット（ＣＰＵ）１１２を伴うマスタマイクロコントローラ１１０と、各々がスレーブ中央処理ユニット１２２を有する１つ以上のスレーブユニット１２０とを有するように設計されることができ、各スレーブ中央処理ユニット１２２のコア設計は、マスタＣＰＵ１１２のコア設計と概ね同じであるか、または類似する。しかしながら、他の実施形態によると、スレーブＣＰＵ１２２は、マスタＣＰＵ１１２と異なり得る。マスタマイクロコントローラは、図１および２に示されるように、それ自身の周辺デバイスの組を有する。スレーブユニット１２０は、それ自身の周辺デバイスの組を有することも、有しないこともあり、したがって、それ自身でマイクロコントローラを形成することもある。したがって、各マスタおよびスレーブデバイスは、事実上、完全独立処理デバイスを形成し、専用バスまたは通信インターフェース１３０と通信し得る。図１および２は、マスタマイクロコントローラ１１０と、単一または複数のスレーブマイクロコントローラ１２０とを伴うそのような設計を示す。通信インターフェース１３０が、２つのコア１１０、１２０間の通信を可能にするように提供される。各プロセッサ１１２、１２２は、示されるように、ハーバードアーキテクチャにおいて設計され得る。しかしながら、種々の実施形態による原理は、フォン・ノイマンアーキテクチャに容易に変換され得る。マスタユニットは、例えば、プログラムメモリとして使用されるフラッシュメモリ１１６と、データメモリとして使用されるランダムアクセスメモリ１１４とを備え、各々は、マスタコア１１２と結合される。
【００１０】
図１および２に示されるように、スレーブユニット１２０は、フラッシュメモリを伴わずに設計されることができる。代わりに、専用プログラムランダムアクセスメモリ１２６が提供される。このメモリが揮発性であるという事実に起因して、それは、種々の実施形態によると、マスタ１１０を通してロードされるであろう。この設計選択肢は、フラッシュ技術によって提供されるボトルネックが回避されるという利点を有する。フラッシュメモリは、概して、ＲＡＭより遅い。故に、読み取り遅延が存在せず、スレーブは、より高い実行速度で動作させられることができ、より高い実行速度は、例えば、ＳＭＰＳ用途等のある高速用途のために非常に有益であり得る。前述のように、２つ以上のスレーブユニット１２０が、種々の実施形態によると、実装され得る。両コアが同じである場合、マスタコア１１２は、追加の命令を含むように設計され得、追加の命令は、スレーブユニット１２２内に実装されないか、またはスレーブユニット内で機能しないかのいずれかであり得る。これらの追加の命令は、フラッシュメモリ１１６または外部ソースからスレーブデバイス１２０のＰＲＡＭ１２６の中へのデータの転送を可能にする。例えば、ある実施形態によると、複数のコアが、単一チップデバイス内に実装され得、各コアは、割り当てられた構成レジスタを有し得、そのようなレジスタのビットのうちの１つは、それぞれのユニットがマスタであるか、またはスレーブであるかを定義し得る。コアのうちの１つのみがマスタとして設定されることを可能にする論理が、存在し得る。このビットが設定されると、追加の命令は、実行されることが可能にされ得る。他のユニット（スレーブ）では、これらの命令は、実行されず、例えば、それらは、不正オペコードとして解釈され得る。
【００１１】
マスタユニット１１０によってＰＲＡＭ１２６にアクセスするための制御論理は、バッファ／コンパレータユニット１１８とともに、図１に示されるように、マスタユニット内に位置することができる。代替として、類似ユニットが、ＰＲＡＭラッパユニット１２８とともに、図２に示されるように、スレーブユニット１２０内に配置され得る。いずれのユニットも、ＰＲＡＭのアクセスをマスタユニット１１０またはスレーブユニット１２０のいずれかのみに与えるように設計される。他の実施形態は、論理のいくつかの部分をマスタコア内に、他の部分をスレーブコア内に設置するか、または論理を両ユニットの外側に配置し得る。同様に、通信インターフェース１３０は、いずれかのユニットの内側に、または両ユニットの完全に外側にあり得る。ＰＲＡＭアクセスユニット１１８または１２８のための追加の制御が、破線を用いて図２に示されるように、通信インターフェース１３０によって提供され得る。図２は、破線を用いて、追加のスレーブユニット１４０および１５０も示す。全てのユニットは、バスと各スレーブユニット内の関連付けられたラッパユニット１２８とを通して接続し得る。実施形態は、したがって、デュアルコア実装に限定されない。当業者は、他の実装も可能であることを認識するであろう。
【００１２】
種々の実施形態によると、マスタおよびスレーブプロセッサ間でデータを転送するために提案される２つのアプローチが存在する。メールボックスベースのデータパイプは、デフォルトアプローチであり、常時、存在する。ＦＩＦＯベースのデータパイプは、パラメータ化オプションである。各アプローチは、利点および不利点を有する。
【００１３】
種々の実施形態によると、ヒューズ構成可能双方向ｎ−ビット「メールボックス」レジスタの組が、通信インターフェース１３０内に提供され、通信インターフェース１３０は、任意のメールボックスに割り当てられたヒューズであり得るデータフロー制御論理の数ブロックと結合される。「双方向」とは、本明細書全体を通して、レジスタに関して、レジスタが構成されると、２つの方向のうちの１つが選定可能であることを意味する。動作時、各レジスタは、単方向性である。しかしながら、メールボックスは、いずれの方向にも動作するように構成されるレジスタを含み得るので、双方向と見なされ得る。１６ビットデュアルコアマイクロコントローラでは、これらのレジスタは、ｎ＝１６ビット幅であろう。いくつかの追加のバッファリングは、クロック多重化問題を排除し、メールボックスを各方向に複製する必要を回避する。１ワード〜１６ワードの範囲のアドレスされるデータのブロックは、したがって、メールボックスとなり得、いくつかの実施形態によると、書き込まれる／読み取られるべき最後のレジスタは、ハードウェアデータフロー制御プロトコルに関するであろう。各データレジスタの方向は、プログラム可能であるので、マスタまたはスレーブの参照は、データ転送プロトコルを議論する場合、意味がない。用語「送信機」および「受信機」は、したがって、この後、データ書き込みプロセッサおよびデータ読み取りプロセッサを表すためにそれぞれ使用される。データレジスタ方向に応じて、データ書き込みおよび読み取りプロセッサは、それぞれ、マスタおよびスレーブ、またはスレーブおよびマスタのいずれかであり得る。
【００１４】
いくつかの実施形態によると、メールボックスレジスタ動作データ方向は、例えば、デバイスヒューズ（メールボックスあたり１つ）によって決定されることができる。これは、以下により詳細に説明されるように、新規メールボックスレジスタ設計構造の使用によって実践され得る。
【００１５】
メールボックス内の（共有リソース）データレジスタへのアクセスは、データフロー制御プロトコルを使用して制御される。その結果、メールボックスベースのデータパイプへのアクセスは、互いに排他的である（すなわち、両プロセッサによって同時にアクセスされることができない）。各プロセッサは、アクセス制御を他に譲渡することに先立って、そのアクセスを完了しなければならない。
【００１６】
しかしながら、メールボックスの全コンテキストは、メモリにマップされ、任意の特定の順序でアクセスされる必要はないであろう（両プロセッサによって最後にアクセスされなければならないハードウェアデータフロー制御プロトコルをハンドリングするために割り当てられるメールボックスレジスタを除く）。
【００１７】
さらに、ソフトウェア管理バッファを構成するメールボックスは、メモリ内で連続してアドレスされることを要求されない。これは、転送されているデータが、制御、ステータス、およびシステムデータの混合物から成る用途において有益であり得る。さらに、２つ以上のデータレジスタから成るメールボックスに対して、メールボックス内の全データレジスタの方向は、同一である必要はない。データフロー制御プロトコルは、マスタとスレーブとの間でアクセス制御を移転するために使用されるが、プロトコルハードウェアに割り当てられるデータレジスタのみ、要求されるデータ方向ルールに準拠しなければならない。メールボックスの種々のサイズ、方向、および能力のバッファへのいくつかの可能な編成が、図４に関して以下により詳細に説明されるであろう。これらは、メールボックススキーム柔軟性を実証するためのものにすぎず、特定の使用モデルとして意図されない。他の構成も可能である。
【００１８】
各データフロー制御論理ブロックは、ヒューズビットフィールド設定に基づいて任意のメールボックスに割り当てられ得る（データフロー制御ブロックあたり１ビットフィールド）。前述の帰結は、ユーザが、サポートされるメールボックスの数（限定され得る）まで、任意のサイズのデータバッファを定義し得ることである。データフロー制御論理ブロックは、バッファの書き込まれるべき最後の要素に割り当てられるであろう。バッファ内の要素（すなわち、個々のメールボックスレジスタ）は、両方向における動作のために構成され得る（すなわち、バッファ内のデータは、書き込まれ、かつ読み取られ得る）。
【００１９】
ソースおよび宛先プロセッサクロックを読み取りおよび書き込みデータレジスタに対して単に多重化することは、設計タイミング問題を導入し、実践不能にする（かつ方向あたり１つの２つのメールボックスのインスタンス化を強いる）。しかしながら、両側の書き込みバッファと、書き込みデータをパイプラインする共通読み取りバッファ（書き込みクロックから遅延された多重化されたクロックを伴う）とをサポートすることによって、タイミング問題を解決し、種々の実施形態による効率的設計につながる。
【００２０】
クロック境界を横断するデータ路は、典型的には、上で概略された理由から、単方向性である。データフロー制御は、典型的には、クロック境界または他のインターフェースを横断するデータ路の各要素に関連付けられる。種々の実施形態によると、ヒューズが、ハンドシェイク論理を割り当て、設計複雑性を低減させる（主に、特殊機能レジスタ要件を低減させる）ために使用されることができる。
【００２１】
ヒューズは、通常、マイクロコントローラの構成中にのみ、すなわち、マスタフラッシュプログラムが、例えば、外部プログラマデバイスを通してプログラムされるときに設定される。通常、初期構成は、特定の用途のために設計され、ランタイム中には変更される必要はない。故に、ヒューズの使用は、好ましくあり得る。しかしながら、メールボックスをプログラムするための他の手段が、代わりに使用され得る。例えば、任意のタイプの不揮発性メモリが、ヒューズの代わりに使用され得る。
【００２２】
マルチコアマイクロコントローラまたは内蔵システムが、図１または２に示されるように、マスタコアとスレーブプロセッサとを備えているように設計され得る。前述のように、コプロセッサと異なり、スレーブプロセッサは、完全機能独立型プロセッサコアであり、複数の割り当てられたまたは割り当て可能な周辺デバイスを有し得る。同様に、マスタプロセッサは、複数の割り当てられたまたは割り当て可能な周辺デバイスを有し、それ自身のクロック上で起動し得る。異なるコアは、したがって、異なる速度を伴ってクロックされ得、例えば、スレーブコアは、いくつかの実施形態によると、処理集約タスクを制御可能であるために、より高いクロックを使用し得る。これも、概してフラッシュメモリより高速のプログラムメモリとしてのＲＡＭの使用によって可能される。
【００２３】
種々の実施形態によると、単純な１６ビットデータチャネルが、マスタおよびスレーブプロセッサ間に作成され、異なるクロックレートで非同期で起動する。そのような１６ビットチャネルは、最初に双方向であるように設計され得、方向は、ヒューズまたは構成レジスタを通してプログラム時に固定され、それは、ロバストかつ柔軟であり、特に、構成のためにヒューズを使用するとき、最小限のシリコン占有面積のみを要求し得る。
【００２４】
図３は、複数のメールボックスレジスタＭＢＸＤ０・・・ＭＢＸＤ１５と、関連付けられた論理３４０、３５０と、ヒューズ３１０、３２０と、メールボックスレジスタＭＢＸＤ０・・・ＭＢＸＤ１５によってリンクされるであろうマスタバスおよびスレーブバスとを含むブロック図を示す。ヒューズまたは構成メモリ３１０、３２０は、各メールボックスレジスタの方向およびハンドシェイク選択を制御する。共有ハンドシェイク論理ブロック３３０も、提供される。一実施形態によると、１６のメールボックスレジスタが、１６ビットデュアルコアマイクロコントローラ内に配置され得る。これらのレジスタは、異なるメールボックスに割り当てられることができ、各レジスタは、１つのメールボックスにのみ割り当てられることができる。
【００２５】
図４は、データ、ステータス、およびコマンドワードを含むであろう、マスタ／スレーブデータインターフェース１３０内のメールボックスの異なる可能な構成を示す。Ｈ／Ｗデータフロー制御が割り当てられないことに留意されたい。アクセスは、ソフトウェアプロトコルを介して制御される。図４に示されるように、メールボックスは、異なるレジスタ４１０の組に分割されることができる。この目的を達成するために、例えば、図４の右側に示されるように、構成ヒューズ４２０が、使用され得る。ヒューズ４２０のブロックは、最初の９つのレジスタを第１のメールボックスに割り当て、次のレジスタを未使用のまま残し、次の４レジスタを第２のメールボックスに割り当てる。最後の２つのレジスタは、ヒューズを、例えば、Ｆｈまたは任意の他の所定の値に設定することによって、ステータスおよびコマンドワードとして使用される。
【００２６】
例１は、２つの一方向バッファ、コマンドワード、およびステータスワードをサポートする配置を示す。データフロー制御論理ブロックは、バッファの各々のアクセスされる最後のワードに割り当てられる（バッファ長は、サポートされるメールボックスの限界数内で恣意的であることに留意されたい）。データフロー制御論理ブロックも、コマンドワードに割り当てられる。しかしながら、ステータスワードへのアクセスは、ソフトウェアを通して制御され、したがって、データフロー制御論理ブロックが要求されない。メールボックスレジスタＭＳＩｘＭＢＸＤ９は、使用されない。
【００２７】
例２は、２つの双方向バッファおよびコマンドワードをサポートする配置を示す。データフロー制御論理ブロックは、バッファのその他ではなく、そのうちの１つのアクセスされる最後のワードに割り当てられる。これは、１つのみのプロセッサが、常に、他のバッファアクセスが完了した後、バッファにアクセスするであろうことをこの用途が保証し得るからである。データフロー制御論理ブロックも、コマンドワードに割り当てられる。
【００２８】
図５は、図５の上半分にデータ書き込みチャネルを、下半分にデータ読み取りチャネルを示す。左側は、マスタ側を、右側は、スレーブ側を表す。実際のメールボックス５４０は、書き込み動作に対して、バッファレジスタ５１０または５２０を介してマルチプレクサ５３０を通して、読み取り動作に対して、直接、アクセスされる。メールボックス５４０は、概して、マスタコアによって制御される。しかしながら、クロックは、マルチプレクサ５５０を通して、マスタまたはスレーブのいずれかによって提供される。図５に示されるように、フラグｃｆｇ＿ｍｂｏｘ＿ｍａｓｔｅｒ＿ｄａｔａ＿ｒｄ［ｎ］は、メールボックスレジスタがマスタに関して書き込みチャネル（図５の上）または読み取りチャネル（図５の下）として構成されるかどうかを決定する。書き込みは、マスタまたはスレーブのいずれかによってのみ可能される一方、読み取りは、マスタまたはスレーブの両方によって行われ得る。マルチプレクサ５６０および５７０は、ある実施形態によると、例えば、実際のメールボックス更新が半サイクルだけ遅延されるので、送信機の書き込みの直後の読み取りをサポートし、実際のメールボックスレジスタを受信機のための読み取りソースとして選択するために実装され得る。
【００２９】
ある実施形態によると、送信機に対して、メールボックスが書き込まれ、次いで、読み取りの１サイクル以内に読み取られる場合、ハードウェアは、ｐｉｐｅｌｉｎｅｄ＿ｗｒｅｎをアサートし、読み取りが、書き込まれたばかりのバッファレジスタ５１０または５２０から生じる。メールボックスが、書き込まれてから１サイクル後の任意の時点で読み取られる場合、ｐｉｐｅｌｉｎｅ＿ｗｒｅｎ＝０であり、読み取りが、実際のメールボックスレジスタから供給される。しかし、実際のメールボックスは、常時、メールボックスバッファ５１０または５２０で更新される。伝送バッファが読み取られる、他の実装も可能である。受信機に対して、明らかなこととして、書き込まれることのないＭＢＯＸバッファ５１０／５２０は、読み取られず、したがって、信号ｐｉｐｅｌｉｎｅｄ＿ｗｒｅｎ＝０であり、実際のメールボックスが、選択される。
【００３０】
一実施形態による、１６個のＭＳＩメールボックスデータレジスタＭＳＩｘＭＢＸＤｎ（０＜＝ｎ＜＝１５）の各々は、そのデータ方向以外は同じである。配置は、いくつかの実施形態によると、８つのデータフロー制御プロトコルハードウェアブロックを含み得、それらの各々は、任意のデータレジスタに割り当てられ、メールボックスを形成し得る。
【００３１】
以下は、通信インターフェースの例示的実施形態をより詳細に説明する。全メールボックスＭＳＩｘＭＢＸＤｎデータレジスタは、レジスタコンテンツがマスタおよびスレーブポートの両方から読み取られる／書き込まれることがないように、一方向である。各ＭＳＩｘＭＢＸＤｎレジスタは、選択されたチャネルデータ方向に応じて、マスタ（送信機として）から読み取られ、かつ書き込まれるが、スレーブ（受信機として）からは読み取りのみされるか、またはスレーブ（送信機として）から読み取られ、かつ書き込まれるが、マスタ（受信機として）からは読み取りのみされるかのいずれかである。このアプローチは、データ書き込み競合を回避し、設計を単純化することを意図する。
【００３２】
各メールボックスデータレジスタは、読み取りまたは書き込みチャネルのいずれかであるように構成されるヒューズであり得る（マスタの観点から）。メールボックス［ｎ］に対して：
・ｃｆｇ＿ｍｂｏｘ＿ｍａｓｔｅｒ＿ｄａｔａ＿ｒｄ［ｎ］＝０：データレジスタは、マスタデータ書き込みチャネルとして構成される。
・ｃｆｇ＿ｍｂｏｘ＿ｍａｓｔｅｒ＿ｄａｔａ＿ｒｄ［ｎ］＝１：データレジスタは、マスタデータ読み取りチャネルとして構成される。
【００３３】
この概念は、全レジスタを双方向（設計を複雑にする）にする代わりに、適正な柔軟性を提供するためのものである。そのようなアプローチの主な短所は、各レジスタのデータ方向がランタイム時に固定されることである。
【００３４】
自動化されたデータフロー制御機構が、種々の実施形態によると、メールボックスを通したデータのフローを制御するためにサポートされる。
【００３５】
８つのデータフローハンドシェイクプロトコルハードウェアブロックの各々は、ＭＳＩｘＭＢＸＳレジスタ内に位置する２つのＤａｔａ  Ｒｅａｄｙステータスフラグ（ＤＴＲＤＹ＿α、αは、Ａ、Ｂ、Ｃ、Ｄ、Ｅ、Ｆ、Ｇ、またはＨである）を制御する。一方のフラグは、データ送信機のためのものであり、インターフェースの伝送側のＭＳＩｘＭＢＸＳレジスタ内に位置する。他方は、データ受信機のためのものであり、インターフェースの受信側のＭＳＩｘＭＢＸＳレジスタ内に位置する。
【００３６】
データ送信機は、常時、転送イニシエータとなると仮定され、したがって、データ受信機からのハードウェアデータ要求は、要求されない。その用途が転送を開始するためにデータ要求を要求する場合、それは、ソフトウェアを通してハンドリングされなければならない。受信側プロセッサソフトウェアは、伝送側プロセッサに、データが要求されることを示す必要があろう。これは、割り込みまたはメールボックスベースのソフトウェアコマンドプロトコルのいずれかを通して達成され得る。
【００３７】
ハンドシェイクプロトコルハードウェアブロックの各々は、それに関連付けられたヒューズイネーブルを有する（ｃｆｇ＿ｍｂｏｘ＿ｈａｎｄｓｈａｋｅ＿ｅｎａｂｌｅ＿ｎ［７：０］）。ヒューズは、対応するハンドシェイクプロトコルハードウェアブロックをイネーブルにするためにプログラムされなければならない。ヒューズｃｆｇ＿ｍｂｏｘ＿ｈａｎｄｓｈａｋｅ＿ｅｎａｂｌｅ＿ｎ［０］は、ハンドシェイクプロトコルハードウェアブロックＡに対応し、ｃｆｇ＿ｍｂｏｘ＿ｈａｎｄｓｈａｋｅ＿ｅｎａｂｌｅ＿ｎ［１］は、ハンドシェイクプロトコルハードウェアブロックＢに対応する等。
【００３８】
８つのプロトコルブロックの各々は、ｃｆｇ＿ｍｂｏｘ＿ｈａｎｄｓｈａｋｅ＿ｒｅｇｉｓｔｅｒ＿ｓｅｌｅｃｔ［３１：０］内の８つの４ビットフィールドによって特定のＭＳＩメールボックスデータレジスタに割り当てられる。選択されたＭＳＩメールボックスレジスタは、メールボックスプロトコルデータレジスタと称される。割り当てられないメールボックスレジスタは、メールボックスデータレジスタと称される。プロトコルデータレジスタは、単一メールボックス、または、ソフトウェアを通してバッファとして定義されたメールボックスレジスタの組内の１つのメールボックスレジスタであり得る。メールボックスがバッファとして定義されると、最後のバッファアクセスは、いくつかの実施形態によると、プロトコルデータレジスタに対してでなければならない。同様に、受信側プロセッサが、データの準備ができていることを確認し、メールボックスにアクセスするとき、最後のバッファアクセスも、プロトコルデータレジスタに対してでなければならない。
【００３９】
プロセッサのいずれもメールボックスにアクセスしていないとき、データフロー制御ハードウェアは、アイドル状態（ＭＳＩｘＭＢＸＳ．ＤＴＲＤＹ＿α＝０）にある。伝送側プロセッサは、ここでメールボックスにアクセスし、データ転送データフロー制御を開始し得る。データフロー制御は、以下に説明されるように動作し、ＭＳＩｘＭＢＸＤｎは、プロトコルハードウェアブロックαに割り当てられると仮定される（すなわち、ＭＳＩｘＭＢＸＤｎは、プロトコルデータレジスタである）。
１．伝送側プロセッサ：
ａ）最後のデータワードを除き、全てを書き込む（バッファの場合）
ｂ）Ｄｉｎ→ＭＳＩｘＭＢＸＤｎ（最後のデータ書き込み）；１→ＤＴＲＤＹ＿α（自動）；ａＲｅａｄｙ  Ｔｏ  Ｒｅａｄ割り込みを受信機に送信する（自動）
２．受信側プロセッサ：
Ｒｅａｄｙ  Ｔｏ  Ｒｅａｄ割り込み１を受信する
ａ）最後のデータワードを除き、全てを読み取る（バッファの場合）
ｂ）ＭＳＩｘＭＢＸＤｎ＿αＤｏｕｔ（最後のデータ読み取り）；０→ＤＴＲＤＹ＿α（自動）；Ｒｅａｄｙ  Ｔｏ  Ｗｒｉｔｅ割り込みを送信機に送信する（自動）
３．伝送側プロセッサ：
Ｒｅａｄｙ  Ｔｏ  Ｗｒｉｔｅ割り込みを受信する
ａ）０→ＤＴＲＤＹ＿α（自動２）
ｂ）［１］にループバックし、必要に応じて繰り返す。
【００４０】
ステップ３ａ後、データフロー制御が完了し、伝送側プロセッサは、終了する、またはさらなるデータの送信に進み得る（すなわち、ステップ１にループバックする）。プロトコルシーケンス略図が、図６に示される。前述のように、ＭＳＩｘＭＢＸＤｎレジスタへの送信機書き込みによるＤＴＲＤＹ＿αフラグの設定は、対応するメールボックスからの受信機データフロー制御プロトコル割り込み（Ｒｅａｄｙ  Ｔｏ  Ｒｅａｄ）をもたらすであろう。
【００４１】
同様に、ＭＳＩｘＭＢＸＤｎレジスタの受信機読み取りによるＤＴＲＤＹ＿αフラグのクリアは、対応するメールボックスからのデータ送信機データフロー制御プロトコル割り込み（Ｒｅａｄｙ  Ｔｏ  Ｗｒｉｔｅ）をもたらすであろう。データフロー制御が正しく動作するために、伝送側プロセッサは、ＤＴＲＤＹ＿α＝０を観察するまで、新しいデータをメールボックスチャネルの中に送信してはならない。同様に、受信側プロセッサは、データをメールボックスから読み取る前、ＤＴＲＤＹ＿α＝１まで待機しなければならない（そうでなければ、それは古いデータを読み取り得る）。
【００４２】
割り込みの使用は、メールボックスデータフロー制御プロトコルを管理する主要方法であることを意図されるが、ソフトウェアを用いてステータスビットをポーリングすることも可能である。メールボックスを通して送信されるデータが周期的制御プロセス内で使用されることになる用途では、ソフトウェアがメールボックスデータフロー制御ステータスフラグをポーリングすることは、好ましいアプローチであり得る。伝送および受信側プロセッサポーリングソフトウェアは、データフロー制御の状態を決定するために、それらのそれぞれのＤＴＲＤＹ＿αフラグを試験すべきである。伝送および受信側プロセッサの観点からのデータフロー制御ステータスビットの意味は、以下の通りである：
・伝送側プロセッサ：
−ＤＴＲＤＹ＿α＝０：データの送信の準備ができている（メールボックスが空またはデータが古い）
−ＤＴＲＤＹ＿α＝１：データの送信の準備ができていない（メールボックスがまだ読み取られていない）
・受信側プロセッサ：
−ＤＴＲＤＹ＿α＝０：データの受信の準備ができている（メールボックスが空またはデータが古い）
−ＤＴＲＤＹ＿α＝１：データが読み取りのために利用可能（しかし、まだ読み取られていない）
【００４３】
ＭＳＩｘＭＢＸＤｎレジスタは、ＰＯＲ／ＢＯＲ以外、どんなデバイスリセットも受けず、したがって、データは、受信機ソフトウェアがそれを使用可能であるように保存される。受信機読み取りがすでに進行中（すなわち、割り込みがトリガされるか、またはＤＴＲＤＹ＿αがポーリングされ、設定されていることが見出される）である場合、リセット値の代わりに、有効（古い場合）データを返すことが好ましいと仮定される。しかしながら、全てのＤＴＲＤＹ＿αフロー制御ビット（マスタおよびスレーブの両方）は、マスタ（ｕｐｂｍ＿ｒｅｓｅｔ＿ｎ）リセットを受ける。これは、リセット終了時、データフロープロトコルブロックを初期化するために必要である。マスタがリセットを被る場合、プロトコルデータフロー制御ＭＳＩｘＭＢＸＳ．ＤＴＲＤＹ＿αフラグのマスタおよびスレーブの両方のビューは、リセットされるであろう。スレーブがマスタリセットの場合に起動し続けるであろうように、スレーブリセットがマスタ（ヒューズＭＳＲＥ＝０）から分断されると仮定すると、ＭＳＩｘＭＢＸＤｎレジスタへのマスタ（送信機）書き込みの直後にマスタリセットが続く場合、スレーブ（受信機）側割り込み要求は、生じないであろう。
【００４４】
スレーブがリセットを被る場合、ＤＴＲＤＹ＿αフロー制御ビットのマスタまたはスレーブビューのいずれも、リセットされないであろう。ＭＳＩｘＭＢＸＤｎレジスタへのスレーブ（送信機）書き込みの直後にスレーブリセットが続く場合、マスタ（受信機）側割り込み要求は、依然として、正常に生じるであろう。マスタリセットに伴う両マスタおよびスレーブＤＴＲＤＹ＿αフロー制御ビットのリセットも、可能なデータ競合条件を回避するために要求される。スレーブＭＳＩｘＭＢＸＳ．ＤＴＲＤＹ＿αフラグの場合、マスタおよびスレーブリセットが分断されず（ヒューズＭＳＲＥ＝０）、スレーブリセットがスレーブをディスエーブルにしない（ヒューズＳＳＲＥ＝０）とき、可能なデータ競合条件が、スレーブＤＴＲＤＹ＿αフラグがスレーブリセットによってリセットされるべき場合に生じ得る。
【００４５】
スレーブＤＴＲＤＹ＿αフラグがスレーブリセットに基づいてセットされるべき場合、マスタがリセットし、スレーブのそれではなく、ＤＴＲＤＹ＿αフラグのマスタビューをリセットすることが可能であり得る。これは、（依然として、起動中の）スレーブがスレーブＤＴＲＤＹ＿αフラグをサービスし、可能性として、マスタが対応するメールボックス（マスタＤＴＲＤＹ＿α＝０であるので空であると仮定する）に書き込んでいる間、それを読み取る機会を残すであろう。
【００４６】
受信機によるＭＳＩｘＭＢＸＤｎレジスタからの読み取りは、受信機ＤＴＲＤＹ＿α＝１である場合、データフロー制御プロトコル割り込み（Ｒｅａｄｙ  Ｔｏ  Ｗｒｉｔｅ）のみを発生させるであろう。受信機ＤＴＲＤＹ＿α＝０（メールボックスからの新しいデータの初期読み取り後の場合であろう）である場合、受信機によるメールボックスの後続読み取りは、何ら影響を及ぼさないであろう（標的メールボックスのデータコンテンツを返す以外）。
【００４７】
これは、メールボックスが、それを通して移動させられる最後のデータ値の一時的記憶のために受信機によって使用されることを可能にする。しかしながら、データがメールボックスから読み取られた後、そのコンテンツは、古いと見なされ、送信機による変更を受けなければならない（随時）。その結果、メールボックスの一時記憶を正常に管理するために、ソフトウェアデータ転送プロトコルは、データ送信機がメールボックスのコンテンツを新しいデータで恣意的に上書きすることをデータ受信機が防止し得るような場所に存在すると仮定される。例えば、受信機が送信機からデータを要求する必要がある場合（別のメールボックスまたは割り込みを介して）、送信機は、メールボックスを上書きしないであろう。
【００４８】
任意のＳＦＲの場合のように、ＭＳＩｘＭＢＸＤｎレジスタは、バイトまたはワード査定可能である。データバッファを使用するとき、バイトサイズおよびワードサイズの両方のデータトランザクションをサポートするために、送信機プロトコルレジスタのＭＳバイトまたはワード書き込みのいずれかがは、対応するＤＴＲＤＹ＿αフラグを設定するであろう。同様に、受信機プロトコルデータレジスタ（ＭＳＩの他側）のＭＳバイトまたはワード読み取りのいずれかが、対応するＤＴＲＤＹ＿αフラグを設定するであろう。
【００４９】
メールボックスデータレジスタは、デバイス上で利用可能である場合、ＤＭＡを使用して、ＭＳＩのマスタまたはスレーブ側でアクセスされ得る。メールボックスデータフロー制御プロトコルは、ＤＭＡ動作と適合性がある割り込みを発生させ、個々のメールボックスレジスタ内のデータがＣＰＵ介入を伴わずに転送されることを可能にするであろう。メールボックスのＤＭＡアクセスも、マスタおよび／またはスレーブサブシステムが、アイドルモードで動作中であるときにサポートされる。
【００５０】
第１のＤＭＡデータ値（またはブロック）が転送されるために、割り当てられた送信機ＤＭＡチャネルは、ソフトウェアによって、または第１のデータ値（またはデータのブロック）をソフトウェア内に手動で書き込むことによって、トリガされ得る。ＤＭＡがメールボックスプロトコルデータレジスタに書き込むとき（ブロック転送の場合の最後の書き込み）、対応するＤＴＲＤＹ＿αフラグが、設定されるであろう。送信機ＤＴＲＤＹ＿αフラグの設定は、Ｒｅａｄｙ  Ｔｏ  Ｒｅａｄ割り込みをインターフェースの受信機側に発生させるであろう。受信機Ｒｅａｄｙ  Ｔｏ  Ｒｅａｄ割り込み（メールボックスプロトコルデータレジスタが送信機によって書き込まれ、ＤＴＲＤＹ＿α＝１を設定した後に開始される）は、対応する受信機ＤＭＡチャネルをトリガし、それに標的メールボックス（またはブロック転送の場合、複数のメールボックス）を読み取らせるであろう。そうすることによって、対応するＤＴＲＤＹ＿αフラグをクリアするであろう。受信機ＤＴＲＤＹ＿αフラグのクリアは、送信機Ｒｅａｄｙ  Ｔｏ  Ｗｒｉｔｅ割り込みをインターフェースの送信機側に発生させるであろう。これは、割り当てられた送信機ＤＭＡチャネルをトリガし、次のデータ値（またはデータのブロック）を書き込み、ＤＴＲＤＹ＿αフラグを自動設定し、シーケンスを再び開始させるであろう。
【００５１】
メールボックスは、非関連クロック速度で動作するプロセッサ間のデータ路として動作するので、全てのデータおよび制御信号は、クロック境界を横断して移動する場合、同期させられなければならない。これは、データが書き込まれるときと、受信されるために利用可能になるときとの間の遅延を生じさせるであろう。これは、メールボックスチャネル待ち時間と称される。
【００５２】
同期遅延は、ＭＳＩｘＭＢＸＤｎの送信機書き込みから対応する受信機割り込み要求の立ち上がりまでの１送信機クロック＋２受信機クロックである。データは、受信機割り込み要求のアサートに先立って、受信機によって読み取られるために利用可能であろう。受信機ＤＴＲＤＹ＿αフラグをポーリングする用途に対して、遅延は、ＭＳＩｘＭＢＸＤｎの送信機書き込みから受信機ＤＴＲＤＹ＿αフラグ更新までの１送信機クロック＋３受信機クロックである。
【００５３】
同様に、ＭＳＩｘＭＢＸＤｎの受信機読み取りから対応する送信機割り込み要求の立ち上がりまでの遅延は、１受信機クロック（受信機ＤＴＲＤＹ＿αフラグを更新するため）＋２送信機クロックとなるであろう。送信機ＤＴＲＤＹ＿αフラグをポーリングする用途に対して、遅延は、ＭＳＩｘＭＢＸＤｎの受信機読み取りから対応する送信機割り込み要求の立ち上がりまでの１送信機クロック＋３受信機クロックである。
【００５４】
プロトコルハンドシェイクは、完全に自動であり、したがって、過剰データ転送待ち時間に影響する全ての他の遅延は、ソフトウェアポーリング、割り込み、またはＤＭＡ転送待ち時間の関数となるであろう。
【００５５】
例えば、図６を参照すると、割り込み（コンテキスト切替がイネーブルにされた状態で）が、メールボックスからデータが読み取られ／そこに書き込まれるために使用され、メールボックスの中にデータを書き込むためにかかる時間を除外すると仮定する場合、メールボックスチャネル待ち時間は、送信機書き込みサイクルの終了から第１の受信機ＩＳＲ命令までの１（同期）送信機クロック＋２（同期）＋５（例外処理）受信機クロックとなるであろう。
【００５６】
システムが、ＤＭＡチャネルを使用して、データを移動させる場合、メールボックスチャネル待ち時間は、上で説明されたＤＭＡ転送待ち時間（３サイクル）および同期待ち時間から成る。すなわち、ＤＭＡチャネルが送信機および受信機の両方内のメールボックスに配分されると仮定して、送信機および受信機ＤＭＡバッファ間でデータのワードを移動させるためのメールボックスチャネル待ち時間（バス仲裁遅延を被らないと仮定して）は、受信機ＤＭＡチャネル要求までの３（ＤＭＡ転送）＋１（同期）送信機クロック＋２（同期）受信機クロックとなるであろう。データは、後に受信機バッファ３受信機クロック以内に到着するであろう。しかしながら、ＤＭＡは、転送の第１のサイクル中にＭＳＩｘＭＢＸＤｎを読み取り、それは、帰還信号をトリガし、送信機ＤＴＲＤＹ＿αフラグをクリアし、別の転送を開始させるであろう。したがって、帰還待ち時間は、次の送信機ＤＭＡチャネル要求までの１（ＤＭＡ読み取り）＋１（同期）受信機クロック＋２（同期）送信機クロックとなるであろう。転送されるワードあたりの総往復経路遅延は、したがって、６送信機クロック＋４受信機クロックである。
【００５７】
提案される実施形態は、ヒューズを介してデータチャネルのデータフロー方向を選択およびロックする能力、いくつかのデータチャネルフロー制御（ハンドシェイク）論理ブロックのうちの１つを任意のメールボックスに割り当てる能力、および論理重複を回避しながら、実装が容易な双方向データチャネルを非同期クロックドメイン間に生成する能力を提供する。
【００５８】
図７は、追加の随意のＦＩＦＯデータパイプを示す。デュアルまたはマルチコアマイクロコントローラの実施形態はまた、図７に示されるように、２つのＦＩＦＯ７１０、７２０の組を含み得、一方は、スレーブからのデータ読み取りのためのものであり、他方は、スレーブへのデータ書き込みのためのものである。各ＦＩＦＯの存在および深度は、パラメータを通して決定される。ＦＩＦＯは、マスタおよびスレーブプロセッサ間のデータキューを協調させるために使用される。各ＦＩＦＯチャネルデータフローは、一方向であり、設計および動作を簡略化する。すなわち、一方のＦＩＦＯは、専用読み取りデータチャネルであり、他方は、専用書き込みデータチャネルである。固有の同期遅延にかかわらず、ＦＩＦＯ設計は、データ保留が要求されないようなものである（データ保留は、典型的には、同期遅延または動作速度差の結果としての低速占有率計算に起因する書き込みオーバーランに適応するために追加される）。
【００５９】
ＦＩＦＯは、空とならない（またはエラー条件に遭遇しない）ことを前提として、マスタおよびスレーブは、並行して、それにアクセスし得る。ＦＩＦＯは、したがって、他方によって読み取られる前に一方のプロセッサによってロードされなければならないメールボックスベースのデータパイプより優れたスループットをもたらし得る。
【００６０】
しかしながら、ＦＩＦＯコンテンツは、順番にロードおよびアンロードされ、メールボックスデータパイプ内のデータのようにランダムにアクセス可能ではない。ＦＩＦＯも、（定義上）一方向である。これは、ＦＩＦＯをプロセッサ間でデータのブロックを転送するための最速手段を必要とする用途により好適にする。
【００６１】
デュアルまたはマルチコアマイクロコントローラの実施形態はまた、例えば、パラメータＭＳＩ＿ＦＩＦＯ＿ＰＲＥＳＥＮＴ＝１の場合、２チャネルＦＩＦＯを含み得る。ＦＩＦＯは、マスタおよびスレーブプロセッサ間のデータキューを協調させるために使用される。ＦＩＦＯは、空にならない（またはエラー条件に遭遇しない）ことを前提として、マスタおよびスレーブは、並行して、それにアクセスし得る。ＦＩＦＯは、したがって、他方によって読み取られる前に一方のプロセッサによってロードされなければならないメールボックスベースのデータパイプより優れたスループットをもたらし得る。各ＦＩＦＯチャネルデータフローは、一方向であり、設計および動作を簡略化する。すなわち、図７に示されるように、一方のチャネルは、専用読み取りデータチャネルであり、他方は、専用書き込みデータチャネルである。一貫性のために、ＦＩＦＯは、常時、マスタプロセッサのそれらの見方に関して言及される。
【００６２】
さらに、ＦＩＦＯデータレジスタは、レジスタ名内に関連付けられた方向を有していない。しかしながら、マスタのこれらのレジスタの見方に基づいて、マスタＷＦＤＡＴＡレジスタは、書き込みＦＩＦＯ（Ｗｒｉｔｅ  ＦＩＦＯ）データ書き込み（入力）レジスタとなり、スレーブＷＦＤＡＴＡレジスタは、書き込みＦＩＦＯデータ読み取りレジスタとなるであろう。同様に、マスタＲＦＤＡＴＡレジスタは、読み取りＦＩＦＯ（Ｒｅａｄ  ＦＩＦＯ）データ読み取り（出力）レジスタとなり、スレーブＲＦＤＡＴＡレジスタは、読み取りＦＩＦＯデータ書き込みレジスタとなるであろう。以下の節では、データ送信機は、データをＦＩＦＯの中に書き込むプロセッサである。逆に言えば、データ受信機は、データをＦＩＦＯから読み取るプロセッサである。
【００６３】
ＦＩＦＯは、対応するイネーブル制御ビットがクリアにされる度にディスエーブルにされるであろう（書き込みＦＩＦＯのためのＭＳＩｘＦＩＦＯＣＳ．ＷＦＥＮおよび読み取りＦＩＦＯのためのＭＳＩｘＦＩＦＯＣＳ．ＲＦＥＮ）。ＦＩＦＯイネーブル制御ビットは、デバイスリセット中にクリアされる。通常動作条件下、ＦＩＦＯは、イネーブルにされたままであろう。しかしながら、ＦＩＦＯエラーの場合、またはスレーブプロセッサがリセットした（または応答を停止し、リセットされる必要がある）場合、ＭＳＩｘＦＩＦＯＣＳ．ＷＦＥＮおよびＭＳＩｘＦＩＦＯＣＳ．ＲＦＥＮ制御ビットが、必要に応じて、ＦＩＦＯをフラッシュおよび再初期化するために使用されることができる。ディスエーブルにされると、ＦＩＦＯコンテンツは、ワイプ（論理「０」にリセット）され、アドレスポインタが、ＦＩＦＯ空状態に初期化され、両ポインタは、各々に等しく（この場合、全て０に）設定される。ＦＩＦＯ空ステータスビットも、設定される（書き込みＦＩＦＯのためのＭＳＩｘＦＩＦＯＣＳ．ＷＦＥＭＰＴＹおよび読み取りＦＩＦＯのためのＭＳＩｘＦＩＦＯＣＳ．ＲＦＥＭＰＴＹ）。ＦＩＦＯがイネーブルにされた後、空ステータスビットは、第１のデータ値がＦＩＦＯの中に書き込まれるような時間まで設定されたままであろう。
【００６４】
マスタからスレーブプロセッサにパスされるべきデータは、マスタプロセッサによって書き込みＦＩＦＯデータ書き込みレジスタ（マスタＭＳＩｘＷＦＤＡＴＡ［１５：０］）の中に書き込まれる。スレーブは、次いで、データを書き込みＦＩＦＯデータ読み取りレジスタ（スレーブＭＳＩｘＷＦＤＡＴＡ）から読み取ることができる。スレーブからマスタプロセッサにパスされるべきデータは、スレーブプロセッサによって読み取りＦＩＦＯデータ書き込みレジスタ（ＭＳＩｘＲＦＤＡＴＡ［１５：０］）の中に書き込まれる。マスタは、次いで、データを読み取りＦＩＦＯデータ読み取りレジスタ（ＭＳＩｘＲＦＤＡＴＡ）から読み取ることができる。
【００６５】
各データレジスタアクセスは、データチャネルＦＩＦＯアドレスポインタを修正するので、データは、単一エンティティ（すなわち、ワードまたはバイト）として書き込まれ、読み取られることになる。ＦＩＦＯデータ書き込みレジスタ（マスタＭＳＩｘＷＦＤＡＴＡ［１５：０］およびスレーブＭＳＩｘＲＦＤＡＴＡ［１５：０］）は、書き込み専用レジスタである。これらのレジスタの読み取りは、全て０を返し、ＦＩＦＯアドレスポインタに影響を及ぼさないであろう。ＦＩＦＯデータ読み取りレジスタ（マスタＭＳＩｘＲＦＤＡＴＡ［１５：０］およびスレーブＭＳＩｘＷＦＤＡＴＡ［１５：０］）は、読み取り専用である。これらのレジスタへの書き込みは、影響を及ぼさないであろう。データは、データ送信機がＦＩＦＯデータ書き込みレジスタに書き込むとき、ＦＩＦＯ内の次の空いている場所に書き込まれる（書き込みＦＩＦＯのためのＭＳＩｘＷＦＤＡＴＡおよび読み取りＦＩＦＯのためのＭＳＩｘ−ＲＦＤＡＴＡ）。ＦＩＦＯに書き込まれる最後のデータは、レジスタ内に保持され、次のシステムクロックエッジにおいてＦＩＦＯ  ＦＳＭによってＦＩＦＯメモリの中にロードされる。このレジスタの読み取りは、全て０を返すであろう。このレジスタは、データ受信機プロセッサ（ＦＩＦＯの読み取り側）に不可視である。
【００６６】
アドレスされたＦＩＦＯ場所がロードされると、書き込みアドレスポインタは、循環バッファ内の次の空いている場所を指すように調節される。空いている場所が残っていない場合、ＦＩＦＯフルステータスビットが設定される（書き込みＦＩＦＯのためのＭＳＩｘＦＩＦＯＣＳ．ＷＦＦＵＬＬおよび読み取りＦＩＦＯのためのＭＳＩｘ−ＦＩＦＯＣＳ．ＲＦＦＵＬＬ）。
【００６７】
データは、データ受信機プロセッサがＦＩＦＯデータ読み取りレジスタを読み取るとき、ＦＩＦＯから読み取られる（書き込みＦＩＦＯのためのＭＳＩｘＷＦＤＡＴＡおよび読み取りＦＩＦＯのためのＭＳＩｘＲＦＤＡＴＡ）。読み取りサイクルは、読み取りポインタによってアドレスされたＦＩＦＯメモリ場所からデータにアクセスするであろう。
【００６８】
このレジスタは、書き込み可能ではなく、データ送信機プロセッサ（ＦＩＦＯの書き込み側）に可視でもない。アドレスされたＦＩＦＯ場所が読み取られた後、読み取りアドレスポインタは、循環バッファ内の次の有効データ場所を指すように調節される。読み取られるための場所が残っていない場合、ＦＩＦＯ空ステータスビットが設定される（書き込みＦＩＦＯのためのＭＳＩｘＦＩＦＯＣＳ．ＷＦＥＭＰＴＹおよび読み取りＦＩＦＯのためのＭＳＩｘＦＩＦＯＣＳ．ＲＦＥＭＰＴＹ）。
【００６９】
ＦＩＦＯは、種々の方法で使用され得る。データは、要求されるか、またはプロセッサにプッシュされ得る。データ肯定応答は、直接（空ステータスビット状態または関連付けられた割り込みを使用して）または間接的に（プロセッサまたはプロセッサ割り込みを使用して）伝えられ得る。
【００７０】
例えば、ある実施形態によると、ＦＩＦＯ空ステータスビットが、割り込みをデータ送信機プロセッサに発生させるために使用される。ＦＩＦＯ割り込みトリガ選択ビット（ＲＦＩＴＳＥＬ［１：０］およびＷＦＩＴＳＥＬ［１：０］）が、ＦＩＦＯアドレスポインタと併せて使用され、受信側プロセッサのためのデータ有効割り込みを発生させるべきときを決定する。これらの割り込みは、データ転送プロトコルの一部として使用されることが意図される。しかしながら、用途によって要求されない場合、それらは、割り込みコントローラマクロ内でディスエーブルにされ得る。
【００７１】
ある実施形態によると、ＦＩＦＯが空であると見なされるとき、ＦＩＦＯ空ステータスフラグが、設定され、ＦＩＦＯ空割り込みが、データ送信機プロセッサのために発生させられる。割り込みは、空ステータスフラグの論理０から論理１遷移に基づいて発生させられることができる（書き込みＦＩＦＯのためのＭＳＩｘＦＩＦＯＣＳ．ＷＦＥＭＰＴＹおよび読み取りＦＩＦＯのためのＭＳＩｘＦＩＦＯＣＳ．ＲＦＥＭＰＴＹ）。ＦＩＦＯへのデータの書き込みは、空ステータスフラグをクリアし、データ有効割り込みを受信機に送信するであろう。
【００７２】
送信機プロセッサがＦＩＦＯに書き込むと、データ有効割り込みパルスが、図８に一般化されるように、ＦＩＦＯポインタのコンテンツと併せて、ＦＩＦＯ割り込みトリガ選択ビットの状態に基づいて発生させられ得る（それぞれ、読み取りおよび書き込みＦＩＦＯのためのＲＦＩＴＳＥＬ［１：０］およびＷＦＩＴＳＥＬ［１：０］）。
【００７３】
データが以前に空のＦＩＦＯの中に書き込まれるとき、空ステータスフラグ（書き込みＦＩＦＯのためのＭＳＩｘＦＩＦＯＣＳ．ＷＦＥＭＰＴＹおよび読み取りＦＩＦＯのためのＭＳＩｘＦＩＦＯＣＳ．ＲＦＥＭＰＴＹ）は、クリアされ、ＦＩＦＯが再び空になるような時間までクリアなままである。割り込みは、空ステータスフラグの論理１から論理０遷移に基づいて発生させられる。
【００７４】
データ書き込みが、ＦＩＦＯ割り込みトリガ選択ビットによって定義された閾値を満たすＦＩＦＯをもたらすとき、データ有効割り込みが、閾値が満たされることを引き起こす（すなわち、次のＦＩＦＯアドレスへの書き込みはない）ＦＩＦＯ書き込みに基づいて発生させられる。データ書き込みがＦＩＦＯがフルになる結果をもたらす場合、フルステータスフラグ（書き込みＦＩＦＯのためのＭＳＩｘＦＩＦＯＣＳ．ＷＦＦＵＬＬおよび読み取りＦＩＦＯのためのＭＳＩｘ−ＦＩＦＯＣＳ．ＲＦＦＵＬＬ）も、設定され、ＦＩＦＯがもはやフルではなくなるような時間まで設定されたままであろう。
【００７５】
ＦＩＦＯフルステータスビットが設定された後（書き込みＦＩＦＯのためのＭＳＩｘＦＩＦＯＣＳ．ＷＦＦＵＬＬおよび読み取りＦＩＦＯのためのＭＳＩｘＦＩＦＯＣＳ．ＲＦＦＵＬＬ）、ＦＩＦＯ占有率論理は、オーバーフロー条件を検出し、オーバーフローステータスフラグを設定するであろう（書き込みＦＩＦＯのためのＭＳＩｘＦＩＦＯＣＳ．ＷＦＯＦおよび読み取りＦＩＦＯのためのＭＳＩｘＦＩＦＯＣＳ．ＲＦＯＦ）。データ書き込みは、無視され、ＦＩＦＯ書き込みポインタは、修正されず、ＦＩＦＯのコンテンツを保存するであろうことに留意されたい。
【００７６】
同様に、データ受信機が、ＦＩＦＯ空ステータスビットが設定された後、ＦＩＦＯからデータの読み取りを試みる場合（書き込みＦＩＦＯのためのＭＳＩｘＦＩＦＯＣＳ．ＷＦＥＭＰＴＹおよび読み取りＦＩＦＯのためのＭＳＩｘＦＩＦＯＣＳ．ＲＦＥＭＰＴＹ）、ＦＩＦＯ占有率論理は、アンダーフロー条件を検出し、アンダーフローステータスフラグを設定するであろう（書き込みＦＩＦＯのためのＭＳＩｘＦＩＦＯＣＳ．ＷＦＵＦおよび読み取りＦＩＦＯのためのＭＳＩｘＦＩＦＯＣＳ．ＲＦＵＦ）。ＦＩＦＯ読み取りポインタは、読み取りに先立って調節されず（典型的であろうように）、最近の読み取りＦＩＦＯアドレスの再読み取りをもたらすであろうことに留意されたい。
【００７７】
マスタおよびスレーブプロセッサは、互いに直接割り込み得る。マスタは、ＭＳＩｘ−ＣＯＮ．ＭＴＳＩＲＱ制御ビットをアサートすることによって、割り込み要求をスレーブに発行し得る。同様に、スレーブは、ＭＳＩｘＣＯＮ．ＳＴＭＩＲＱ制御ビットをアサートすることによって、割り込み要求をマスタに発行し得る。
【００７８】
割り込みは、割り込み肯定応答制御ビットの使用を通して肯定応答されている（マスタからスレーブ割り込み要求のためのＭＳＩｘＣＯＮ．ＭＴＳＩＡＣＫおよびスレーブからマスタ割り込み要求のためのＭＳＩｘＣＯＮ．ＳＴＭＩＡＣＫ）。
【００７９】
全てのマスタ／スレーブ割り込み制御／ステータスビットは、いずれのプロセッサによっても読み取り可能である。割り込み要求ビットは、要求側プロセッサによって読み取られ／書き込まれ、および割り込み肯定応答ビットは、ＭＳＩｘＣＯＮ制御レジスタを通して割り込まれたプロセッサによって読み取られる／書き込まれる。割り込み要求ビットは、割り込まれたプロセッサによってのみ読み取られ、割り込み肯定応答ビットは、ＭＳＩｘＳＴＡＴステータスレジスタを通して要求側プロセッサによってのみ読み取られる。
【００８０】
ある実施形態によると、マスタがＭＳＩｘＣＯＮ．ＭＴＳＩＲＱビットをアサートするとき、それは、スレーブクロックと同期させられ、スレーブ割り込みとなる。スレーブの観点から、ＭＴＳＩＲＱビットは、ＭＳＩｘ−ＳＴＡＴ．ＭＴＳＩＲＱにおける読み取り専用ステータスビットである。スレーブは、割り込みをサービスするとき、ＭＳＩｘＣＯＮ．ＭＴＳＩＡＣＫビットをハンドラ内のあるポイントに設定することによって割り込みを肯定応答しなければならない。マスタクロックドメインへの同期後、マスタは、ＭＳＩｘＳＴＡＴ．ＭＴＳＩＡＣＫ＝１を観察し、次いで、（その観点から）ＭＳＩｘＣＯＮ．ＭＴＳＩＲＱビットをクリアし、要求を無効にするであろう。ハンドシェイクは、ＭＳＩｘＳＴＡＴ．ＭＴＳＩＲＱ＝０を観察すると、スレーブによって完了される。その時点で、スレーブは、ＭＳＩｘＣＯＮ．ＭＴＳＩＡＣＫをクリアし、肯定応答を無効にし、割り込みハンドラは、次いで、終了し得る。
【００８１】
スレーブがＭＳＩｘＣＯＮ．ＳＴＭＩＲＱビットをアサートすると、それは、マスタクロックと同期させられ、マスタ割り込みとなる。マスタの観点から、ＳＴＭＩＲＱビットは、ＭＳＩｘＳＴＡＴ．ＭＴＳＩＲＱにおける読み取り専用ビットである。マスタは、割り込みのサービスが完了すると、ＭＳＩｘＣＯＮ．ＳＴＭＩＡＣＫビットをハンドラの終了時に設定することによって割り込みを肯定応答しなければならない。スレーブクロックドメインへの同期後、スレーブは、ＭＳＩｘＳＴＡＴ．ＳＴＭＩＡＣＫ＝１を観察し、次いで、（その観点から）ＭＳＩｘＣＯＮ．ＳＴＭＩＲＱビットをクリアし、要求を無効にするであろう。ハンドシェイクは、ＭＳＩｘＳＴＡＴ．ＳＴＭＩＲＱ＝０を観察するとマスタによって完了される。その時点で、マスタは、ＭＳＩｘＣＯＮ．ＳＴＭＩＡＣＫをクリアし、肯定応答を無効にし、割り込みハンドラは、次いで、終了し得る。
【００８２】
図９は、上記に説明されるようなメールボックスシステムと図１および２の通信インターフェース１３０内のＦＩＦＯシステムの組み合わせを示す。前述のように、ある実施形態によると、ＦＩＦＯは、デフォルトによってディスエーブルにされ得、メールボックスのみ、アクティブであり得、ユーザは、例えば、ビットを関連付けられた制御レジスタ内に設定することによって、ＦＩＦＯをイネーブルにするようにデバイスをプログラムし得る。
【図１】
2018519587.tif 000003
【図２】
2018519587.tif 000004
【図３】
2018519587.tif 000005
【図４】
2018519587.tif 000006
【図５】
2018519587.tif 000007
【図６】
2018519587.tif 000008
【図７】
2018519587.tif 000009
【図８】
2018519587.tif 000010
【図９】
2018519587.tif 000011
【国際調査報告】
2018519587.tif 000012
2018519587.tif 000013