2011年4月アーカイブ
東北地方太平洋沖地震から6週間が経ちました。
福島に居る姉と久々に話をしました(^^)
話の内容は、甥っ子(姉の長男)が仙台の大学生で3年になりキャンパスが変わって引っ越しをしたのでインターネットが使える環境の構築の話でした。
母はたくましいなぁと思った次第です(^^;
実は私も引っ越しをしました。ベランダからは富士山が見えます。
富士山が見える家は、生まれて初めてで晴れた日に富士山が見えると元気になりますね。
まず、非同期の定義ですが図のようにあるクロックで叩かれた信号を別のクロックで叩く場合にその信号の非同期の乗り換えがあると表現します。
複数の信号は、どのように乗せ換えるかですが、
カウンタとランダムデータで違うと思っています。
カウンタでよく知られているのは、Gray-Codeでの乗り換えですね。
値が1ずつインクリメントされる代わりに、1ビットだけが変化します。
詳しくは、ネットで調べて下さい(^^;
これは、毎サイクル変化するような回路には対応出来ません。
その時にはFIFOになると思います。
お分かりかと思いますが、その時に利用するのがGray-Codeですね。
ライトポインタとリードポインタはそれぞれカウンタで構成していますからライトカウンタをGray-Code変換してリードクロックで2段叩いて逆Gray-Code(Binary)変換してリードカウンタと比較してEmptyをチェックします。
また、リードカウンタをGray-Code変換してライトクロックで2回叩き逆Gray-Code(Binary)変換してFullをチェックします。
EmptyやFullをチェックする時の注意点として大事なのは、ライトとリードの周波数です。
遅い方は、早い方が連続して変化(ライトまたはリード)すると取り込めない可能性があるので、例えば、2倍の速度であり場合によっては、カウンタ値を+1したものと+2したものを準備して全部で3つの値を比較するようにすれば、取りこぼしがなく設計できます。
非同期は、設計初期の段階でちゃんと設計しないと論理SIMでは一生エラーが出ない可能性があります。みなさんも気を付けましょう!
以上です。
