一、コード設計
1、設計中のFIFO、ステートマシンインタフェースには異常回復状態と状態報告メカニズムが必要であり、グレイコード回路は統合ツールに最適化されることを防止する。
a)独自に設計したグレアコードFIFO(一般的に連続データストリームの時間領域横断用)をSynplifyで統合する場合、最適化を防止するために統合ブート文を追加する必要がある:「synthesis _ syn _ preserve=1」、
b)各種の総合工具には状態機の安全モードがあり、総合的な時に開くことを提案する。
2、回路内のすべてのレジスタ、ステートマシン、カウンタ、FIFOは、単板上で電気的にリセットされる場合、および使用前に既知の状態になければならない。
a)回路中のレジスタ、ステートマシン、カウンタ、FIFOを非同期リセットしなければならない(いかなるクロックのリセットにも依存しない)、
b)回路中の状態機械、カウンタは応用時に非同期リセット時の状態に完全に依存することができず、重要な状態機械或いはカウンタに対して、周期検出或いは同期してそれに対してリセット・セット数機構を行って、信頼できる仕事を保証しなければならない。
3、クロックドメインおよび非同期信号を横断するには、FPGAを用いたデジタル回路設計のための最もコアで基本的な思想と方法であるQuartusIIのDesign Assistantまたは専門のnlint、spyglass[1]などのツールを使用してコードチェックを完了するために、同期化処理が必要です!
a)できるだけ全体の設計の中で1つのマスタクロックだけを使用し、同時に1つのクロックエッジだけを使用し、マスタクロックはグローバルクロックネットワークを歩く、
b)すべての入出力信号はレジスタを通じて預けることを推薦し、レジスタインタフェースは非同期インタフェースとして考慮する。
c)すべての回路が同期回路思想で設計できない場合、すなわち複数のクロックで実現する必要がある場合、すべての回路をいくつかの局所同期回路(できるだけ同じクロックを1つのモジュールとする)に分け、局所同期回路間のインタフェースを非同期インタフェースとして考慮することができる、
d)回路の実際の最高動作周波数は理論の最高動作周波数より大きくてはならず、一定の設計余裕を残し、チップの信頼性のある動作を保証しなければならない。
e)回路中のすべてのレジスタ、状態機械は単板上で電気的にリセットする時に既知の状態にあるべきである、
f)設計中の非同期回路に対して、同期設計に変換できない原因を提供し、その部分の非同期回路の動作信頼性(例えば時計などの信号にバリがあるかどうか、維持時間を確立して要求を満たすかどうかなど)に対して分析判断を行い、そして分析報告を提供する。
g)グローバルクロックの制約について、グローバルの全体的なグローバル化を行うことができ、グローバル化の提案はエリアクロック制約、論理ロック、インクリメンタルコンパイルなどを通じて性能を保証することができない、
h)QuartusIIのDesign Assistantまたは専門のnlint/spyglassツールを使用してクロックドメイン間コード処理部分を検査する。
4、回路にゲートクロックと進行波クロックは現れない。
a)ゲートクロックの使用は主にクロックをオフにすることによって消費電力を低減する目的を達成するが、不適切な使用はクロックにバリを発生させやすく、設計に壊滅的なリスクをもたらす。消費電力の低減が必要であれば、メーカーが持参したクロック制御のIPCORE、例えばALTCLKCTRL、
b)進行波クロックとは、レジスタが出力するデータを次のレジスタのクロックとして使用することを意味する。進行波クロックは非常に危険な設計であり、レジスタにTcoがあるため、クロックのエッジが遅くなり、遅延が大きくなり、多段カスケードの場合は状況がさらに悪くなり、問題が発生するのは必然的です!進行波クロック設計は実際には非同期設計であり、大部分の総合配線ツールは進行波クロック設計に対してsetup/holdタイミング分析検査を行わず、設計は正確性を保証できない。FPGA
設計には進行波クロックを使用する必要は全くなく、レジスタ出力で同期イネーブルを行うことができ、進行波クロックの設計意図と完全に一致している。