こんにちは。3章まできました。
[https://www.oreilly.co.jp/books/9784873117126/:embed:cite]
vol.3 いまここ
3章 順序回路
理論
組み合わせ回路
時間に依存しない回路。論理演算や算術演算。
順序回路
時間に依存する回路。一つ以上のDFFが組み込まれている回路。組み合わせ回路が含まれていることもある。
クロック
継続的にマスタクロックが送信する信号。プラットフォームの全ての順序回路に対して送信される。周期。
DFF
D型フリップフロップ
順序回路の基本的要素。
out(t)=in(t-1)
簡単に言えば、クロックが進むまで待機する回路。
1ビットレジスタ
記憶装置。DFFを拡張して情報を格納できる。仕組みはこんな感じ。
[f:id:Kouchannel55:20190113152623p:plain]
load(ロードビット)という値がキモ。周期の前と後で考える。後を今回
、前を前回
ととりあえず呼ぶ。
👇load=false
の場合は、前回の自身の出力をそのまま今回の出力とする。この仕組みは、値をレジスタが記憶していると言っても良い。
[f:id:Kouchannel55:20190113152629p:plain]
👇load=true
の場合は、今回の入力をそのまま今回の出力とする。この仕組みは、値を書き換えると言ってもいい。
[f:id:Kouchannel55:20190113152619p:plain]
wビットレジスタ
通常のコンピュータであれば、1ビットレジスタでは構成されておらず、並列に処理できるwビットレジスタで構成されている。
👇load
はあくまで1ビットであることに注意
[f:id:Kouchannel55:20190113152605p:plain]
メモリ
レジスタの集合体。
並列にwビットレジスタが配置されている。
周期ごとに、
- どのレジスタに対して(
address
) - 読み込みか書き込みか(
load
) - 入力値(
in
)
を入力として与える。
カウンタ
他の順序回路とは少し違うみたい。
この書籍では、
- カウンタを0にするかどうか(
reset
。1の場合、出力を0にする) - 読み込みか書き込みか(
load
。1の場合、前回の出力を今回の出力にする) - 加算するか(
inc
。1の場合、前回の出力に1=00….000001を加算したものを出力にする)
を入力値としている
実装
カウンタ(PC)が難しかった。
2章でじっそうしたものがつかえる
と書いてあったので、ALUが使えるかと思ったが無理だった。
以下、PCの実装。
実装後に他人の実装見てたけど、4~7行ほどが多かった。
ベストアンサー説💯
/**
* A 16-bit counter with load and reset control bits.
* if (reset[t] == 1) out[t+1] = 0
* else if (load[t] == 1) out[t+1] = in[t]
* else if (inc[t] == 1) out[t+1] = out[t] + 1 (integer addition)
* else out[t+1] = out[t]
*/
CHIP PC {
IN in[16],load,inc,reset;
OUT out[16];
PARTS:
// 案2
// inc
Add16(a=dffout, b[0]=inc, out=temp-out1);
Mux4Way16(a=temp-out1, b=false, c=in, d=false, sel[0]=reset, sel[1]=load, out=temp-out2);
Register(in=temp-out2, load=true, out=out, out=dffout);
}