さて、論理回路で何かを作ろうとする場合、まず「何を作ろうとしているのか」を明確に定義することから始まります。
JK-FFを作る場合、作ろうとしている回路の定義は下記のようになります。
え〜と、冗談です(^^;
JK-FFを作るんですから、「JKーFFとは何者か」を定義しなければ、話は始まりません(^^;
で、JK-FFは何者かを、もう少し詳しく定義すると、下記のようになります。
入力信号 |
j, k, t, s, r |
出力信号 |
q, qc |
動作の定義 |
お馴染み真理値表で書くと、こうなります。
入力 |
出力 |
s |
r |
t |
j |
k |
q |
qc |
0 |
0 |
x |
x |
x |
? |
? |
0 |
1 |
x |
x |
x |
1 |
0 |
1 |
0 |
x |
x |
x |
0 |
1 |
1 |
1 |
↑以外 |
x |
x |
q |
qc |
1 |
1 |
↑ |
0 |
0 |
q |
qc |
1 |
1 |
↑ |
1 |
0 |
1 |
0 |
1 |
1 |
↑ |
0 |
1 |
0 |
1 |
1 |
1 |
↑ |
1 |
1 |
qc |
q |
|
日本語で書き下すと、こうなります。
- s='0'かつr='0'の時
- 良くわからない(笑)
- s='0'かつr='1'の時
- q='1'、qc='0'となる。
- s='1'かつr='0'の時
- q='0'、qc='1'となる。
- S='1'かつr='1'の時
- 以下の動作になる。
- tの立ち上がりエッジ(↑)以外
- qとqcは変化しない。
- j='0'かつk='0'の時のtの↑
- qとqcは変化しない。
- j='1'かつk='0'の時のtの↑
- q='1'、qc='0'となる。
- j='0'かつk='1'の時のtの↑
- q='0'、qc='1'となる。
- j='1'かつk='1'の時のtの↑
- qとqcの値が反転する。
|
この動作を、下図のように、1ヶのD-FFと、そのD-FFのd入力を制御する回路に分離します。
つまり、1ヶのD-FFのd入力を上手に制御してやることで、回路全体としてJK-FFの機能定義のとおりに動くようにします。
この回路を、前段のd信号を作る部分と、後段のD-FFとに分けて機能記述を書くと,下記のようになります。
入力信号 |
j, k, t, s, r |
中間信号 |
d |
出力信号 |
q, qc |
動作の定義 |
ちょっと変則ですが、
真理値表で書くと、こうなります。
入力 |
中間 |
入力 |
出力 |
j |
k |
d |
s |
r |
t |
q |
qc |
x |
x |
x |
0 |
0 |
x |
? |
? |
x |
x |
x |
0 |
1 |
x |
1 |
0 |
x |
x |
x |
1 |
0 |
x |
0 |
1 |
x |
x |
x |
1 |
1 |
↑以外 |
q |
qc |
0 |
0 |
q |
1 |
1 |
↑ |
q |
qc |
1 |
0 |
1 |
1 |
1 |
↑ |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
↑ |
0 |
1 |
1 |
1 |
qc |
1 |
1 |
↑ |
qc |
q |
|
本語で書き下すと、こうなります。
- s='0'かつr='0'の時
- 良くわからない(笑)
- s='0'かつr='1'の時
- 前段:どーなってても良い
後段:q='1'、qc='0'となる。
- s='1'かつr='0'の時
- 前段:どーなってても良い
後段:q='0'、qc='1'となる。
- S='1'かつr='1'の時
- 以下の動作になる。
- tの立ち上がりエッジ(↑)以外
- 前段:どーなってても良い
後段:qとqcは変化しない。
- j='0'かつk='0'の時のtの↑
- 前段:dにqの値を出力する。
後段:qの値を取り込むので、
qとqcは変化しない。
- j='1'かつk='0'の時のtの↑
- 前段:dに'1'を出力する。
後段:'1'を取り込むので、
q='1'、qc='0'となる。
- j='0'かつk='1'の時のtの↑
- 前段:dに'0'を出力する。
後段:'0'を取り込むので、
q='0'、qc='1'となる。
- j='1'かつk='1'の時のtの↑
- 前段:dにqcの値を出力する。
後段:qcの値を取り込むので、
qとqcの値が反転する。
|
ま、後段は源内CADオリジナルのD-FFなんだから、考えにゃぁならんのは前段の回路だけです。前段部分だけ抜き出して動作定義すると、下記のようになります。
入力信号 |
j, k,q, qc |
|
出力信号 |
d |
|
動作の定義 |
真理値表で書くと、こうなります。
入力 |
出力 |
j |
k |
q |
qc |
d |
0 |
0 |
0 |
x |
0 |
0 |
0 |
1 |
x |
1 |
1 |
0 |
x |
x |
1 |
0 |
1 |
x |
x |
0 |
1 |
1 |
x |
0 |
0 |
1 |
1 |
x |
1 |
1 |
|
日本語で書き下すと、こうなります。
- j='0'かつk='0'の時
- dにqの値を出力する。
- j='1'かつk='0'の時
- dに'1'を出力する。
- j='0'かつk='1'の時
- dに'0'を出力する。
- j='1'かつk='1'の時
- dにqcの値を出力する。
|
これ、素直に回路に直すと、こんなんなります。
で、この回路をD-FFと組み合わせて動かすと、下記のようになります。JK-FFと並べてシミュレーションできないのが残念です(^^;
下図は、後段のD-FFも含めてシミュレーションした結果ですので、ドコがどーゆーふーにJK-FFになってるか、じっくり見てください。
ところで、上の回路は素直に作りすぎてて、かなり冗長です。
ま、論理回路なんて動けば良いんだから、多少冗長でも別に良いけど。。でもカッコ悪い(笑)
冒頭にアップしたマクロの論理回路は、実はこんなんなってます。
さぁ、なんでこの回路が上の回路と同じ動きをするのか、よーく考えてみましょうね(^^;
(ヒント:d出力が'1'になる場合に注目して回路を組んでいます)
|