ROMの電子回路の仕組み

### マスクROM
メモリセルの内部回路の開放と短絡によって1, 0を記憶する
半導体製造工程には写真の感光技術が利用されるが、基板を覆うマスクパターンによってデータが記録される
データ線ADとデータ線Dが短絡しており、AD=HとなるとD=Hとなる
アドレス線を開放状態にすると、AD=HとしてもD=Lのままである H, Lに0と1を割り当てて、1ビットを記憶することができる
バイポーラトランジスタを使ったマスクROMはこの原理で動作させてることができる
実用的には消費電力の少ないMOSFETを半導体スイッチとして用いている
マスクROMはIC製造段階で情報を書き込むのでデータを変更することができない

### PROM
一度だけ書き込み可能なROMをPROMという
ヒーズをトランジスタのエミッタ端子とデータ線の間に設けて、これを溶断するかどうかによってH、Lを記憶する
PROM出荷時には全ヒューズが繋がっている
セルにLを記憶するには、電源電圧Vccを高く設定し、ヒューズが溶断されるとLが記憶される
ヒューズ以外にもダイオードを挿入し、pn接合を破壊・短絡してH, Lを表す方法もある

### EPROM
データの正気と再書き込み可能なROMをEPROMという
データの消去に紫外線を使うUV-EPROMと電圧を使うEEPROMがある
装置固有の設定データや利用者情報などの記憶、書き換え頻度の少ない用途に適している

– 書き込み方法
p型半導体基板上にn型半導体を二つ設け、これに電極ドレイン(D)とソース(S)をつける
更にドレイン・ソース間に絶縁層を設け、その上にゲート電極(G)をつける
n型半導体は自由電子が含まれた物質で自由電子の流れが電流
p型半導体は自由電子を含んでいない
ゲートに電圧を加えない状態では電流は流れない(nMOSがオフ)
ゲートに電圧を加えるとゲート、ソース間はコンデンサとして働き、正の電荷がゲート電極に蓄えられる
-> nチャンネルを作り、半導体スイッチとなる Vgs > Vthでオン、Vgs < Vthでオフ FGの帯電量によってMOSFETのオンオフを決定でき、ROMとして1ビットを記憶させることができる 一度入り込んだ負電荷は電源を切っても消えないので、半永久的にこの状態を保持できる - データ消去 UV-FPROMは紫外線をFGゲートに照射させることで内部電子のエネルギーを増大させ、FGゲートから放出させる このため、IC上部には紫外線照射窓がある EEPROMは電圧によってFGゲートの電子を放出させる FGゲートの帯電動作と逆 ゲート電圧を0とし、ドレイン電圧を高く設定するとFGゲートの電子がドレイン側に逃げ出して0となる EEPROMは電圧制御によって1ビット単位で行うことができるが、セルにMOSFETが追加されるため面積が大きくなり大容量化が難しくなる ### フラッシュメモリ メモリセルを幾つかの集合に分割し、消去をブロック単位で行うようにした セルの消去用トランジスタをなくすことでセル面積を抑え、大容量化を図っている 電源を切ってもデータが保持できるので応用は急速に広がっている マザーボードのBIOS、スマホのストレージはフラッシュメモリー UBS, SSDなどもNAND型のフラッシュメモリー フラッシュメモリはTranscend(台湾)、Silicon-Power(ドイツ)、ELECOM、I-O DATA、SanDisk、BUFFALO、GREEN HOUSEなどが生産 EPROMの仕組みは、p型半導体と、s,dのn型半導体に挟まれた絶縁体のゲートでできてるのね。 1ビットでこの仕組みが必要なのに、500GBのSSDって、どれだけpnとデータ線、アドレス線をどうやって少量化して詰め込んでるんやろうか、全く想像が付かない。CPUもそうだけど。 ICメモリの仕組みがわかったところで、アプリケーションの品質には直接は影響はないけど、興味深いところではある。

ICメモリ

記憶装置には大きく分けて外部記憶装置と内部記憶装置がある

### 外部記憶装置
外部記憶装置にはハードディスク、CD、DVDなど
-> 機械的な駆動部分が存在するため読み書き速度が遅い

### 内部記憶装置
ICメモリは小型の回路部品であり、基板内部に組み込まれる為、内部記憶装置と言われる
記憶容量では劣るが、機械駆動部が少ない為高速
CPU周りの高速処理にICメモリが使われている

### ICメモリの内部構造
大量の2値情報を記憶する
IC内部の最小記憶単位をセルと良い、通常は1ビットを記憶する 
セルは平面上に配列されており、アクセスするためにアドレス(固有の識別番号)が使われている
行アドレスと列アドレスがあり、アドレス線の電圧がH(アクティブ)になり、列アドレスが入力されると、特定のデータ線が選ばれ、セルが読み書きの対象となる
読み書きの制御信号R/WがHになると、記憶データが出力され、Lになると記憶される

### ICメモリの分類
ROM: 読み込み専用、電源を切っても内容保持 R/W制御信号は取り除かれ、出力のみ
RAM: 読み込み書き込み自由、電源を切ると内容も消える R/W信号に応じて双方向通信に対応

メモリっていうと、文字データ、画像データなどを記憶しているように思っていたが、実際には0、1の2値データを持ってるだけなのね。えらい勘違いをしていたみたいだ。

A/D, D/A変換

アナログからデジタルに変換するのをanalog to digital conversionでA/D変換という
逆に、2値信号をアナログ信号に変換する作業をdigital to analog conversion, D/A変換という

#### D/A変換の原理
ほとんどの電子回路は電圧を情報として扱うので、アナログ電圧量に変換すると捉える
-> 2進数を10進数に変換し、この10進数に比例した電圧量を得ること
e.g. X=1011(2)の時、Y=11 11に比例した電圧が現れる仕掛けを用意すればD/A変換したと言える
ビット重みに比例した電流を流す仕掛けと、得られた電流から電圧変換する作業を行えば良い
-> 複数の抵抗網と演算増幅器を用いることが多い

– 演算増幅器
マイナス端子とプラス端子電位差を増幅する
重み付け抵抗あるいはラダー抵抗で1/8R, 1/4R, 1/2R, Rとすれば、ビットの大きさに比例した電流を得られる

### A/D変換器の原理
A/D変換の原理は積分型と比較型に分けられる

– 二重積分型A/D変換器
積分器、コンパレータ、クロックパルス発生器、ゲート、カウンタ、制御回路が含まれている
電圧の大きさ -> 時間の長さ -> パルスのカウント数 という変換作業によって電圧信号をデジタル化する
クロック周波数、積分期間が長いほど大きくなる
– 逐次比較型A/D変換
二分法と言われる探索手法
あらかじめ想定される電圧範囲を二分し、この閾値電圧と入力電圧を比較してデジタル変換する

nビットの2進変換をしたい場合は、nビット対応のD/A変換器を用意してn回繰り返し動作によって求めることができる

A/D, D/Aも2進数の変換をどう扱うかってことやな
世の中の複雑なアルゴリズムが全て2進数で処理されているってのは未だに信じられない

パルス回路(pulse)

ディジタル回路で扱う矩形波信号(非正弦波形の基本的な一種)をpulseという
信号伝送の過程でパルスが歪んだりノイズで乱れたりするので、パルス波形を加工・整形する操作が必要になる
インバータとはNOTのことで、1を0に、0を1に反転する
判定基準となるVtを閾値という
シュミットトリガー型インバータでは、Viの大きさだけでなく、それまでの変化の過程(履歴)を考慮して判定されるヒステリシス特性をもつ。これによりノイズが混入していても本来の動作を行うことができる

### マルチバイブレータ(multibibrator)
回路の二つの電圧状態を交互に行き来することによりパルスを発生させる回路
無安定型(入力不要)、単安定型、双安定型がある
-> Viが徐々に増加し、インバータの閾値で反転しV=0となりViが徐々に低下 そして再度充電すると周期的に充電放電を繰り返すのでパルス出力を得る

### 遅延回路
RC回路を使ってバッファ入力することで、波形を遅らせることができる。バッファとは信号波形を整形し、出力インピーダンスを低下させるゲート回路のこと

### パルス整形回路
信号波形が歪んだ場合に整形する操作
クリップ回路は入力波形をあるレベルで切り取る働きをするため、信号の最大値や最小値を設定するときに使われる
-> ダイオードがオン(導通)、オフ(非導通)で電流が流れたり流れなかったり制御できるので、出力電圧V0を制限できる
クリッパ回路(電圧の最大値制限)、リミッタ(最大値と最小値を制限)、スライサ、クランパ(直流再生回路)

東日本”50Hz”、西日本”60Hz”のこのプラスとマイナスが入れ替わる周波数がパルスで、このパルスを加工したり整形できるってことやね。つまり、パルスの電子の移動を制御できるってことかね?

ChromeでIEのUserAgentで操作したい時

ChromeでInternetExplorerとして操作したい時

1. DevToolを開く
2. 三点リーダのメニュー -> 「More tools」 -> 「Network conditions」
3. 「User Agent」の「Select automatically」のチェックボックを外す
4. IE11を選択

UserAgentは偽装できるが、思ったような挙動にはならないな。。。

順序回路

順序回路は現在の入力と過去の入力で出力が決まる回路
二次情報を記憶する回路をレジスタという、CPU内部の高速演算やデータ処理の一時記憶用途に使われる
一度に記憶できるビット数をレジスタ長といい、レジスタ長が大きいほど高度な作業を高速に行うことができる
64bit CPUとは、「一度に記憶できるビット数が64ビット」という意味。当然32ビットより性能が良い
e.g. D-FFとCK端子をつなぎ合わせると、次のクロックパスが入力されるまで出力が保持される

### シストレジスタ
レジスタ内のデータを1ビット右もしくは左にシフトさせるレジスタをシフトレジスタという
Binデータはクロックに同期して右側へ1段ずつシフトしていく
順次入力されたシリアルデータが一挙に並列出力(パラレル)された状態となる
プリセット端子はD-FF内部状態をリセット(Q=1)する端子、PR=L(0)で有効、H(1)で無効
クリア端子はCLR=0で内部状態がクリア、CLR=1で無効

### カウンタ
2進数を数える回路をバイナリカウンタという
4ビットの場合は16進カウンタという
JK-FF, T-FFで、J=K=1としてクロック信号CKを入力するたびにトグル動作を行い次段の入力となる
値が1ずつ増加をアップカウンタ、減少をダウンカウンタという
FFで時間遅延があるため、完全には同期しておらず、非同期カウンタという(asynchronous)
不要なパルスをハザードという、補出力で対策を講じる

記憶素子(flip-flop)

順序回路
->入力状態と回路の内部状態によって出力が決まる
->過去の状態を記憶する機能がある

### フリップフロップ
2つの安定した状態を持つ
A=0の時、NOT出力は1となり、これが入力Bになる 入力BのNOT出力は1となり、Aの入力に戻される この状態が維持される
一度決まった状態は新たに特定の入力がない限り保持される為、記憶素子と考えることができる
フリップフロップは様々な種類が存在し、レジスタやカウンタなど多くの応用回路がある

### RS-FF(reset-setFF)
リセット信号Rが1の時、出力Qが0にリセットされ、セット信号Sが1の時、Qが1にセットされる
R=1, S=0の時、Q=0、!Q=1となる
R=0, S=1の時、Q=1、!Q=0となる
R=0, S=0の時、直前の出力状態Q, !Qがそのまま保持される
R=1, S=1の時、Q, !Qがどちらも0になり不安定となり正常に動かない為、禁止されている

### 同期式RS-FF
R, Sの入力の他に、クロック信号CKを用意し、この信号変化に同期して出力を変化させる。この信号をトリガ(ポジティブエッジトリガ)という
CK=1とすると、RS-FFと同じ。CK=0とするとR=0, S=0に強制したことに等しく、出力内容は保持される

### JK-FF(Jack knife FF)
R=1, S=1の欠点を無くすための仕様
ANDと同期式RS-FFの組み合わせ
J=1 K=0の時、Q=1 !Q=0
J=0 K=1の時、Q=0 !Q=1
J=0 K=0の時、前の状態を保持
J=1 K=1の時、前の状態を反転…トグル動作
J=1 K=1でCK=1が長くなると発振状態となるため、CK=0にしないといけない。それがマスタースレーブ型JK-FF
->ネガティブエッジ動作

#### T-FF(toggling flip-flop)
周波数を1/2にする働きがある

### D-FF(delay flip-flop)
信号を遅延する
入力信号Dを出力するにはCKのネガティブエッジトリガを待たなければならず遅延される
->桁をずらすシフトレジスタなどに使われる

「記録する」って、要するに電子信号を保持するってことなのか。
なんか前髪を掴まれた気分だなー

組み合わせ論理回路

### エンコーダ
複数の入力信号のうち一つが1となった時、これに対応する2進符号を出力する論理回路を指す
e.g. パソコンのキーボード…押しボタンスイッチで文字情報を送付

10進数1桁を2進数4桁(B3,B2,B1,B0)に変換するエンコーダ
2進数4桁で表現された10進数をBCDコード(binary coded decimal code)という

BCDエンコーダの内部回路

BCDデコーダの内部回路

### マルチプレクサ
複数の信号を1つの信号に合成する装置(制御信号がAとBに加え、S=0 or S=1がある)
S=0の時Aを通過させるにはF=!S・Aとし、S=1の時Bを通過させるにはF=S*B

### デマルチプレクサ
1つの信号を複数の信号に分割する、出力選択回路と言われる
A = !S・F, B = S・B(2出力)

### 一致回路
二つのデータが等しいかどうかを判定する回路

### 比較回路
二つのデータの大小を判定する回路を比較回路という

### 加算回路
半加算回路: 1ビット処理
全加算回路: 2ビット以上の場合は下位ビットの桁上げ情報を考慮する
減算は2の補数を用いて加算操作で済ますことができる… 全ビットをNOTゲートで反転させる
ただし、補数を用いた減算で負の結果の場合は、さらに2の補数を求める操作が必要

なるほど、入力値から論理に基づいた出力値になるように、AND,OR,NOR,EXORなどを組み合わせてダイオードの電子回路を引くわけだな。
ロジックだな、電子回路の意味が大分わかってきた。

電圧とダイオードによる論理演算の仕組み

数理論理学では文字や記号で表現する
A = T -> B = T, A = F -> B = F

論理積OR
0,0 -> 0
0,1 -> 1
1,0 -> 1
1,1 -> 1

論理積AND
0,0 -> 0
0,1 -> 0
1,0 -> 0
1,1 -> 1

論理否定…インバータ
0 -> 1
1 -> 0

[ドモルガンの定理]
ある恒等式が成立していることがわかっていれば、その恒等式に含まれる0を1に、1を0に変換し、論理和を論理積に、論理積を論理和に変換して得られる式も恒等式として成り立つ

### 加法標準法
論理和を結合し、入力状態のうち、いずれか一つが起きた時に、F=1となるよう式を組む
### 乗法標準法
論理積で結合し、入力状態のうち、いずれか一つが起きた時に、F=0となるよう式を組む

### カルノー図
入力変数の値の組み合わせをもとに作成した行と列に出力の値を書き込んだ一覧
論理関数(4入力1出力、3入力2出力)などを簡素化できる

### 論理ゲート
基本回路を論理ゲート(logic gate)といい、通常一つの回路記号で表される
電圧が低い状態(Low)を0に、電圧が高い状態(High)を1に対応させる
どの半導体素子もデジタル回路ではオンとオフを伴ったスイッチの役割を担っている

### ダイオード
P形半導体(電子が不足)からの端子をアノード、N形半導体(余った電子がP原子の周りを回っている)からの端子をカソードといい、アノードからカソードの流れる電流のみを通して、その逆はほとんど通さない
P型は+の電圧、N型は-の電圧
整流作用があり、スイッチと同じ役割を持つ。順バイアスの電圧でオン、逆バイアスの電圧でオフとなり、半導体スイッチという

バイポーラトランジスタも IB>0 or IB = 0でスイッチの役割を果たす(Transistor Transistor Logicで広く使用)
論理回路出力に接続可能な最大ゲート数をファインアウトという

### MOSFET
ゲート、ドレイン、ソース
ゲート、ソース間が絶縁された小容量コンデンサ(直流通過、電荷を蓄える)と等価の構造担っている
一度充電されると、電流はほとんど流れずにオン状態を維持することができる為、電力消費が小さい

### CMOS
二つのMOSFETを直列に接続した構造(complementary MOS)
CMOSでは電源電圧Vccが出力端子から分離される為電流が流れず原理上電力損失は起こらない
CMOS回路では原理上電圧降下が生じない為、より多くのゲートを同時に接続できる

– ORゲート…論理和を実現する論理回路 いずれかがHの場合、ダイオードがオン
– ANDゲート…論理積を実現する回路 両者がHの場合はダイオードがオフ
– NOTゲート…バイポーラトランジスタで実現 AがLのとき、抵抗Rは電流が流れない為F=H 逆にA=Hにすると抵抗Rに電流が流れて電圧が低下する為F=Lとなる

NORゲート(ORとNOTゲートを組み合わせる) …AND, OR, NOTの基本ゲートを全て表現できる
NANDゲート(ANDとNOTゲートを組み合わせる) …AND, OR, NOTの基本ゲートを全て表現できる

なるほど、パソコンって、pn接合のダイオードで電圧処理してるのか
こりゃ、エンジニアは電子回路勉強した方が絶対いいな

デジタル回路と二進数

デジタル回路では0と1の記号だけを使った二進数で数を表す
これはエンジニアであれば誰も知ってることだろう
では、何故2進数を使うのか?

### 二進数を使う理由
スイッチをオフにすると高い電圧が発生、スイッチをオンにすると電圧0
この電圧値に対応するルールを決めると、回路はそのルールを表現する回路になる
デジタル回路は電圧の離散値に意味を持たせ、これを処理する

### 2進数
最上位ビットをMSB、最下位ビットをLSB
デジタル回路では0と1しか表せない為、マイナス符号をそのまま扱うことができない その為、補数(complement)を使う
※補数とは「元の数」と「補数」を足すと桁上がりが発生しない数のうち、「最大」の数
10進数で「6」の補数は「4」、「171」の補数は「829」
1195+(10000-171)=10000+1024
結果が補数かどうかはオーバフローが発生したかどうかで判断する オーバーフローが起こらなかった場合は桁数の補数で表す
このようにして減算回路は否定と加算演算で容易に実現ができる
コンピュータでは2進数を4ビットまで対応させた16進数がよく使用される(-8〜7までの数字)
8ビットの場合は256(-128〜127) 2^9=512

varchar(255)なども、電圧の離散値で8ビットの256からきていると考えると理解が深まりますな。