第9講まで(パイプライン化の前まで)を実装

pp.290ff.

今度は、ROMと同じ要領でRAMもメモリーブロックへ移す。これでRAMは0~63番地まで使えるようになった。ただ、クロックの変更に関する理解が追いつかないため、テキストのVHDLのままシンボル化して配線するにとどめる。

テキストは最後の第10講でパイプライン化まで進めているが、理解が追いつかないのと命令体系ががらりと変わってしまうのとで、もうこのへんでよしておく。

こんなふうに配線した。
f:id:ti-nspire:20210131144346p:plain:w800

モリーはROMが15ビット × 256本、RAMが16ビット × 64本 、合計4864ビットを消費した。
f:id:ti-nspire:20210131144938p:plain:w300

1~361の総和 = 65341 (0b 1111 1111 0011 1101)を求める。

_[1] = ldl(REG0, 0)

_[2] = ldh(REG1, 0) # レジスタ1に1 (増分)をセットする。
_[3] = ldl(REG1, 1)

_[4] = ldh(REG2, 0) # レジスタ2 (足す数の初期値)をクリアする。
_[5] = ldl(REG2, 0)

_[6] = ldh(REG3, 361 >> 8)     # レジスタ3に361 (ループ回数)をセットする。
_[7] = ldl(REG3, 361 & 0x00FF)

_[8] = add(REG2, REG1) # 足す数をインクリメントして、
_[9] = add(REG0, REG2) # それをここまでの総和に加算して、
_[10] = st(REG0, 64) # ここまでの総和をOUTポートに出力して、
_[11] = cmp(REG2, REG3) # 足す数==ループ回数であるなら、
_[12] = je(14) # ループを抜けるが、
_[13] = jmp(8) # そうでなければ加算を繰り返す。
_[14] = hlt()

f:id:ti-nspire:20210131144741j:plain:w500