問題は「D2=Q1,D3=Q2,D4=Q3,D1=(Q2 XOR Q3)のように4ビットのD-FFが接続された巡回シフトレジスタの出力の周期を求めなさい」っての。
源内CADで回路図にしてみると、、、ほら、わかるよね、だから省略w
このページを作っているヒネクレモノは、そう素直な回答をしませんので(^^;
強いてヒントを書けば、
- 4つのFlipFlopのクロック端子には、同じクロック信号を並列接続する。(必須)
- 4つのFlipFlopのリセット端子には、同じリセット信号を並列接続する。(推奨)
- 4つのFlipFlopのセット端子には、各FlipFlopの初期値を決めやすいように、個別のセット信号を接続する。(推奨)
- 「出力の周期」とは、「クロックが何発はいると各FlipFlopの状態がモトに戻るか」ってイミだぁね。
問題の回路でFlipFlopの初期値が4'b0000だと、回路状態は永遠に変化しないから、セット端子はあったほうがイイ。
で、各FlipFlopのセット端子で初期値をチョコチョコ変えながら、シミュレーションしてみるとイイ。
|
でも、論理を解けるのは、何も論理回路シミュレータダケじゃないよ。
クロックの周期数を求めるのは、実は表計算ソフト:エクセルの方が楽だったりするw
まず、エクセルを開いて、下記のとおり入力します。
この表で、B列は周期番号、C列〜F列はFlipFlop-Q1〜Q4の出力状態、G列はD1の値、つまりQ2 XOR Q3の値を示します。
1行目は、各列が何を示しているかが、見たとおりの文字列で入っています。
2行目のB2セルには、周期番号の初期値(ゼロ)が入っています。
2行目のC2セル〜F2セルは、この巡回シフトレジスタの初期値(Q1〜Q4の初期値)です。(この図では4'b1000)が入っています。
2行目のG2セルには、D1の値を計算するために「=IF(D2=E2,0,1)」っていう式が入っています。
3行目のB3セルには、周期数を1増やすために「=B2+1」っていう式が入っています。
3行目のC3セルには、2行目の状態からクロックが1発入った時の状態になるよう、「=G2」っていう式が入っています。
3行目のD3セル〜F3セルには、同じ理屈で「=C2」、「=D2」、「=E2」っていう式が入っています。
3行目のG3セルには、G2セルのコピーで「=IF(D3=E3,0,1)」っていう式が入っています。
あー色は見やすいように付いてるダケなので、わざわざ付けなくてもOKです(^^;
この状態で、3行目を丸ごと4行目以降にめいっぱいコピーすると、下図のようになります。
これで、エクセルの各行は、B列に書いてる数だけクロックが入った時の、各FlipFlopの状態が計算されています。
この図をジト〜っっと眺めて見ると、
4行目の「クロック2発目の状態」と、11行目の「クロック9発目の状態」とが同じであることが判ります。
もっとジト〜っと眺めると、
4行目以降、7行周期で同じパターンを繰り返しているコトが判ります。
つまりこの巡回シフトレジスタの周期は、7クロック周期と判ります。
|
ま、同じ結果が得られるなら、手段は何だって良いのです(^^;
理屈さえ判っていれば、回路書いてシミュレーションするより、HDL書いて合成してシミュレーションするより、
お手軽エクセルの方が早かったりします(^^;
一つの手法として覚えておくと、モシカシタラ役にたつかもです(^^;
あーちなみに、巡回シフトレジスタなんて何の役にたつんだぁと思う人は、「CRC」ってキーワードを検索してくださいませ。
CRCって、潤滑スプレーじゃぁなくって、、サイクリック・リダンダンシー・・・・なんだっけな、忘れた(^^;
ま、調べてみてちょ(^^;;
|