はじめに PLD、みなさん使ってますか? 今回は実際に何かを作るのでは無く、RTLでの非同期設計について触れてみようと思います。 非同期設計はマルチクロックドメイン設計と言われることもあります。 非同期設計は、一見なにも問題無くシミュレーション上では動いてしまい、また、RTLをソフトウェアの延長線上で考えて設計すると失敗しやすいところです。 ですが、意外と設計技術についてあまり踏み込んだ解説をしているところは少ないと思います(少なくとも日本語では)。 おおよそ一般的に説明される内容としては、 非同期はやめとけ どうしても非同期設計をする場合は、シフトレジスタでメタステーブルを吸収しろ というものがおおいですが、実際にどのような設計にしたらよいのかがわかりにくいかと思います。 というわけで、具体的に例を挙げて説明していきます。 ※という内容なので、ある程度RTLを書ける人を前提とした内容です