

現在「組み込みOS自作入門」という書籍をやっており、その中に出てくるRSフリップフロップの挙動が分かりません。

具体的には、R（リセット）とS(セット)の入力が共に0の時の動きです。

[![画像の説明をここに入力](https://i.stack.imgur.com/Tsv6n.jpg)](https://i.stack.imgur.com/Tsv6n.jpg)

Nor回路ではRもしくはSに1が入れば、出力が0に問答無用で決まることはわかるのですが、RとSの入力が0の時は値を決めることが出来ないから、"前の出力を使う"という概念がそもそもどこから来たのか分かりません。

Nor回路の出力を決めるのは、0の入力だけだったら決めることが出来ないことはわかっていますが、なぜいきなり前のフリップフロップの出力が出てきたのでしょうか？  
なぜ都合よく前の出力結果を二つの入力が0の場合の時だけ使うのでしょうか？  
それだったら、全ての回路の入力を前の出力結果(黒丸の所)を使うべきだと思います。

また、フリップフロップには入力してから出力してから微妙な時間差があると思います。  
例えば、Sに１をセットしてRに０をセットの場合

①Sの側のNor回路に入力(1秒かかる)  
②Sの側のNor回路の出力(1秒かかる)  
③Sの側のNor回路の出力を、Rの側のNor回路に入力(1秒かかる)  
②Rの側のNor回路の出力(1秒かかる)

のような形で(実際には1秒もかかっていないと思いますが)、フリップフロップ内においてもRとSの回路の入力と出力は完全には同期してないように思えるのですがいかでしょうか？

いろいろな資料を見ても分からないのでご教授して頂ける方いましたら、よろしくお願い致します。


CC BY-SA 4.0
2022-08-13T01:47:52.213
90535
2022-08-23T05:37:52.823
2022-08-13T04:16:54.190
3060
47147
question
電子回路
RSフリップフロップの動きについて


中央の "８"の字の回路部分は "８"の字に電流が流れるのではなく,  
"５"の字 あるいは "２"の字のように片側のみ流れます

電流が流れていない状態から S のゲートを開き電流が流れ出すと "２"の字のように流れ  
ゲートを閉じても, そのまま回路に電流が流れ続けます  
R 側のゲートを開くと "５"の字のように電流が流れ続け, ゲートを閉じてもそのまま。  
(S と R 同時にゲート開くのはナシ)  
2つの(電流の流れてる)状態が切り替わるだけ

フリップフロップは 日本風の表現で言えば「ぎっこんばったん」のような感じで  
それこそシーソーのように思い描くとよいでしょう  
ちなみに RSフリップフロップは Static RAM によく使われます  
(CPU キャッシュメモリー, CPU のレジスター など)

SRAMの内容は, 書き換えなければずっとそのまま (以前の状態のまま)  
そして, 内容(状態) は Q から取り出せます

時間差については  
トランジスター含まない部分は, おそよ秒速 30万km  
トランジスターでスイッチングでなければ, たぶん同じくらいかと思うが わからない  
スイッチングには少し時間かかるかもだけど MOS型であれば高速なはず

回路の長さが問題になるほどの速度で処理を行うのでなければ無視できるのでは？

* * *

【追記】(ゲートを閉じた際に、電流が流れ続ける理由)

中央 "８"の字部分  
S のゲートを開くと "５"の字に相当する部分は Low, その先の "２"の字に相当する部分は Highになり, さらにその先で S から入る部分と合流
(OR回路)  
このとき, Sのゲートが開いてようと閉じていようと結果は変わりません (ORなので)  
(あとはずっとそのまま。 "５"の字相当部分は Low, "２"の字相当部分は High)

論理回路の NOT, AND, OR それぞれの回路は, わかり易さのためスイッチを並べて AND回路とか OR回路とか説明があったりするけれど  
実際のところはトランジスター その他が利用されていて, 電源もちゃんとあります。

例えば以下のサイトで回路が示されてます。  
[「NOT回路」「OR回路」「AND回路」 | コンピュータの仕組み](https://sagara-works.jp/research-and-
development/logic/)

S や R のゲートが閉じても電流が流れるのは, 実際には, 上記のような回路の組み合わせになってるから。

(論理回路としては High or Low で考えればいいので, 省略して記号化されてる)


CC BY-SA 4.0
2022-08-13T03:57:55.990
90537
2022-08-23T05:37:52.823
2022-08-23T05:37:52.823
43025
43025
90535
answer


入力両方がLowレベルのときは、出力は以前の状態を保持します

通常状態では双方Lowの状態とし、RのみがHighになったらQがLowになり他方はHighになります  
また、SのみがHighとなった場合は、QはHighとなり、他方はLowです。

そして、双方Lowになった場合、以前の状態を保持します。

＃で、RS双方Highになる場合、ってのは禁止ということになってます


CC BY-SA 4.0
2022-08-13T06:47:30.697
90541
2022-08-13T06:53:29.697
2022-08-13T06:53:29.697
27481
27481
90535
answer


こういう回路の動作解析における出発点がそもそも違うっていうか・・・

数学的帰納法と同じで、証明したい式が `n=k` のときに成立するとみなしたら（みなすこと自体の是非は後回し） `n=k+1`
のときにも成立する、って考え方をします。 `S=R=0` であるとき `Q=0` が成立するとすれば（何らかの別な方法で事前に `Q=0`
にすることができたのなら、と読むとよい）この回路は `Q=0 #Q=1` を維持します。というのが納得できないのかな？うーん。

`Q=0` なので下側の NOR は `S=Q=0` から `#Q=1` を出力します。  
`#Q=1` が上側の NOR に伝達されたなら `R=0 #Q=1` より `Q=0` を出力維持します。  
この解説では `Q` → `#Q` の順を追ってみたけど `#Q` → `Q` の順でも同じこと。  
そして `Q=0` にする手段（数学的帰納法でいうところの `n=1` に相当）が `R=1` っス。

> 完全に同期しないように思える

はい、そのとおり `Q` が変化するタイミングと `#Q` が変化するタイミングは **ずれます**
。このずれを[グリッチ](https://ja.wikipedia.org/wiki/%E3%82%B0%E3%83%AA%E3%83%83%E3%83%81)と呼び、超高速動作を狙う際には障害になります。基礎理解である今の段階では考えなくていいです。


CC BY-SA 4.0
2022-08-13T07:18:48.517
90543
2022-08-13T07:18:48.517
8589
90535
answer