FPGAに再入門しようと思いたちFPGAプログラミング大全Xilinx編第2版を頭からやっていく6日目
時期的にも良いので一人Advent Calendarで25日続ける
FPGAプログラミング大全ではCPUを作る方に行かないので今日からはCPUの作り方と合わせてやっていくことにする
25日終了時の目標
4004等の実CPUの実装
目次
| # | タイトル |
|---|---|
| 01 | ツール導入 |
| 02 | 実機テスト下準備 |
| 03 | 実機テスト |
| 04 | クロック利用 |
| 05 | シミュレーション検証 |
| 06 | TD4 |
| 07 | 未定 |
環境
【実装ボード】 Digilent Artix-7 35T Arty FPGA 評価キット
【OS】 Windows10
【IDE】 Vivado 2022.2
今日のゴール
TD4の命令セットをまとめる
TD4の仕様
CPUの作り方に載っているTD4を実装できるように仕様をまとめる
大枠
- 4bit CPU
- 演算用レジスタは2つ、それぞれ4bitずつ
- フラグはキャリーのみ
- 加算でキャリーが発生した時に1になるのみ
- 入出力が4bit
命令フォーマット
| bit7 | bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 |
|---|
上位4bitをオペコード、下位4bitをイミディエイトデータにする
命令セット
| 命令 | 意味 | オペコード |
|---|---|---|
| ADD A, Im | AレジスタにImを加算 | 0000 |
| ADD B, Im | BレジスタにImを加算 | 0101 |
| MOV A, Im | AレジスタにImを入れる | 0011 |
| MOV B, Im | BレジスタにImを入れる | 0111 |
| MOV A, B | AレジスタにBのデータを入れる | 0001 |
| MOV B, A | BレジスタにAのデータを入れる | 0100 |
| JMP Im | Imアドレスにジャンプ(絶対アドレスのみサポート) | 1111 |
| INC Im | キャリーフラグがない場合のみImアドレスにジャンプ(必ず加算命令の直後のみ実行) | 1110 |
| IN A | 入力ポートからAレジスタに転送 | 0010 |
| IN B | 入力ポートからBレジスタに転送 | 0110 |
| OUT B | Bレジスタのデータを出力ポートに転送 | 1001 |
| OUT Im | データをそのまま出力ポートに転送 | 1011 |
今日はここまで