SlideShare a Scribd company logo
1 of 24
コンピュータシステムの
理論と実装③
横山 周平
本日の予定
組み合わせ回路と順序回路(p41)
各種順序回路について(p42~p55)
まとめ
本日の予定
組み合わせ回路と順序回路(p41)
各種順序回路について(p42~p55)
まとめ
組み合わせ回路とは? (組み合わせ回路と順序回路)
 1,2章で構築した回路のこと
※入力値の組み合わせだけで値が確定する!!
例:ORの場合は、必ず入力に1がある場合のみでしか1になりえない
 特徴
単純な処理のため、たくさん処理出来る
 欠点
状態(値)を保てない ※例:呼ぶ度に加算される回路など
組み合わせ回路とは? (組み合わせ回路と順序回路)
 1,2章で構築した回路のこと
※入力値の組み合わせだけで値が確定する!!
例:ORの場合は、必ず入力に1がある場合のみでしか1になりえない
 特徴
単純な処理のため、たくさん処理出来る
 欠点
状態(値)を保てない ※例:呼ぶ度に加算される回路など
→時間が経過しても記憶出来る機能。記憶素子が必要!!
記憶素子とは? (組み合わせ回路と順序回路)
 時間経過してもデータを記録出来る回路のこと
上記を備えた論理回路を順序回路と呼ぶ
 仕組み
同期,クロッキング,フィードバックループなど
複雑な技法を組み合わせて実現されている
 順序回路 ~フリップフロップ(flip-flop)~
複雑な記憶素子の機能を備えたプリミティブな順序回路。
本誌では、flip-flopを使用し、他の順序回路の構築を行う
本日の予定
組み合わせ回路と順序回路(p41)
各種順序回路について(p42~p55)
まとめ
背景 (各種回路について)
 記憶するという行為について
記憶という行為は、時間に依存する行為である。
つまり「前に記憶したものを今思い返す」ことである。
そのため、回路構築には、
時間の経過を表す方法を考察しなければならない。
クロック (各種回路について)
継続的に行き来する信号を全ての順序回路に送信する。
例:tick→tock→tick→tock…
tick→tockまでを周期(cycle)と呼ぶ
フリップフロップ (各種回路について)
順序回路の最も基本(下位レベル)となる回路。
いくつか種類があるが、本誌ではD型フリップフロップ(DFF)のみ使用する。
DFFにより「時間に基づく振る舞い」が可能になる
また、全ての順序回路は、DFFの組み合わせで構成されている。
t:現在のタイムユニット
out:出力値
in:入力値
要約:1つ前の値を出力してるだけ
out(t)=in(t-1)
DFF(in=入力,out=出力);
hdl式
式
2値素子(Bit)/レジスタ(p43~44,p49~50)
データの格納、呼び出しできる記憶装置。
・読み込み(read)
レジスタの値を読み込む。out(t)=out(t-1)
・書き込み(write)
loadが1の場合は書き込み。out(t)=in(t-1)
次のクロック周期から値が変わる≒読み込みは常に1つ前の周期
※前回の値を毎周期、書き込むことで記憶を実現している!!
If load(t-1) then out(t)=in(t-1)
else out(t)=out(t-1)
Register(in=入力,load=上書き有無,out=出力);
hdl式
関数
(各種回路について)
p43. p50図参照
Bit/レジスタ の実装(p54)
nand2tetries/03/aの「Bit.hdl」と「Register.hdl」の実装を行う。
※RegisterはBitを配列にしただけ(一般的には16,32,64)
このサイズをワードと言う
(各種回路について)
Register(in=入力[16],load=上書き有無,out=出力[16]);
hdl式
Bit(in=入力,load=上書き有無,out=出力);
hdl式
実装方法について
・p43図3-1参照
・p50
動作確認手順
nand2tetries/tools/HardwareSimulator.bat(macならsh)を実行
・hdlファイルの読み込み
・testファイルの読み込み
・実行
(各種回路について)
2値素子(Bit) (各種回路について)
CHIP Bit {
IN in, load;
OUT out;
PARTS:
//loadが1の場合のみv1にinを設定
Mux(a=v2,b=in,sel=load,out=v1);
DFF(in=v1,out=out,out=v2);
}
Register (各種回路について)
CHIP Register {
IN in[16], load;
OUT out[16];
PARTS://Bitを16並べるだけ
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[14],load=load,out=out[14]);
Bit(in=in[15],load=load,out=out[15]);
}
メモリ (p44~p46,p51~52)
・任意の長さのワード(レジスタ)を記憶出来るもの。
・レジスタをたくさん積み重ねることで、
RAM(Random Access Memory)を構築できる。
・RAMは物理的に存在する場所に関係なく、同じ時間で、
直接アクセスが可能となるようユニークなアドレスを割り振っている。
RAM8(in=入力,load=上書き有無,address=アドレス,out=出力);
hdl式
(各種回路について)
p45図参照
メモリの実装(p51,52)
nand2tetries/03/aの「RAM8.hdl」と「RAM64.hdl」の実装を行う。
※RAM512以降は、RAM64と同じ為スキップ
・読み込み
addressから対応するRAMを読み込む。out(t) = RAM[address(t)](t)
・書き込み
loadを1に設定でaddressから対応するRAMに、
次のクロック周期で書き込む。 RAM[address(t-1)](t)=in(t-1)
※対象以外のaddressはload=0
■ヒント
1章で作成した「DMux8Way、Mux8Way16」を使用
(各種回路について)
out(t) = RAM[address(t)](t)
If load(t-1) then RAM[address(t-1)](t)=in(t-1)
関数 p51,52参照
RAM8 (各種回路について)
CHIP RAM8 {
IN in[16], load, address[3];
OUT out[16];
PARTS:
// アドレスに対応するLoad値取得
DMux8Way(in=load,sel=address,a=loadA,b=loadB,c=loadC,d=loadD,e=loadE,f=loadF,g=loadG,h=loadH);
Register(in=in,load=loadA,out=outA);
Register(in=in,load=loadB,out=outB);
// 略
Register(in=in,load=loadG,out=outG);
Register(in=in,load=loadH,out=outH);
// アドレスのout値取得
Mux8Way16(a=outA,b=outB,c=outC,d=outD,e=outE,f=outF,g=outG,h=outH,sel=address,out=out);
}
RAM64 (各種回路について)
CHIP RAM64 {
IN in[16], load, address[6];
OUT out[16];
PARTS://3bit単位で分けてRAM8を呼ぶ
DMux8Way(in=load,sel=address[3..5],a=loadA,b=loadB,c=loadC,d=loadD,e=loadE,f=loadF,g=loadG,h=loadH);
RAM8(in=in,load=loadA,address=address[0..2],out=outA);
RAM8(in=in,load=loadB,address=address[0..2],out=outB);
// 略
RAM8(in=in,load=loadG,address=address[0..2],out=outG);
RAM8(in=in,load=loadH,address=address[0..2],out=outH);
// アドレスのout値取得
Mux8Way16(a=outA,b=outB,c=outC,d=outD,e=outE,f=outF,g=outG,h=outH,sel=address[3..5],out=out);
}
RAM8*8のイメージ
[000][000] RAM8A
[001][000] RAM8B
[010][000] RAM8C
[011][000] RAM8D
[100][000] RAM8E
[101][000] RAM8F
[110][000] RAM8G
[111][000] RAM8H
カウンタ (p46,p52~53)
・タイムユニットが進むごとに値が加算される。
out(t)=out(t-1)+c ※cには通常1が用いられる
・一般的なCPUにはプログラムカウンタが含まれ、
次に実行されるプログラム演算のアドレスとして解釈される。
・加算以外に値の設定(load)とクリア(reset)が可能
PC(in=入力,lnc=加算有無,load=書込,reset=初期化,out=出力);
hdl式
(各種回路について)
p45図参照
カウンタの実装(p52~54)
nand2tetries/03/aの「PC.hdl」の実装を行う。
・読み込み
load,inc,resetが0の場合は、out(t)=out(t-1)
・加算
incが1の場合は、out(t)=out(t-1)+1 ※読み込んだ値+1
・書き込み
loadが1の場合は、out(t) = in(t-1) ※前回の値に関わらず入力値を使う
・リセット
resetが1の場合は、out(t)=0 ※前回の値,入力 に関わらず0を使う
上記の処理完了後に値を保存
(各種回路について)
If reset (t-1) then out(t)=0
else if load(t-1) then out(t) = in(t-1)
else if inc(t-1) then out(t) = out(t-1)+1
else out(t) = out(t-1)
関数
P54 図3-5参照
PC (各種回路について)
CHIP PC {
IN in[16],load,inc,reset;
OUT out[16];
PARTS:
Inc16(in=r1,out=v1);
Mux16(a=r1,b=v1,sel=inc,out=v2);// inc
Mux16(a=v2,b=in,sel=load,out=v3);// load
Mux16(a=v3,b[0..15]=false,sel=reset,out=v4); // reset
Register(in=v4,load=true,out=out,out=r1);
}
本日の予定
組み合わせ回路と順序回路(p41)
各種順序回路について(p42~p55)
まとめ
まとめ(p46-p48,p56)
 組み合わせ回路
組み合わせ回路とは、入力値のみで時間に関係なく出力値が直ちに決まる
回路
 順序回路
順序回路とは、ひとつ以上のDFF回路が直接または間接的に組み込まれ、
出力値は、現在のクロック周期から次のクロック周期に移行した、
タイミング変化する。※同じく周期においては変化しない。
 最後に
組み合わせ回路と順序回路を作成してきました。
これで、コンピュータ全体を構築するために必要な回路は全て
出揃ったことになります。
次回は、機械語です。少し、ソフトウェアよりになります。
(まとめ)

More Related Content

What's hot

MikanOSと自作CPUをUSBで接続する
MikanOSと自作CPUをUSBで接続するMikanOSと自作CPUをUSBで接続する
MikanOSと自作CPUをUSBで接続するuchan_nos
 
Javaで作る超簡易x86エミュレータ
Javaで作る超簡易x86エミュレータJavaで作る超簡易x86エミュレータ
Javaで作る超簡易x86エミュレータDaisuke Kamikawa
 
コンピュータシステムの理論と実装 6章 アセンブラ
コンピュータシステムの理論と実装 6章 アセンブラコンピュータシステムの理論と実装 6章 アセンブラ
コンピュータシステムの理論と実装 6章 アセンブラYoko Yama
 
광운대[바람] 3.vhdl test bench
광운대[바람] 3.vhdl test bench광운대[바람] 3.vhdl test bench
광운대[바람] 3.vhdl test benchNAVER D2
 
機械学習と深層学習入門
機械学習と深層学習入門機械学習と深層学習入門
機械学習と深層学習入門Yuta Takahashi
 
30分で分かる!OSの作り方
30分で分かる!OSの作り方30分で分かる!OSの作り方
30分で分かる!OSの作り方uchan_nos
 
Audio Unit Extensions 〜オーディオエフェクトのアプリ間共有〜
Audio Unit Extensions 〜オーディオエフェクトのアプリ間共有〜Audio Unit Extensions 〜オーディオエフェクトのアプリ間共有〜
Audio Unit Extensions 〜オーディオエフェクトのアプリ間共有〜Shuichi Tsutsumi
 
實數表示法與運算
實數表示法與運算實數表示法與運算
實數表示法與運算encoret
 
Register organization, stack
Register organization, stackRegister organization, stack
Register organization, stackAsif Iqbal
 
用 C# 與 .NET 也能打造機器學習模型:你所不知道的 ML.NET 初體驗
用 C# 與 .NET 也能打造機器學習模型:你所不知道的 ML.NET 初體驗用 C# 與 .NET 也能打造機器學習模型:你所不知道的 ML.NET 初體驗
用 C# 與 .NET 也能打造機器學習模型:你所不知道的 ML.NET 初體驗Ko Ko
 
input output Organization
input output Organizationinput output Organization
input output OrganizationAcad
 
用十分鐘 向jserv學習作業系統設計
用十分鐘  向jserv學習作業系統設計用十分鐘  向jserv學習作業系統設計
用十分鐘 向jserv學習作業系統設計鍾誠 陳鍾誠
 
Control unit design
Control unit designControl unit design
Control unit designDhaval Bagal
 
Digital VLSI Design : Combinational Circuit
Digital VLSI Design : Combinational CircuitDigital VLSI Design : Combinational Circuit
Digital VLSI Design : Combinational CircuitUsha Mehta
 
Intro to Hardware Programming with the Arduino Uno
Intro to Hardware Programming with the Arduino UnoIntro to Hardware Programming with the Arduino Uno
Intro to Hardware Programming with the Arduino UnoVui Nguyen
 
FPGA/Reconfigurable computing (HPRC)
FPGA/Reconfigurable computing (HPRC)FPGA/Reconfigurable computing (HPRC)
FPGA/Reconfigurable computing (HPRC)rinnocente
 

What's hot (20)

MikanOSと自作CPUをUSBで接続する
MikanOSと自作CPUをUSBで接続するMikanOSと自作CPUをUSBで接続する
MikanOSと自作CPUをUSBで接続する
 
Javaで作る超簡易x86エミュレータ
Javaで作る超簡易x86エミュレータJavaで作る超簡易x86エミュレータ
Javaで作る超簡易x86エミュレータ
 
コンピュータシステムの理論と実装 6章 アセンブラ
コンピュータシステムの理論と実装 6章 アセンブラコンピュータシステムの理論と実装 6章 アセンブラ
コンピュータシステムの理論と実装 6章 アセンブラ
 
Mips
MipsMips
Mips
 
광운대[바람] 3.vhdl test bench
광운대[바람] 3.vhdl test bench광운대[바람] 3.vhdl test bench
광운대[바람] 3.vhdl test bench
 
機械学習と深層学習入門
機械学習と深層学習入門機械学習と深層学習入門
機械学習と深層学習入門
 
30分で分かる!OSの作り方
30分で分かる!OSの作り方30分で分かる!OSの作り方
30分で分かる!OSの作り方
 
Audio Unit Extensions 〜オーディオエフェクトのアプリ間共有〜
Audio Unit Extensions 〜オーディオエフェクトのアプリ間共有〜Audio Unit Extensions 〜オーディオエフェクトのアプリ間共有〜
Audio Unit Extensions 〜オーディオエフェクトのアプリ間共有〜
 
Read & write
Read & writeRead & write
Read & write
 
E.s unit 6
E.s unit 6E.s unit 6
E.s unit 6
 
實數表示法與運算
實數表示法與運算實數表示法與運算
實數表示法與運算
 
Register organization, stack
Register organization, stackRegister organization, stack
Register organization, stack
 
用 C# 與 .NET 也能打造機器學習模型:你所不知道的 ML.NET 初體驗
用 C# 與 .NET 也能打造機器學習模型:你所不知道的 ML.NET 初體驗用 C# 與 .NET 也能打造機器學習模型:你所不知道的 ML.NET 初體驗
用 C# 與 .NET 也能打造機器學習模型:你所不知道的 ML.NET 初體驗
 
input output Organization
input output Organizationinput output Organization
input output Organization
 
用十分鐘 向jserv學習作業系統設計
用十分鐘  向jserv學習作業系統設計用十分鐘  向jserv學習作業系統設計
用十分鐘 向jserv學習作業系統設計
 
Control unit design
Control unit designControl unit design
Control unit design
 
Digital VLSI Design : Combinational Circuit
Digital VLSI Design : Combinational CircuitDigital VLSI Design : Combinational Circuit
Digital VLSI Design : Combinational Circuit
 
プログラムを高速化する話
プログラムを高速化する話プログラムを高速化する話
プログラムを高速化する話
 
Intro to Hardware Programming with the Arduino Uno
Intro to Hardware Programming with the Arduino UnoIntro to Hardware Programming with the Arduino Uno
Intro to Hardware Programming with the Arduino Uno
 
FPGA/Reconfigurable computing (HPRC)
FPGA/Reconfigurable computing (HPRC)FPGA/Reconfigurable computing (HPRC)
FPGA/Reconfigurable computing (HPRC)
 

コンピュータシステムの理論と実装3