FPGAデザインはほとんど(または完全に)非同期にできますか?


39

大学でFPGA / Verilogコースが非常に短く(5年前)、常にどこでもクロックを使用していました。

私は趣味として再びFPGAを使い始めており、それらのクロックについて疑問に思わざるを得ません。それらは絶対に必要ですか、それともFPGAベースの設計は完全に非同期にできますか?複雑なロジックの束を構築し、できる限り速くそれを波及させることができますか?

信号が回路のすべての部分を伝搬し、出力が安定したことを知るなど、これには多くの落とし穴があることを認識しています。それはポイントの横にあります。完全に非同期の設計を実際に構築したいのではなく、機能の理解を深めるためだけです。

私の目には、絶対にクロックを必要とする構造はであるように見えます。reg私の理解では、典型的なFPGA(Cyclone IIなど)のフリップフロップは特定のクロック信号にあらかじめ配線されています。これは正しいです?このような他の暗黙的なクロックはありますか?通常、デザインによって手動で駆動できますか?


3
ケンブリッジ大学のサイモンムーアは、テストチップの製造など、非同期設計に関する多くの研究を行ったことを知っています。まったく新しい設計ツールのセットが必要であり、奇妙な副作用があります。たとえば、実行速度は温度に反比例します。
pjc50

回答:


27

簡単な答えは次のとおりです。はい。より長い答えは、あなたの時間の価値はありません。

FPGA自体は完全に非同期設計で問題なく実行できます。FPGAを介したタイミングはあまり予測できないため、結果は問題です。大きな問題は、タイミングと結果のデザインが、配置および配線セッションごとにほぼ確実に異なるという事実です。個々の非同期パスに制約を設定して、時間がかかりすぎないようにすることができますが、最小遅延を指定できるかどうかはわかりません。

最終的に、設計は予測不可能であり、わずかな設計変更でも完全に可変である可能性があります。動作を確認するために、何かを変更するたびにタイミングレポート全体を確認する必要があります。一方、デザインが同期している場合は、配置配線の最後でパスまたはフェイルを探すだけです(制約が適切に設定されていると仮定すると、時間がかかりません)。

実際には、人々は完全に同期した設計を目指していますが、単純に信号をバッファリングまたは反転する必要がある場合は、適切に制約する限りフリップフロップを通過する必要はありません。

これで少し解消されることを願っています。


3
非同期FPGAデザインでいくつかのデバイスを使用する必要がありました。彼らは一緒に働くのが大変でした。少なくともタイミング制約を使用してください
ティムウィリスクロフト

1
FPGAで非同期設計を実装することは可能ですが、ほとんどのFPGAは特に同期設計をサポートするように構築されています。非同期設計では無駄になるリソース(PLL、クロック分配回路、および大量のフリップフロップ)があります。
ドミトリーグリゴリエフ

2
この答えは特に良いアドバイスを提供しません。クロックレスFPGAを作成すると、実際に配置配線が簡素化され、タイミング要件に関する多くの問題が解消されます。また、細かなパイプライン処理により、かなり高いスループットを実現できます。クロック回路をクロックレスFPGAにマップしようとすると、タイミング特性が大きく異なるため、実際の問題が発生します。実行できますが、変換を行うにはもう少しフロントエンド処理が必要です。 vlsi.cornell.edu/~rajit/ps/rc_overview.pdf
ネッドビンガム

20

「複雑なロジックの束を構築し、できるだけ早くそれを波及させることができますか?」はい。完全に非同期のCPU全体が構築されました。少なくとも1つは世界最速のCPUでした。 http://en.wikipedia.org/wiki/Asynchronous_circuit#Asynchronous_CPU

(ここで他の人が言ったように)非同期設計が利用可能なツールで十分にサポートされていないという理由だけで、理論的には同期設計技術よりもいくつかの利点があるにもかかわらず、非同期設計技術を拒否する人がいるのは気に障ります。

私にとって、それはすべての橋を木で作ることを推奨しているようなものです。なぜなら、鉄工ツールよりも木工ツールを持っている人が多いからです。

幸いなことに、非同期設計の利点のいくつかは、グローバル非同期ローカル同期(GALS)設計を使用することにより、主に同期設計手法を使用しながら得られます。


移行のメリットはそれほど重要ではありませんが、正方形のグリッドにPCB配線する現代の傾向についてはまったく同じように感じます。
ローマンスターコフ

@romkyns-それは、非直線グリッドを使用するPCBソフトウェアの作成が難しいという事実にあります。
コナーウルフ

1
@supercat:4相ロジックをほのめかしていると思います。忘れられていると思われる多相クロック信号の1つです。
davidcary

1
@davidcary:1つのワイヤの両方の「フェーズ」を除く並べ替え。1つのフェーズは立ち上がりエッジによって制御され、1つのフェーズは立ち下がりエッジによって制御されます。基本的に、ラッチクロックを4つのカテゴリに分類します。クリーンライズ、クリーンフォール、レイトライズ、レイトフォールです。クリーンな立ち上がりエッジまたは立ち下がりエッジによって(L / CB)クロックされるラッチは、立ち上がりエッジまたは立ち下がりエッジからデータを取得できます。L / CBの遅い立ち上がりエッジは、L / CBクリーンな立ち上がりエッジから任意の立ち下がりエッジのデータを取得できます。遅い立ち下がりエッジによるL / CBは、L / CBからのデータの完全な立ち下がりまたは立ち上がりを取得できます。
supercat

1
@davidcary:ラッチの最速の伝搬時間が最長のホールド時間を超え、クロックエッジから、クロックゲーティングロジックおよびそのエッジによってトリガーされる「遅延」ラッチを介して、次のエッジは、クロックエッジ間の最小時間を超えないため、このようなデザインは完全に信頼性が高く、伝搬遅延の任意の組み合わせで内部的に生成された準安定性がないはずです。
-supercat

5

まだ言及されていない要因の1つは、準安定性です。ラッチング回路が入力/遷移のシーケンスでヒットし、結果の状態が伝播遅延または他の予測不能な要因に依存する場合、結果の状態がクリーンな「ハイ」または「ロー」になる保証はありません。たとえば、現在「ロー」を出力しており、クロックエッジの到着とほぼ同時に入力がローからハイに変化するエッジトリガーフリップフロップを考えてみましょう。入力が変化する前にクロックエッジが十分に長く発生すると、出力は次のクロックエッジまで単純にローになります。入力が変更された後、クロックエッジが十分に長く発生すると、出力は1回ローからハイにすばやく切り替わり、次のクロックエッジまでそこに留まります。これらの条件のいずれも当てはまらない場合、。低いままであるか、すぐに1回切り替えて高いままになりますが、しばらくは低いままで、次に切り替えるか、切り替えてからしばらくしてから元に戻すか、数回前後に切り替えます。

デザインが完全に同期しており、すべての入力が二重に同期されている場合、タイミングパルスがシンクロナイザーの最初のラッチにヒットして、2番目のタイミングを混乱させるのに最適なタイミングで切り替わることはほとんどありませんラッチ。一般に、そのようなことを「まったく起こらない」と考えるのは安全です。ただし、非同期設計では、多くの場合、そのようなことを推論するのははるかに困難です。ラッチ回路のタイミング制約(フリップフロップだけでなく、ラッチとして機能するロジックの組み合わせ)に違反した場合、次にラッチを強制する有効な入力条件が存在するまで出力が何をするかがわかりません既知の状態に。出力が遅れると、ダウンストリーム入力のタイミング制約が破られ、予期しない状況が発生する可能性があります。

非同期回路をモデル化する最も安全な方法は、ほとんどすべての出力回路が「0」と「1」を切り替えるたびに少しの間「X」出力を生成することです。残念ながら、このアプローチでは、実際にはほぼ確実に安定した動作が得られる場合でも、ほとんどすべてのノードで「X」が表示されることがよくあります。入力が変更された直後にすべての出力が「X」になり、入力が安定するまで「X」のままであるようにシミュレートすると、システムが動作できる場合、回路は動作しますが、そのような制約の下で非同期回路を動作させる良い兆候ですしばしば難しいです。


4

もちろん、設計要件が十分に遅く、多くの内部遅延が気になる時間よりも桁違いに長い場合、それは問題ではなく、タイミングレポートを見てこれを監視できますが、内部状態情報なしで便利にできることには制限があります。100入力マルチプレクサーのようなものを作りたい場合は、各入力の伝搬遅延が異なることに注意してください。実際、多数の予測不可能な遅延振動フィードバックループを使用して、興味深いカオス効果を得ることができます。多分、完全に非同期のFPGAベースのシンセサイザーが次の「アナログ」になるかもしれません。


4

はい、できます。フリップフロップを完全に無視して、すべてLUTから構築できます。また、ほとんどのザイリンクスFPGAの状態要素を(エッジトリガー)フリップフロップの代わりに(レベルトリガー)ラッチとして使用できます。


3
それに伴う危険は、ロジックコンパイラを制限しない限り、一部のゲートで伝搬時間が負のロジックを生成する可能性があることです。たとえば、とを指定X=(someComplexFormula)Y=X & D、コンパイラがその式をXに置き換えてにX & D等しいと判断した場合、コンパイラはX A & DではなくAとDの点で計算Yを置き換え、Yの計算を許可しますこのような置換は、組み合わせロジックでは有効ですが、非同期シーケンシャルロジックに大混乱をもたらします。
スーパーキャット

@supercat-ザイリンクスのツールを使用したことはありませんが、アルテラFPGAを使用した場合、クリティカルパスをRTLではなく接続されたゲートモジュールとして指定するオプションが常にありました。無効。
ジュール

@Jules:プログラマブルロジックデザインはすべてAbelを使用していますが、これはやや間抜けな言語ですが、一部のCPLDが実装できる方法で物事を指定することを可能にしますが、VHDLまたはVerilog合成ツールに問題を引き起こす可能性があります。たとえば、私のプロジェクトの1つで、ザイリンクスパーツにクロック、非同期セット、非同期リセットがあるという事実を利用して、非同期ロード可能なシフトレジスタを実装しました。VerilogやVHDLを使用したことがないFPGAでこのようなことを行う必要がある場合、それを行うために必要なことをどのように知る必要がありますか?ところで、メモリが機能する場合、シフターにTフロップを使用し、
...-supercat

...タイミングは、非同期入力がT入力が低いときにのみ発生するようなものでした。書き込みパルスの開始近くでnop-clockが発生した場合、非同期書き込みはそれをはるかに超えて拡張されると仮定しました安定した値を確保し、nop-clockが終わり近くで発生した場合、それは単に安定した値をラッチしているだけです。このようなケースをVHDLまたはVerilogで効率的に処理する方法がわかりません。
-supercat

@supercat-Cyclone IVデバイスハンドブックを見ると同様の問題が発生しています。同じ問題に対する最善のアプローチは、「LABワイド同期ロード」オプションを使用することです(「LAB」は16個のロジックエレメントのグループです) 、したがって、そのようなレジスタのサイズが16ビットの倍数にならない場合、いくつかのビットが無駄になりますが、これはとにかく最も有用なオプションのようです)。私は今、2つのオプションがあります。私は...私は厳密なタイミングを持っている場合、(通常は最良の選択肢になります)に必要なレジスタを実装する方法を選択する合成ツールを必要とし、かなりの機能のverilogを書くことができます
ジュール・

3

@Andreyが指摘したように、時間をかける価値はありません。具体的には、ツールはこれを行いませんので、完全にあなた自身でいるでしょう。さらに、レジスタが組み込まれているため、使用しないことで何も保存されません。


3

本当に3種類のデザインがあります。

  1. コンビナトリアル。クロックやフィードバックパスはなく、システムには「メモリ」がありません。1つ以上の入力が変更されると、その変更はロジック全体に波及します。しばらくすると、出力は新しい状態に落ち着き、入力が再び変化するまでそのままになります。
  2. 同期シーケンシャル。システムはレジスタと組み合わせロジックのブロックで構築され、レジスタは少数(多くの場合1)のクロックでクロックされます。複数のクロックがある場合、1つのクロックドメインから別のクロックドメインに渡される信号に特別な注意が必要になる場合があります。
  3. 非同期シーケンシャル。フィードバックパス、ラッチ、レジスタ、または過去のイベントの設計メモリを提供し、簡単に分析されたクロックラインによってクロックされない他の要素があります。

一般に、コンビナトリアルロジックを合成/最適化する場合、ツールは重要なのは最終結果が何であるか、およびその結果に落ち着くまでに必要な最大時間だけであると想定します。

純粋にコンビナトリアルなデザインを構築でき、正しい結果が得られます。出力は任意の順序で変更される場合があり、最終値に達する前に数回変更される場合があります。このような設計は、ロジックリソースを非常に無駄にします。ほとんどのロジック要素はほとんどの時間をアイドル状態で過ごしますが、シーケンシャルシステムではこれらの要素を再利用して複数のデータアイテムを処理できます。

順次同期システムで重要なことは、組み合わせブロックの出力が次のフリップフロップにクロックされるときに正しい状態に落ち着いたことです。どの順序で変化するか、または途中でグリッチであるかどうかは関係ありません。繰り返しますが、クロックが十分に遅い場合、ツールはこれを簡単にロジックに変えて、正しい答えを提供します(使用したいクロックが十分に遅いかどうかを通知できます)。

非同期シーケンシャルシステムでは、これらの仮定はウィンドウの外に出ます。グリッチは重要であり、出力変更の順序は重要です。ツールとFPGA自体は、同期設計用に設計されています。標準のFPGAまたは特定の設計のシステムのいずれかに非同期システムを実装する可能性について多くの議論があります(詳細については、Google非同期FPGA設計)。


2

はい。プロセス型の構成体がない場合は、レジスタの推論などを行うべきではありません。クロックを必要とするオンボードメモリなどがありますが、本当に必要な場合はおそらく非同期で生成できます。


1
これを単一の答えにするつもりでしたか?
ケビンフェルメール

1

FWIW非同期論理ソリューションの1つの明白な目標は、消費電力のグローバルな削減であると付け加えるべきだと思いました。

これらのグローバルクロック/ PLL /バッファは大量のジュールを燃やします。

FPGAソリューションがバッテリ駆動のアリーナ(ラティスアイススティックなど)に蛇行すると、この側面はさらに注目を集めます。


これは良い点ですが、部分回路の結果が計算されて最終出力が更新されるため、シーケンシャル回路と同じ動作をする設計の悪い組み合わせ回路が場合によっては多くの過渡的な遷移を引き起こす可能性があることを考慮する価値がありますが、 (ほとんどのFPGAがそうであるように)CMOS回路では、消費電力は遷移の数にほぼ比例します。クロックは不必要な遷移を引き起こす可能性がありますが、現在必要のない回路の部分のクロックを無効にすることで、電力を大幅に削減することもできます。
ジュール
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.