VHDLで回路を記述していますが、クロックスキューが心配です。
全部の回路をクロックの立ち上がりエッジで動作させると、FPGA内部のクロックスキューによっては異常動作することがあり得ると思うのですが、どうでしょうか。
より安全にするには、プロセス文内部ではクロックの立ち上がりで入力と演算を行い、立ち下がりで出力と状態遷移をするような記述が必要に思えます。しかし、そのようなことは教科書に書いておらず、ネットを探した範囲では見つかりませんでした。
FPGAにはクロックを低遅延で分配する専用インフラが内蔵されているそうですから、心配する必要は無いのかも知れません。
↑クロックでデータの入力、(組み合わせ回路)演算開始、次の↑クロックで演算結果確定 というのが一般的な回路記述です。(超)高速なI/F回路はこの限りではありませんが。
組み合わせ回路の段数が深くて1クロック時間を超えそうであればFPGAの配置配線後にレポートされます。(そうなるようにパラメータを設定して論理合成に掛けます)
クロックスキューに関しても、演算の回路に鑑みて、あるノード(例えば遠く)のクロックを起点とした遅延と別のノードクロック起点(例えば近く)の遅延とを比べて、複数の入力の待ち合わせを考慮して、レポートを吟味します。
待ち合わせがクロックを跨ぐ場合は、クロックを落とすかスキューに合わせて叩き直してパイプライン処理とするか、演算処理待ち合わせに対応した回路にします。
ASICの設計の場合は、とくにばらつきのベストケースの時に大きな問題になり、クリチカルパスにあえて遅延のバッファーを入れたりしますが、FPGAの場合はクロック分配ネットワークがあらかじめ敷かれていますから、通常は心配ないと思います。
FPGAで遅延のためのバッファーを入れると、論理合成で勝手に消される恐れがあり、そうならないような考慮が必要です。
FPGAでの心配事は、Chukさんが言われるように、クロック間をまたぐような重い組み合わせロジックになったばあい、セットアップ時間条件を満たさなくなります。多くの設計者は、ここを一番心配するところだと思います。
ASICとFPGAでは扱いが違うのですか。幸いASICの設計をすることはありませんが、さぞ頭が痛いでしょうね。
FPGAではどうやらベストケースの心配をする必要は無いようなので、あまり深く考えないことにします。
ありがとうございました。