ほえ

ほえ!!

ディジタル回路:有限状態マシン / 順序回路のタイミング

有限状態マシン

構成は

・次状態を示す(計算する)回路

・出力を示す(計算する)回路

・状態を保持する回路(レジスタ:共通のCLKを持つD-FFを複数組み合わせたやつ を用いる) Nビットのレジスタは2N個の状態を保持できる。

の3つ。Moore型Mealy型があり、Moore型は(現在の状態)→出力, (現在の状態, 入力)→次の状態。対してMealy型では(現在の状態, 入力)→(出力, 次の状態)である。一般的にMoore型はMealy型よりも多くの状態数を必要とし、またMealy型のほうが状態遷移より先に出力が決定しているため、ワンクロック早く出力が変化する。

順序回路のタイミング

信号の安定性について。

メタステーブル状態

Dフリップフロップでは、CLKの立ち上がり時に入力Dが0か1のステーブル状態であれば動作を明確に定義できる。しかし、CLKの立ち上がりと同時にDが変化していると動作が不明となってしまう。このように値が不明になってしまっている状態をメタステーブル状態と呼ぶ。つまり、Dが取り込まれる際はある一定の時間値が静止している必要があるということ。

タイミング仕様

前述の一定の時間のことを露出時間と呼び、露出時間 = t_setup:セットアップタイム + t_hold:ホールドタイムで定義される。それぞれ、

セットアップタイム t_setup:CLKの立ち上がり、入力Dが変化してはいけない時間

ホールドタイム t_hold:CLKの立ち上がり、入力Dが変化してはいけない時間

この2つは値取り込みの際のタイミング仕様であり、次は値出力のタイミング仕様。

誘起遅延時間 t_ccq:CLKの立ち上がり、出力Qの変化が最速で始まる時間

伝播遅延時間 t_pcq:CLKの立ち上がり、出力Qの変化が確実に終わる時間

つまり、出力Qの変化は最速でt_ccqから始まり、最悪でもt_pcqまでには終わる、ということ。

クロック周期とシステムのタイミング

クロック周期は、繰り返されるCLK信号の立ち上がりエッジと次の立ち上がりエッジの間の時間のこと。時間の逆数を取ってクロック周波数でも表現される。大体はMHz~GHzくらいのオーダー。1GHzでは1秒当たり10億回、クロック周期に直しちゃえば1ns = 10-9 s。

同期式順序回路において、CLKが必要なのはレジスタ。なのでレジスタ間のパスについて考えたい。レジスタ1がCLKの立ち上がりとともに入力D1からQ1を生成し、Q1があるCL(組み合わせ回路)に入って計算が行われ、その結果がレジスタ2の入力D2となる場合を考える。D1 - R1 → Q1 - CL → D2 - R2 → Q2 という感じ。この際、クロック周期がどれくらいであれば、メタステーブル状態が発生せず安定できるかの制約を2つ考えていく。

セットアップタイム制約

レジスタR2のセットアップタイム(CLK立ち上がり前に入力が変化してはいけない時間)を満たすためには、D2がR2のセットアップタイムより前に安定していなければならない。つまり、クロックの立ち上がりエッジ間は少なくとも、

伝搬遅延時間(出力Q1が確実に安定するまでの時間) t_pcq

・その出力を用いたCLの最大処理時間 t_pd

・処理終了時点で安定に至った値が次のエッジまで安定していなければならないセットアップタイム t_setup

の和よりも長い必要がある。つまり、最小クロック周期をTcとすれば、

Tc ≧ t_pcq + t_pd + t_setup

という式が成り立つ。設計においてはTcを大きくしたいものだが、伝搬遅延時間 t_pcqと セットアップタイム t_setup はD-FFの性能による値であって、ここに手を加えることは難しい。そこで、手が加えられる唯一の変数である処理時間 t_pdについて上の式を解いてみれば、

t_pd ≦ Tc - (t_pcq + t_setup)

となる。右辺の (t_pcq + t_setup) を順次オーバーヘッドと呼ぶ。組み合わせ回路の最大処理時間 t_pdが、使いたいはずのクロック時間 Tcをすべて使えずオーバーヘッドに制約されてしまうため、この制約をセットアップタイム制約と呼ぶ。組み合わせ回路CLの最大遅延時間に関する制約であるため、最大遅延制約とも呼ぶ。

ホールドタイム制約

逆に、組み合わせ回路の処理時間が最速の場合を考えたい。R2の入力であるD2は、R1の出力Q1がCLに到達し、その処理が終われば変化する。しかし、このD2の変化は、Q1を発生させたCLKの立ち上がりエッジ後、ホールドタイム t_holdの間に起きてはいけない。最速でD2の変化が起きるまでの時間は、

・CLKの立ち上がり、出力Qの変化が最速で始まる時間である誘起遅延時間 t_ccq

・CLが出力Q1を用いてD2を計算し終えるまでにかかる最速の時間である、CLの最小遅延時間 t_cd

の和で表される。この和がホールドタイムよりも短いと、値が変化してはいけないタイミングでD2の変化が起きてしまうことになるので、必要条件として次の式が導かれる。

t_hold ≦ t_ccq + t_cd

前と同様に設計者が変化させられる値を考えると、t_hold と t_ccq はD-FFの性能によるものなので手を加えられない。そうなれば、t_cd について解いて、

t_cd ≧ t_hold - t_ccq

という式が得られる。これをホールドタイム制約と呼ぶ。組み合わせ回路CLの最小遅延時間に関する制約であるため、最小遅延制約とも呼ぶ。

クロック・スキュー

クロックスキュー。クロックス・キューではなくてクロック・スキューらしい。英語でClock Skew、skewは歪みとか斜めとか非対称とか。

ここまでの例では、レジスタR1とR2のCLKは完全に共通のものとして考えてきた。しかし、実際はそう上手く行かず、CLKが各レジスタに到達する時間はずれる。このずれのことをクロック・スキューと呼ぶ。

クロック・スキューが一番悪さをする場合を考えてみる。ここではR1、R2へのCLKをそれぞれCLK1、CLK2とする。2つの制約についてそれぞれ考えてみよう。

クロック・スキューのある場合のセットアップタイム制約

CLK2がCLK1より早く到達している場合、R2の≦セットアップタイムが時間軸で考えると手前に移動してくるため、セットアップタイム制約に反する可能性が出てくる。これを回避する設計にしたい。

CLK2がCLK1より t_skew だけ早く到達しているとする。この場合、クロック周期をTcとすれば、Tc - t_skew の間に t_pcq + t_pd + t_setup が入っていればよい。よって、

Tc ≧ t_pcq + t_pd + t_setup + t_skew

t_pd ≦ Tc - (t_pcq + t_setup + t_skew)

という式が成り立つ。符号が分からなくなったら、制約が厳しくなる方が正しいと考えればよさそう。これは遅延の最大値に対する制約なので、最大値が小さくなってる方が厳しい。

クロック・スキューのある場合のホールドタイム制約

今度はCLK2がCLK1より遅く到達している場合が悪さをする。これは、Q1を発生するR1のホールドタイムの終わりよりも、Q1から計算された入力D2を受け取るR2のホールドタイムの終わりの方が遅くなってしまうため、その分遅くないとR2のホールドタイム制約に違反してしまうためである。つまり、t_hold に t_skew を加えた時間よりも後にD2が変化してほしいという感じ。これをもとに同様に t_skew を用いて式を書き換えると、

t_hold + t_skew≦ t_ccq + t_cd

t_cd ≧ t_hold - t_ccq + t_skew

となる。こっちは遅延の最小値に対する制約なので、最小値が大きくなってる方が厳しい。

それぞれ、ワーストのケースを考えて対策をするということを念頭に置く。

参考書:ディジタル回路設計とコンピュータアーキテクチャ 第2版