FPGA評価ボードの万能UI「dpad3」改め「imaoPad」でバイナリ入門を再始動する注目デバイスで組み込み開発をアップグレード(27)(1/2 ページ)

注目デバイスの活用で組み込み開発の幅を広げることが狙いの本連載。今回から、前回紹介したFPGA評価ボードの万能UI「dpad3」改め「imaoPad」を使って、FPGAを最初から学んでみたい方やバイナリプログラミングでコンピュータを基礎から学び直したい方を対象とした記事を展開していく。

» 2025年04月25日 09時00分 公開
[今岡通博MONOist]

はじめに

 今回から、前回紹介したFPGA評価ボードの万能UI「dpad3」を使って、FPGAを最初から学んでみたい方やバイナリプログラミングでコンピュータを基礎から学び直したい方を対象とした記事を展開していきたいと思います。

 とりあえず今回は、バイナリプログラミングから始めます。FPGA入門者向けの記事は今後掲載していく予定ですので今しばらくお待ちください。

 なお、本記事からdpad3を「imaoPad」に改名します。さあ、始めましょう、Go! ちなみにスペイン語ではVamosです。ラテン系のノリで頑張っていきましょう。

⇒連載「注目デバイスで組み込み開発をアップグレード」のバックナンバー

オリジナル4ビットCPU「DL166」を実装する

 今回はimaoPadにオリジナルCPU「DL166」を実装して、imaoPadの使い方について練習していきたいと思います。DL166については連載「オリジナルCPUでバイナリコード入門」を参照してください。

⇒連載「オリジナルCPUでバイナリコード入門」バックナンバー

 ここからは、imaoPadの操作に必要な前提知識としてDL166のアーキテクチャをおさらいしておきます。バイナリプログラミングにはレジスタ構成と命令セットの理解が必須なので、以下に最低限のことだけお伝えしておきます。

レジスタ構成

 表1はDL166のレジスタ構成を示しています。

sss/ddd レジスタ名 記載
000 R0 アキュムレータ
001 R1 汎用レジスタ
010 R2 汎用レジスタ
011 R3 汎用レジスタ
100 R4 汎用レジスタ
101 R5 入力ポート
110 R6 出力ポート
111 R7 プログラムカウンタ(PC)
表1 「DL166」のレジスタセット(4ビット長)

 詳しくは連載「オリジナルCPUでバイナリコード入門」を参考にしてほしいのですが、各レジスタのビット長は4ビットであり、それが4ビットCPUといわれるゆえんです。

命令セット

 表2はDL166の命令セットを示しています。

バイナリ ニーモニック 記載
01-000-sss ADD (sss) acc=acc+(sss)
01-001-sss OR (sss) acc=acc or (sss)
01-010-sss AND (sss) acc = acc & (sss)
01-011-sss XOR (sss) acc = acc ^ (sss)
01-100-sss INC (sss) (sss)=(sss)+1
01-101-sss NOT (sss) (sss)=^(sss)
01-110-sss DROTATE (sss) regs[sss]=regs[sss]>>1+(regs[sss]<<3 & 4'b1000)
01-111-sss UROTATE (sss) regs[sss]=regs[sss]<<1+(regs[sss]>>3 & 4'b0001)
10-00-#### JNC #### if (C==0) PC=#### else PC=PC+1
10-01-#### JMP #### PC = ####
10-10-#### MVI #### acc=####
00-ddd-sss MOV (ddd),(sss) (ddd)=(sss)
表2 「DL166」の命令セット(8ビット長)

 命令セットは8ビット長になっていますが、レジスタ長が4ビットであれば4ビットCPUなのです。命令のビット長はCPUの呼び方には関係ないのですね。ここで押さえておきたいのは命令長が固定であることです。20世紀には可変長の命令セットがありました。例えば、皆さんが大好きであろうZ80などがそうですね。ですが、それ以降RISCアーキテクチャが台頭すると固定長の命令セットが多数派になりました。

 DROATEとUROTATEですが、連載「オリジナルCPUでバイナリコード入門」の中ではRROTATEとLROTATEと呼んでいました。DROATE=RROTATEとUROTATE=LROTATEの動作については連載記事を参照してください。

 これは、ビットが右側に向いて巡廻するのでRightの頭文字を頭につけてRROTATEとし、LROTATEも左側にビットが巡廻するので同様に命名しました。しかしこれはレジスタのビット列を表示するLEDの配列などによっては、命令セットの名前通りに動作しないことがあります。

 ですので、今回からはこれに代わりDROTATEとUROTATEに改名しました。DROTATEはビットを下位ビットに向けて巡廻するので、DownのDを頭につけてDROTATEとしました。ULOTATEは上位ビットに向けてビットが巡廻するので、UpのUを頭につけてUROTATEとしています。

プロジェクトの入手と書き込み

 今回imaoPadにインストールするプロジェクトは、以下のリポジトリから入手してください。

⇒imaoPadにインストールするプロジェクトがあるGitHubのリポジトリはこちら

 まずこのリポジトリからプロジェクト(フォルダ)ごとローカルのPCにダウンロードします。

 imaoPadに用いているFPGA評価ボードである「Tang Nano 9K」に搭載されているFPGAの製造元であるGOWIN SemiconductorのIDE(統合開発環境)を使ってコンパイルした後、プログラミングツールを用いてFPGAに書き込みます。詳細は連載「オリジナルCPUでバイナリコード入門」を参照してください。

 プログラミングツールで書き込む際、標準ではFPGAのSRAM、いわゆる揮発性メモリに書き込む設定になっています。この場合、imaoPadに刺さっているUSBケーブルを抜くと書き込んだ内容が消えてしまします。そこで「Access Mode」を「Embedded Flash Mode」に変更して書き込みます。これでFPGA内部の不揮発性メモリ側にロジックが保存されるので、電源を抜いても内容が消えることはありません。詳しくは先述したGOWIN SemiconductorのIDEのマニュアル(IDEのインストール時にダウンロードされます)を参照してください。

       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.