見出し画像

3章 順序回路

1章と2章で構築した回路は、全て組み合わせ回路である。
本章では、フリップフロップをプリミティブな構成要素として用いる。
フリップフロップによって、コンピュータで使われる記憶装置すべてが実装される。
2値素子(1bit レジスタ)から始まり、レジスタ、メモリ、カウンタの順を追って構築していく。
記憶の本質は、『前に覚えたことを今思い出す』なので、構築の際に時間の経過を表す方法を考案する。

★単語

・組み合わせ回路:入力値の組み合わせだけで関数の値を決める。
        ※重要な処理は得意だが、状態を保つことができない。
・クロック:オシレーターによって実現されている。
・周期:0から始まり、1が終わるまでに経過した時間。
・D型フリップフロップ(DFF):1bitのデータ入力とクロック入力と1bitのデータ出力である。
               ※データ入力とクロック入力が合わさることで、『時間に基づく振る舞い』が可能
・レジスタ:データを格納したり、呼び出したりできる記憶装置である。
・word(ワード):多bitのレジスタを持つ値(バイトをまとめた単位)。
・メモリ(RAM):レジスタをたくさん積み上げることで構築できる。
         ※データ入力、アドレス入力、ロードビットの3つの入力を受ける。
・メモリアドレス:他と重複しないユニークな番号。
・カウンタ:ある整数値を加算する。
      ※標準的なレジスタに定数を加算することで、カウンタ回路を実現することができる。
・順序回路:端的に言うと、1つ以上のDFF回路が、直接的または間接的に組み込まれている回路のことを指す。
      機能面 ⇒ 状態を保つ(memoryなど)、状態を操作(カウンタなど)	

★回路図

・1bit レジスタ

CHIP Bit {
   IN in, load;
   OUT out;

   PARTS:
Mux(a=clock, b=in, sel=load, out=w1);
DFF(in=w1, out=out, out=clock);
}

1bit レジスタ

・16bit レジスタ

CHIP Register {
   IN in[16], load;
   OUT out[16];

   PARTS:
Bit(in=in[0], load=load, out=out[0]);
Bit(in=in[1], load=load, out=out[1]);
Bit(in=in[2], load=load, out=out[2]);
Bit(in=in[3], load=load, out=out[3]);
Bit(in=in[4], load=load, out=out[4]);
Bit(in=in[5], load=load, out=out[5]);
Bit(in=in[6], load=load, out=out[6]);
Bit(in=in[7], load=load, out=out[7]);
Bit(in=in[8], load=load, out=out[8]);
Bit(in=in[9], load=load, out=out[9]);
Bit(in=in[10], load=load, out=out[10]);
Bit(in=in[11], load=load, out=out[11]);
Bit(in=in[12], load=load, out=out[12]);
Bit(in=in[13], load=load, out=out[13]);
Bit(in=in[14], load=load, out=out[14]);
Bit(in=in[15], load=load, out=out[15]);
}

・8レジスタメモリ

CHIP RAM8 {
   IN in[16], load, address[3];
   OUT out[16];

   PARTS:
DMux8Way(in=load, sel=address, a=a, b=b, c=c, d=d, e=e, f=f, g=g, h=h);
Register(in=in, load=a, out=r1);
Register(in=in, load=b, out=r2);
Register(in=in, load=c, out=r3);
Register(in=in, load=d, out=r4);
Register(in=in, load=e, out=r5);
Register(in=in, load=f, out=r6);
Register(in=in, load=g, out=r7);
Register(in=in, load=h, out=r8);
Mux8Way16(a=r1, b=r2, c=r3, d=r4, e=r5, f=r6, g=r7, h=r8, sel=address, out=out);
}

8レジスタメモリ

・64レジスタメモリ

CHIP RAM64 {
   IN in[16], load, address[6];
   OUT out[16];

   PARTS:
DMux8Way(in=load, sel=address[3..5],a=a, b=b, c=c, d=d, e=e, f=f, g=g, h=h);
RAM8(in=in, load=a, address=address[0..2], out=r0);
RAM8(in=in, load=b, address=address[0..2], out=r1);
RAM8(in=in, load=c, address=address[0..2], out=r2);
RAM8(in=in, load=d, address=address[0..2], out=r3);
RAM8(in=in, load=e, address=address[0..2], out=r4);
RAM8(in=in, load=f, address=address[0..2], out=r5);
RAM8(in=in, load=g, address=address[0..2], out=r6);
RAM8(in=in, load=h, address=address[0..2], out=r7);
Mux8Way16(a=r0, b=r1, c=r2, d=r3, e=r4, f=r5, g=r6, h=r7, sel=address[3..5], out=out);
}

64レジスタメモリ

・プログラムカウンタ

CHIP PC {
   IN in[16],load,inc,reset;
   OUT out[16];

   PARTS:
Register(in=registerin, load=registerload, out=registerout, out=out);
Inc16(in=registerout, out=incremented);
Mux16(a=false, b=incremented, sel=inc, out=tmp1);
Mux16(a=tmp1, b=in, sel=load, out=tmp2);
Mux16(a=tmp2, b=false, sel=reset, out=registerin);
   
Or(a=reset, b=inc, out=resetorinc);
Or(a=load, b=resetorinc, out=registerload);
}

2-2プログラムカウンタ


Next
4章 機械語(前半)

Back
1章 ブール理論
1章 ブール理論(番外編)
2章 ブール算術

・Twitter
https://twitter.com/tango3564

・Instagram
https://www.instagram.com/tango3690/