非同期(自己同期)回路。 イベントのグラフ上での論理関数の直接計算。 パート2

思い出してください、 最初の部分では、並列性、選択、3つのポイント(状態)での複数の信号のない循環動作の単純な含意(接続詞)の計算について話していました。







タスクは、含意者がポイント2をカバーする(つまり、この状態で1に等しい)ことであり、ポイント1および3で示される制限を超えないことでした...この場合、含意者の左境界の位置(ポイント2の左側)は無関心です 右の境界線(ポイント2の右側)を最大限右に移動する必要があります。 インプラントの計算が不可能であることは、CSCの競合が存在することを意味します。 つまり、各信号が偶数回切り替わるイベントの連続的なシーケンスがあります(全体としての動作のすべてではありません)。



次に、信号xの最小論理関数(DNF)の計算に進みます。







信号xの関数を構築するということは、信号xの関数が1であるすべての状態を含意物でカバーすることを意味します。この例では、これはイベントa-の直後に始まり、イベントb-の直前に終わる状態のシーケンスです。 含意者は色付きの弧で示されます。 さらに、信号関数xが0の状態をカバーする単一のインプリカントはありません。インプリカントとは、1の状態のセットを意味することを思い出してください。この例では、非反転関数(AND-OR)を取得します。 「-」イベントから「+」イベントへのスペースを(プロセス展開の方向で)暗黙の要素とオーバーラップさせると、反転関数(AND-OR-NOT)が得られます。 もう一つの重要なポイント。 論理関数は自己同期回路の要素に対して計算されるため、隣接するインプリカントは交差する必要があります。つまり、少なくとも1つの共通状態が必要です。



最小関数を計算するアルゴリズムは次のとおりです。 計算された暗黙の場所をポイント1として指定する場合、a-eventの右側にあるポイントを常に使用します(図中)。 そして、ポイント3として、b-イベントの左側にあるポイントを常に使用します(図中)。 インプリカントは、イベントx +からイベントx-の方向に順番に計算されます。 最初に赤、次に青、次に緑など(写真)。 これは、使用される単純な暗黙の計算アルゴリズムによるものです。



ステップ1.ポイント2として、x +イベントの左側にあるポイントを選択します(図中)。

ステップ2.与えられた3つのポイントの含意を計算します。 結果のインプリカントは、関数の最終レコードに含まれます。

発言。 いくつかの代替の暗黙的要素が取得された場合は、各オプションを考慮して、いずれかの代替の暗黙的要素の機能を最終レコードに含める必要があります。 したがって、各オプションについて、計算を個別に続行する必要があります。

ステップ3.計算されたばかりの暗黙の右境界線を考慮します。 図では、これはc +イベントです(最初に計算されたインプリカントの場合)。 暗黙の右側の境界がx-イベントの直接の原因である場合、これは関数の計算が完了したことを意味し、アルゴリズムを終了します。

ステップ4.ポイント2として、最後に計算されたimplicantの右境界の左側にあるポイントを選択します。 ステップ2に進みます。



このアルゴリズムは、最小関数の形式が定義されていないことを前提としています。 ただし、現在検討中のモデルでは、信号の最小関数は次のように記述できます。



1)





x=ab...c+xf+g+h+...+i









ab...c 1つ以上の変数で構成される暗黙的です。 g+h+...+i -これは、1つの変数で構成される暗黙の空のセットです。 xf 2つの変数のインプラントであり、最小限の形で存在する必要はありません。 xを除くすべての変数は、対応するイベントの符号の配置に応じて、直接形式と逆形式の両方で式に含めることができます。 すべての変数は、引数として厳密に一度だけ式に含まれます。



実際、最初に計算された暗黙の可能性のある場所を考慮します。 そのようなオプションが2つあります。 まず、インプラントの右境界がx-イベントの原因である場合:







この場合、インプリカントは関数xが1であるすべての状態をカバーします。関数は次のようになります。x = a * b * c。 以下では、その境界のみを使用してインプラントを指定します。 この例では、これらはa +とc-(それぞれ左右の境界線)です。 すべてのイベントサイン(信号xの切り替えを除く)は本質的に条件付きであり、逆に置き換えることができます。 同じ名前のイベントを区別することのみを目的としています。



インプラントの位置の2番目のバリアント-インプラントの右の境界は、x-イベントの直接的な原因ではありません。







この場合、「-」スイッチングがx-イベントの直接の原因である信号fは、3つの異なる方法で配置できます。



f +イベントの場所の最初のバリアントは、x-イベントとa +イベントの間にあります(プロセスのデプロイ中)。







この場合、2番目のインプリカントを1つの変数で構成することはできません。 ただし、暗黙のf * xは、関数xが1に等しい残りのすべてのカバーされていない状態をカバーします。このイベントf +の配置は、式x = a * b * c + f * xに対応します。



f +イベントの場所の2番目のバリアントは、x +イベントとc-イベントの間にあります。







この場合、2番目と最後のインプリカントは1つの変数fで構成され、これは式x = a * b * c + fに対応します。



f +イベントの場所の3番目のバリアントは、cイベントとfイベントの間にあります。







この場合、前のものと同様に、暗黙関数fは最小関数に含まれていなければなりません。 この場合にのみ、このインプラントは機能の構築を完了するのに十分ではありません。 イベントf +とf-の間にある特定のイベントg-を考えます。 そのようなイベントは必然的でなければならず、そうでなければCSCの競合を意味します。







イベントg + 4の場所オプション。 g +イベントの配置の最初のバリエーションは、x +イベントとc-イベントの間にあります。







この場合、インプラントgは、x = a * b * c + f + gのような最小関数の構築を完了するのに十分です。



x +イベントとc-イベントの間にg +イベントがない場合、x +イベントとa +イベントの間のg +イベントの場所の2番目のバリエーションを検討してください。







この場合、1つの変数で構成される3番目のインプラントはありません。そうでない場合、g +イベントの配置の最初のバリアントになります。 しかし、g * xインプラントは最小関数の計算を完了するのに十分です。 式は次のようになります。x= a * b * c + f + g * x。



3番目のオプション。 信号gの場合、イベントg +はイベントf +とf-の間にあります。 これは、CSCの競合を意味します。







4番目のオプションは残ります。 g +イベントは、c-イベントとf +イベントの間にあります。







g +イベントの最初または2番目のロケーションオプションを満たすシグナルgは存在しないため、1つの変数gで構成されるインプリカントは、必ず最小形式に入る必要があります。



次に、切り替えがイベントg +とf +の間にある信号hを考えます。







そして、g +イベントの場合と同じ方法でh +イベントの場所を検討します。 最終的に、CSCの競合を検出するか、式1)を取得します。



この式は何を与えますか? 最初のもの。 式からの信号f、g、h、iはインターセプトのチェーンを形成し、本質的に暗黙的です。 したがって、最小関数の計算は2つの含意を見つけることになります。 検索の条件の設定のみが、上記で述べたものとは多少異なります。 制限における計算アルゴリズムの複雑さは、信号の数に対して2次です。 しかし、二次成分の重みは無視できます。 したがって、線形の複雑さについて話すことができます。 それに加えて、アルゴリズムは実際にメモリを必要としません。



第二の瞬間。 このような最小関数の記録により、自己同期に違反することなく、任意の小さな要素に分解することができます。 関数x = a * b + f + g + h * xを考えます。 彼女の行動は次のようになります。







このような関数は完全には分解できません。 この欠陥は、信号yを追加することで修正されます。







関数は次のようになります:x =(f + g + h)* y、y = a * b + x。 自己同期を維持するために、シグナル関数の引数を置き換えることが残っています。切り替えの理由はイベントx-でした。xはyに変更されます。



関数x = a * b * c + f + gを考えます。 彼女の行動:







このような関数の場合、自己同期性を失うことなく、最初のインプリカントを個別の要素として常に選択することができます:y = a * b * c、x = y + g + f。 新しい要素の動作は次のようになります。







今後は、並列処理を使用する必要がありました。 これについては後で詳しく説明します。 x = a * b * c * dの形式の関数を考慮することは残ります。 彼女の行動:







このような関数では、最初の変数(a、b、cなど)を、自己同期性を失うことなく、常に個別の要素として区別できます。y= a * b * c、x = y * d。 新しい要素の動作:







これらの3つの変換を使用して、ロジック要素を必要なレベルに分割できます。



疑問が残ります。これはどれだけ実用的な価値があるのでしょうか? 結局のところ、非常に限られたモデルが検討されています。 将来的には、線形複雑度変換(新しい信号の追加)を使用する任意の動作について、任意の信号の論理関数の計算を2つの含意の検索に減らすことができることを示します。 そして、結果の関数は必要なレベルに分割できます。 継続する。



All Articles