新たな教材となる「Tang Nano 9K」を使ってLEDマトリクスを制御するオリジナルCPUでバイナリコード入門(4)(1/3 ページ)

オリジナル4ビットCPUを用いてバイナリコードを学ぶ本連載。第4回は、バイナリコーディングを学ぶための新たな教材となる「Tang Nano 9K」とVerilog-HDLコードを使ってLEDマトリクスを制御する。

» 2023年05月25日 07時00分 公開
[今岡通博MONOist]

はじめに

 本連載では当初、もっと早い段階からバイナリコーディング、いわゆる機械語でプログラミングを習得する演習に入る予定でしたが、まだそこまで到達していません。理由は2つあります。1つは、PC上で動作するシミュレーターを使ってバイナリコーディングの演習を行うための解説記事を準備していたのですが、現在このシミュレーターの無償版が入手できなくなっています。これでは、読者の皆さんが簡単に手元で演習できず解説記事としてあまり意味がなくなってしまうのでいったん掲載を見送りました。もう1つの理由は、PC上でのシミュレーターでの演習が終わってから、Arduino上にオリジナル4ビットCPU「DL166」を移植し、それを教材としてバイナリコーディングの演習を考えていたのですが、FPGA上で動作しているDL166がArduino上でも確実に動くかの検証に思いの他手間取ってしまっているからです。

 これらの事情を考慮して、本連載の教材として新たにFPGAの評価ボードである「Tang Nano 9K」を用いることにしました。Tang Nano 9Kを選択したのは、比較的安価であるとともに、統合開発環境(IDE)が使いやすいからです。というわけで、これからしばらくはバイナリコーディングの教材をTang Nano 9Kで作っていく話になり、記事の話題はFPGAやHDLの話が中心になるのでバイナリコーディングのことはほとんど出てきません。バイナリコーディングがお目当ての読者の皆さんには大変申し訳ないのですが、本格的にバイナリコーディングが始まるのは、Tang Nano 9Kで動作する教材が完成してからになります。

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

「Tang Nano 9K」について

 まずはTang Nano 9KがどんなFPGA評価ボードなのかを簡単に触れておきましょう。FPGAの回路を構成する際の論理回路の固まりであるLogical Units(LUT4)の数は8640です。なお、前回記事で使用した「Tang Nano」のLogical Unitsは1152でした。

 例えば、インテルのFPGA「Cyclone IV EP4CE10E22C8N(以下、Cyclone IV)」は6000程度のLogical Unitsが搭載されています。Tang Nano 9Kより少ないですね。「Apple II」や任天堂の「ファミリーコンピュータ」などに採用された8ビットCPU「6502」をCyclone IVに実装したところ、全体リソースの7%を消費していました。このことから、6502クラスのCPUならこのCyclone IVに14個実装してもまだ余りがあるという規模感ですね。また、暗号アルゴリズムであるAES(128ビット)を実装してみたのですが、1つなら余裕で実装できるのですが、2つはちょっと無理というところでしょうか。NIST(米国国立標準技術研究所)の仕様書通り素直に実装した場合の例です。あと、ニューラルネットワークの実装も試してみましたが、本筋からそれ過ぎるのでまたの機会に回します。

 Tang Nano 9Kは表示用のインタフェース(HDMI、RGB screen Interface、SPI screen Interface)が充実しています。せっかくクールなインタフェースぞろいなのですが、今回の作例では登場しないのが残念です。いわゆる「宝の持ち腐れ」とやゆされても仕方ありませんね……。32MビットのSPIフラッシュやTFカードスロットも用意されているのですが、これらも全く使っていません。今回の記事の目的は、FPGAやVerilog HDLに慣れていただくことであり、Tang Nano 9Kの性能を発揮する素晴らしい作例を紹介することではないからです。

 このように評価ボードやFPGA本体に搭載されている周辺回路を使うと、メーカー提供のライブラリのお世話になることが多々あります。そうなると、コーディングしたVerilog-HDLのソースだけを他のプラットフォームに持っていくことが非常に面倒なことになってしまいます。というわけで、記事本編で紹介するソースコードは基本的にはベンダーが提供するIP(知的財産)は使わずに他のプラットフォームでも動作するよう心掛けています。

LEDマトリクスを「Tang Nano 9K」に載せる

 視覚的UIとしてLEDドットマトリクスをTang Nano 9Kに載せることにしました。なぜLEDドットマトリクスにしたかというと、Tang Nano 9Kには超リッチですてきなディスプレイ系のインタフェースがそろっているのですが、バイナリコーディングの教材ということもあり、LEDのドット1個1個の輝きにバイナリを感じてもらいたかったからです。

「Tang Nano 9K」に載せたLEDドットマトリクスが光る様子[クリックで再生]

 今回用意したLEDドットマトリクスは8×8で、LEDが合計で64個搭載されています。本記事で紹介するLEDは赤の単色で、製品の型番は「1088AS」です。ピン配列が同じで色違いのものもあると思いますので、もしそのあたりにこだわりがある方は探してみてください。「結局のところたかが64ピクセルの情報量しかないじゃん」と思う方もいらっしゃると思うのですが、いやいやこれがどうしてバイナリのとりこになった方にとっては、この一見チープでノスタルジック感満載のLEDドットマトリクスに独特のシンパシーを抱くものなのです。

       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.