DE0-Nano : Lチカできる2bitCPU

ほんの出来心でDE0-Nanoをメルカリで買った. FPGA初挑戦. 『CPUの創りかた』を読んだことがあったので, これを参考にとりあえずLチカができる小さなCPUを作ってみた.

開発環境

公式のIDEをいれる. IDEなしで開発する方法があればいずれそちらに移行する.

Quartus Prime Lite

Download Intel® Quartus® Prime Software

DE0-Nanoは Cyclone IV であり, Quartus Prime Liteに対応しているのでこれを使う. 他のStandardとかProとかは有料. 私の環境だとLiteではシミュレーションが使えなかった. 書き込みはできるので実機デバッグがんばる.

Archでは quartus-free-quartusAURquartus-free-devinfo-cycloneAUR をいれる1.

yay -S quartus-free-quartus quartus-free-devinfo-cyclone libxcrypt-compat

VSCode等

Quartus Primeはエディタ部分が弱いので 焼くとき以外はVSCodeとかで編集すると楽.

プロジェクト作成 / 書き込み

以下のサイトを参考に, いい感じにやる.

Quartus Prime で FPGA/PLD に書き込むまでの流れ - スクラッチ&スクラップ

DE0-Nanoに載っている石は Cyclone IVEP4CE22F17C6N. あと基板上のLEDのピンなどはユーザーマニュアルにある.

CPU

『CPUの創りかた』を基に, 2bitだけのCPUを作る. 構造などはほとんど同じで, ただ小さくしたようなCPU.

作るCPUの仕様

以下は命令コード表 ( W はレジスタの値 ). 余裕でハンドアセンブルできる規模.

000a  ->  add W,  a   :   Wにaを加算しWに保存
0010  ->  out W       :   Wを出力
0011  ->  in  W       :   入力をWに保存
01Im  ->  out Im      :   Imを出力
10Im  ->  jmp Im      :   Imに飛ぶ
11Im  ->  jnc Im      :   Cフラグが建っていないときImに飛ぶ

実装

xiupos/2bitcpu

実装

クロックは基板上に50MHzの水晶が載っているのでそれを分周. ROMは外部に回路を組んでも良かったが, 所詮2Bなので仮想的にモジュールで再現. 命令デコーダ等コアは動くようにお膳立てしてあげた.

動作

実装した命令を 無理やり 使って動かしてみた.

Lチカ

出力の0を1秒おきに反転するだけ.

out 1     ; 0101
add W, 0  ; 0000
out 0     ; 0100
jmp 0     ; 1000

カウントアップ

0~3を順に出力するだけ.

add W, 1  ; 0001
out W     ; 0010
jnc 0     ; 1100
jmp 3     ; 1011

エコーバック

入力を出力するだけ.

in W      ; 0011
out W     ; 0010
jmp 0     ; 1000
add W, 0  ; 0000

2bit は小さすぎるって, なにもできん.

Footnotes

  1. Intel Quartus Prime - ArchWiki