2011年4月アーカイブ

東北地方太平洋沖地震から6週間が経ちました。
福島に居る姉と久々に話をしました(^^)
話の内容は、甥っ子(姉の長男)が仙台の大学生で3年になりキャンパスが変わって引っ越しをしたのでインターネットが使える環境の構築の話でした。
母はたくましいなぁと思った次第です(^^;

実は私も引っ越しをしました。ベランダからは富士山が見えます。
富士山が見える家は、生まれて初めてで晴れた日に富士山が見えると元気になりますね。 

20110425_1_nagasawa.jpg

 

ここのところずっと作業効率とか品質についての話をして来ましたが、技術の話に少し戻りたいと思います。
以前も非同期については書きましたが、どうも(自社だけでなく)周りで非同期は難しいと言う話を聞くので、自分でも何度も考えなくて良いようにまとめておきたいと思いましたので、ブログに整理して書いていきたいと思います。

まず、非同期の定義ですが図のようにあるクロックで叩かれた信号を別のクロックで叩く場合にその信号の非同期の乗り換えがあると表現します。

20110425_2_nagasawa.PNG

 

 

 

 

 

 

非同期の乗り換え方法について説明します。
1本の信号で他の信号とタイミング依存がないのであればmeta-stableを取れば良いだけなので、下図のようにFFを2段で打ち直します。
この時、絶対に赤線に論理を入れてはダメです。


 

20110425_3_nagasawa.PNG

 

 

 

 

 

 

 

複数の信号は、どのように乗せ換えるかですが、
カウンタとランダムデータで違うと思っています。
カウンタでよく知られているのは、Gray-Codeでの乗り換えですね。
値が1ずつインクリメントされる代わりに、1ビットだけが変化します。
詳しくは、ネットで調べて下さい(^^;

 

 

20110425_4_nagasawa.PNGランダムデータなら、前値と同じだったら更新する方法ですかね。
2回連続で変化したら出力も変化させる方法です。


 

20110425_5_nagasawa.PNG

 

 

 

 

 

 

 

これは、毎サイクル変化するような回路には対応出来ません。
その時にはFIFOになると思います。
お分かりかと思いますが、その時に利用するのがGray-Codeですね。
ライトポインタとリードポインタはそれぞれカウンタで構成していますからライトカウンタをGray-Code変換してリードクロックで2段叩いて逆Gray-Code(Binary)変換してリードカウンタと比較してEmptyをチェックします。
また、リードカウンタをGray-Code変換してライトクロックで2回叩き逆Gray-Code(Binary)変換してFullをチェックします。
EmptyやFullをチェックする時の注意点として大事なのは、ライトとリードの周波数です。
遅い方は、早い方が連続して変化(ライトまたはリード)すると取り込めない可能性があるので、例えば、2倍の速度であり場合によっては、カウンタ値を+1したものと+2したものを準備して全部で3つの値を比較するようにすれば、取りこぼしがなく設計できます。

非同期は、設計初期の段階でちゃんと設計しないと論理SIMでは一生エラーが出ない可能性があります。みなさんも気を付けましょう!

以上です。