ズッキーニの味噌煮込みBlog版

コンピュータのこと、食べ物のこと、なんでもないこと、とんでもないこと。

FPGA遊びはひと休み

2016年07月24日 11時26分05秒 | FPGA

残念と言えば残念なことだが、仕事があるのはありがたいことだ。

いただいた新規開発の案件で、頭が忙しくなってきた。いま関わっている仕事の関連なんだが、個人的には今回の方が肌に合う。

どれくらいかかるかわからないんだが、とにかくいまは本業に全力集中としたい。ときどきチャラっと書くかも知れないが。(^^)

 


FPGAにデータを送る準備をする

2016年06月25日 15時00分13秒 | 写落ッ子Jr

本業を言い訳にするつもりはないんだが、趣味に没頭するには落ち着いてものを考えるまとまった時間が必要。

週末には買い物やらなにやらで駆り出されることも多いのでますます時間が限られるが今日に限って嫁さんがひとりでプラプラ買い物をしてきたいという。買い物自体はこちらの気分転換にもなるのでいつもは一緒に出かけるんだが、今日はありがたくコテを温めた。

FPGAのスタックマシンにデータを送り込むのはArduinoに任せようと思っているが、コンパイラができる前でも簡単な実験ができるようにDIPスイッチを基板に乗せた。できるだけシンプルに進めるためにデータはばを8ビットで我慢したこともあって、秋月から取り寄せた10芯のフラットケーブルは大変使い勝手がいい。

さて、ちょっと遊ぶかな。(^^)


FPGAはちょっとお休み

2016年06月19日 15時04分33秒 | FPGA

週末にかけて本業が慌ただしくなって、いまも対応中。落ち着いてFPGAと遊べそうにない。

予定ではArduinoに仮実装するFORTHコンパイラのオブジェクト(==ディクショナリ)構造を楽しく考えるはずだったんだけどね。^^;

もちろん、こういう「お戯れ」ができるのも本業あればこそ。頑張って収めなきゃ。


FPGAのスタックマシンに強力な援軍登場か

2016年06月11日 10時21分31秒 | FPGA

組み込み機器の開発にコンサルとして参加させていただいているのはアタシの本業のひとつ。そのクライアントからWi-Fi機能付きの新製品開発について調査依頼が入った。

我が国には技適というものがあり、これを通っていない対象機器は法律上使ってはいけないことになっている。通すには人もお金もかかりそうなので、「技適通ってます」という製品を使うのが大人の対応というものだ。クライアントからのアドバイスもあり、ESP-WROOM-02なるモジュールを試してみることにした。リンク先は秋月電子通商だが、スイッチサイエンスほか数社から発売されている。秋月のこの製品は同社お得意のDIP化基板スタイルで使いやすく、価格も安い。

このモジュールは無手順シリアル通信(I2Cなどほかの通信規格も可能らしいが試していない)を使いATコマンド(懐かしい)で制御するようになっている。そこで使い慣れたArduinoからシリアルでつないで制御してやろうと目論んだ。Arduinoならシールド基板にまとめた方がスマートだよねと、基板や延長用ピンソケットも取り寄せた。ここまではしごく順当だった。

ところが調べていくうちに、このモジュールがArduino互換機になり得ることがわかってきた。Arduino-IDEで開発したスケッチを書き込んでやると、そのまま実行してくれるらしい。つまりWi-Fiモジュール付きのArduino互換機になるのだ。その代わりスケッチがシステムを完全に上書きしてしまうようでATコマンドは使えなくなるというが、Arduinoとしてプログラミングできるならいらんわ、そんなもん(強気)。

そこで方針変更して写真のような実験機を組み立てた。小型のブレッドボードの上にWi-Fiモジュールと、それと通信するためのUSB<-->シリアル変換基板(これも秋月電子)、それにプルアップ、プルダウン用の若干の抵抗とモード変更ならびにリセットのためのタクトスイッチを乗せてある。Arduino-IDEで開発したスケッチをこのWi-Fiモジュールに書き込むにはそれなりの準備とステップが必要なんだが、それは興味があればGoogle先生に聞いてほしい。念のために言っておくが、明らかに間違ったことを書いていたり、逆に自明なこととして肝心なことを書いていない情報もままある。こうしてできた例がここにもあるので、うまく動かなかったら情報もとより自分の勉強不足と若干の不運を嘆くがいいぞ。うにゅ。(^^)

さらに珍しくお節介をすると、書き込み時のモード切り替えを忘れないこと。Wi-Fiモジュールに与える3V3の電源は少なくとも300mA以上の容量を持っていること。電源ラインに0.1μF程度のパスコンを入れておくこと。あとはふだんの行いに気をつけておくこと。もちろんこれは冗談だ。

いまこの実験機の上でArduino-IDE上で開発した割り込み型のLチカアプリが動いている。割り込み周りはCPUがUNOなどとは違うので、独自の仕組みを組み込む必要がある。そういうところは面倒だが、UNOの8bitと比べてこのWi-FiモジュールのCPUは32bitだという。いつも気になるRAMエリアはUNOが2KBほどなのに比べて50KBも使える。もちろんコードエリアも数百KBという広大さだ。Arduinoでの開発で苦労していた人たちは、気絶しないように注意しようね。アタシも初めて見たときはめまいがした。^^;

そんなことで、Arduinoにコンパイラを仕込んでFPGAスタックマシンを制御しようと思っていたものを、このWi-Fiモジュールを使うことに決めた。メモリ空間が広いしWi-Fiも使えるしスケッチレベルでArduino互換機だ。どれもスタックマシンとは関係ないような気がするが、気にしないことにする。あぁそうだよ、単なる新しい物好きだよ。

I/Oピン数が少し少ないので、8bitパラレルでスタックマシンにデータを送り込むところは再検討かも知れないなぁ。それはそれでまた、楽しい。(^^)

 


FPGAのスタックマシンはArduinoとつながるか

2016年06月04日 11時09分55秒 | FPGA

いつもの週末が来た。そらま来るわな、フツー。(^^)

目が覚めてからずっと、このFORTHマシンのことをずっと考えていた。これは週末恒例だ。アタシはいつでも高齢だ。

\(・_\)ソレハ(/_・)/オイトイテ

既に書いているが、最終的な形態はMAX10にAltera提供の汎用CPUコアNiosⅡ/e(無償版)をコンフィグレーションして、あわよくばその機能のひとつとしてスタックマシンを組み込んでしまおうという目論見だ。つまりコンパイラを実装する汎用CPUがスタック操作命令群を持った状態。これが理想であり、最終形態。

しかしFPGA入門者にはNiosⅡのコンフィグだけでも荷が重い(単なる苦手意識なんだろうが^^;)。それに、FPGAについてまだいろいろ試してみたいことがあるから、そっちに時間をかけたい。そこで当初ちょっと考えた、「ArduinoをNiosⅡの代わりに使う」という企みが鎌首をもたげる。

構想を練ったりアイデアを試してみたり、またオブジェクトの構造を考えるのにArduinoはお手軽だ。デジタルI/Oポートがたくさんあるので、8bitデータにハンドシェーク用2bitで合計10bitは楽に取れる。だからArduinoでコンパイルをやってFORTHのオブジェクトコード(Threadedコードのことだ(ならそう書けよ(うるせーよ)))をMAX10のスタックマシンとハンドシェークをやりながら送り込んでやるというのはできそうだ。

一般的なThreadedコードはFORTHディクショナリの実メモリ上のアドレスを指しているんだが、MAX10の方はハードウェアなので「実メモリ上のアドレス」という概念が馴染まない。配列のインデクシングがそれに変わるので、オブジェクトが一段抽象的になる。この辺りも含めて、ちょびっと構想を練ってみたい。

------- *

ここで言っている「ハンドシェークの2bit」というのは、MAX10からArduinoに「いまデータ送っていいっすよ」という1bitと、ArduinoからMAX10に「データの用意ができたから読んでね」という1bitのことだ。

つまりArduinoはMAX10からの送信可信号を受けてデータをデジタルポートにセットし、MAX10に受信可信号を送るという仕組み。MAX10にシリアル通信機能を実装すればいいんだが、せっかく使い慣れたArduinoを持ち出してきたのでこの方が楽だからね。


FPGAでチャタリングを退治する

2016年05月29日 09時01分07秒 | FPGA

一週間のご無沙汰でした、的な。古すぎるか。^^;

メインの仕事であるクライアント企業の親方が無茶振りしてくれたので、頭がそっちでいっぱいになっている。とはいえ、ちょっと先のための勉強を放り出すほどアホではない。頑張って進めていくからね。

CQムックの付録基板FBボードに書き込むためのJBボードは、Ubuntuではjtagサーバが認識してくれない(2016/05/28現在)ので、悟空というAltera USB Blaser互換製品を導入したことは前回書いた。純正品の1/20ほどの価格にもかかわらず、しっかりと動いてくれてありがたい。自分で手ハンダしたJBボードが使えないのは残念だが、VMWare Fusion上のWindows10ではあまりにも遅すぎてストレスが溜まる。JBボードはFBボードに重ねるようにして使うのでFBボードのタクトスイッチが押しにくかったんだが、悟空だとフラットケーブルでつながるので楽になった。怪我の功名みたいなもんか。^^;

さて取りあえずの開発環境が整ったので、いろいろ実験してみたい。まずは「タクトスイッチを押すたびにデータスタックポインタがひとつ上がる」という、スタックマシンとしては基本中の基本をやってみようと思った。コードは書けたんだが、どうも動作が不安定だ。タクトスイッチを一度押しただけなのにスタックポインタが2つも3つも上がる。しかも不安定だ。

あぁこりゃ、チャタリングだよねとすぐにわかった。最近はあまりチャタリングが問題になるような回路を組んでいなかったので、面白いネタができたのが嬉しい。

チャタリングの性質とその対策については、「回路図で学べるFPGA入門」が役に立った。サブタイトルが「回路図は読める人のためのHDLガイド」となっていて若干敷居が高そうだし価格も価格。少し躊躇したが思い切って買っておいてよかった。この本はテーマごとに回路図(必要ならタイミングチャートなどの図)、VHDL記述、Verilog HDL記述が解説されていて、とてもていねいに書かれている。これでじっくり腰を据えて勉強して、チャタリングの性質を大まかに理解することができた。

Verilog HDLで非常に簡単な実装をやってみたのだが、思いのほかきれいに効いてくれた。やはり理屈を理解して書くコードはちゃんと動く(当たり前だ)。

チャタリング問題が解決し、スタックマシンもこちらが考えたとおりに動いていることがわかった。もっともスタックマシンと言ったってメモリ上の配列とインデスクでできているのだから、ちゃんと動いて当たり前だが。そこでFORTHの仮想コードを書いて、スタックマシンが想定どおりに動いていることを確認してみた。

3 DUP +

これまた至極当然だが、我が超マシンはスタックに6という値を積んだ。背筋がぞくっとした。これぞ長年の夢、汎用CPUのソフトでシミュレートするのではなく、ハードウェアで実現したスタックマシンだ。それがいま動いたんだよおっかさん。

もちろんまだ実験段階だ。ちゃんとした実装にはなっていない。これからちょっとずつ、実装を進めていくつもりだ。

また来週。(^^)


FPGAの開発環境を整備した(悟空+Quatus Prime on Ubuntu on VMWare Fusion on MacOSⅩ)

2016年05月21日 14時33分28秒 | FPGA

まず残念なお知らせだけど、CQ出版社の「FPGA電子工作スーパーキット」に付属している基板MAX10-JBは、タイトルの環境下ではMAX10-FBにコンフィグレーション用データを書き込むことができない(2016/05/21現在)。

基板が付属しているムックではWindows上での動作についてしか触れられていないので、Ubuntuで動かないからといってブーたれるつもりはない。せっかくのセットだし自分で部品を取り寄せてハンダ付けした基板なのだから、使いたいのは山々だ。Windows10の上ではまったく問題なく動いていたのだから、なおのことだ。悪いのはアタシだ。あぁそうだよ、アタシだよ。

------- *

そもそも独立したWindows機を持っていない。いや正確に言えば半分シャレで買ったスティックコンピュータがあるにはあるんだが、ディスク容量が小さすぎてQuartus Primeを入れられない。そこでしかたなくMacOSⅩに入れてあるVMWare Fusionに入れてある(ぉぃ)Windows10を使うことにした。さすがに仮想環境の霊験あらたかなりて、ちゃんと動いた。ここで満足していれば良かったのだ。繰り返すが悪いのはアタシだよ。あぁそうだよ、アタシだよ。

重いってか遅いってか、まったくストレスがポイント10倍付きで溜まっていく。いくら仮想環境下とは言え、これではたまらん。情報を探ったらUbuntuでの動作が確認できたので、試してみることにした。Windows10とおなじくVMWare FusionにOSを新規でインストールして、Quartus Primeのインストールまでは難なく進んだ。いやもぉ早いのなんのって。4GB食わせたWindows10とは比較したくもないほどOS自体もアプリも小気味よく立ち上がってくる。たった1GBしか割り当てていないのに。おかげで仮想環境を動かしていても母艦のiMacの動作が引っ張られることもなく、実に快適だ。

ここまでは良かったんだが、困ったことに書き込みができない。FPGAへのコンフィグレーションができないのだ。ダメじゃん。orz

------- *

ほとんど丸一日取っ組み合いをやったが、どうにもいうことを聞いてくれない。さすがのGoogle先生もこの出たばかりのムックについては情報の持ち合わせがないらしい。しかしAltera純正のダウンロードケーブルUSB Blasterは20K円もする。とてもとても。だが心配ない。世の中には互換機というものがある。Amazonで1,200円で売っている悟空なる互換ケーブルでQuartus PrimeからMAX10へのコンフィグレーションに成功したという情報も見つけた(これも役に立った)

さっそく取り寄せて今朝から試しているが、ありがたいことになんのトラブルもなくコンフィグレーションに成功している。参考にしたサイトの情報では /etc/udev/rules.d/に拡張子 .rules で権限設定のルールを記述するようにとなっているが、これがアタシの環境ではどうも効いていないようだ。#udevadm --control reload-rules が効いていないのかと思ったが、アプリを起動し直してもOSをリブートしても変わらない。ここで立ち往生は情けないとさらに調べていったら、./altera_lite/16.0/quartus/bin/jtgconfig という妖しの呪文を見つけた。

起動してみるとjtagチェーンが切れているとか言われたが、登録されているデバイスをいったん --remove して再接続したらリンクが設定されたようだ。もしかしたら16.0以降にこのあたりの仕組みが少し変わったのかも知れない。とにかくこれで、目出度く書き込みができるようになった。開発環境も快適だ。文句があるとしたらMAX10-JBならばUSBバスパワーでMAX10-FB(MAX10が乗った本体のボード)にも電源を供給してくれるのに、悟空はさすがにそこまではしてくれないことくらい。これはあとで手持ち部品を使って簡単な電源回路でも作ることにしよう。

------- *[後記]

何度か実験してみたが、やはり /etc/udev/rulrs.d/ のファイルは必要みたいだ。rules.d下に情報どおり 51-usbblaster.rules というファイルを置いている。内容は下記のとおり。

---

ATTR{idVendor}=="09fb", ATTR{idProduct}=="6001", MODE="666"
ATTRS{idVendor}=="09fb", ATTRS{idProduct}="6001", MODE="666"

---

情報元によってATTRだったりATTRSだったりするので、両方書いてある。^^;

 


FPGAのワークベンチ写真

2016年05月15日 19時19分45秒 | FPGA

やってみて覚える派としては、とにかく動くものが必要。ありがたいことに「FPGA電子工作スーパーキット」という基板付きのムックがCQ出版から出ているので、これを使うことにした。

実はこの付録の基板だけではなにもできなくて、MAX10が乗ったFB基板には各種コネクタ(ピンヘッダ、ソケット)が必要だし、書き込み(コンフィグレーション)を行うJB基板は文字どおり「基板」であって部品は実装されていない。これらについては「マルツさんの紹介ページ」を参照してもらいたい。アタシもこの追加部品セットを購入した。ページの先頭は完成基板の紹介なので、めげずに下までスクロールしていこう。でもハンダ付けに自信がないか手間を省きたい人は、素直に完成基板を買った方がいい。(^^)

アタシは仕事がらいろんな部品を持っているので、外付けのボードなんか用意したぐらいにして楽しんでいる。写真はその一例。

ムックのサンプルにLチカがあったが、基板上のフルカラーLEDが七色に点滅するというだけでは面白くない。Verilog HDLの勉強のつもりで8桁のLEDを制御できるようにしてみた。オリジナルにちょっと手を加えただけだが、この程度だとまず失敗はない上に意外と学べることもある。

たとえばフルカラーLEDは3bitで制御しているんだが、外付けの8桁LEDは8bit制御。ここに持っていくためにトーシローのおっかなびっくりをやる。まずはフルカラーLEDとおなじ3bitの情報を引き出して3個だけの点滅をやってみた。これで新しいwireの追加やら、それを外に持っていくための接続の仕組みを復習。やはり本に書いてあるとおりにやっただけでは実感が湧かない。自分で考えたものを追加することで、あぁ、なるほど(ぽん)と腹に落ちるというものだ。

つぎはこれを8bitに拡張。ここで専用のreg変数を定義してもいいんだが、ふと思い立ってオリジナルがフルカラーLEDを点灯させるために定義した[2:0]のreg変数を[7:0]に拡張してみた。フルカラーLEDの方は最下位から3bitを使えばいいので、ひとつの8bitのreg変数が両方で共有できることになる。

この辺り、実際に基板上でやっていたら配線がやり直しになる。けっこうな手間がかかるのでめげてしまうが、FPGAならばVerilog HDLのソースを書き換えるだけだ。それでいてMAX10の内部では新しい回路ができていくというのだから嬉しい。なんだか不思議な感覚だが、これがFPGAというものなのだろう。

ところで写真の左上端に小さな青い部品が見えると思う。これはコンデンサだ。Lチカをやっているうちに、こいつの周期をうんと短くしてやれば音を出せるじゃないかと思いついた(若いころと違って思いつくのが遅い^^;)。さっそくVerilog HDLにサウンド用の記述を追加し、周波数計で期待どおりの周波数がでていることを確認した。

なんだか楽しくなってきたぞ。来週はいよいよ、この子にスタックの論理を教えるのだ。

------- *同日追記

それにしてもどうにもこのWindowsの汚いフォントには慣れない。

なんとかならんかとGoogle検索エンジンをぶん回していたらVirtualBoxにUbuntuを入れてAlteraの開発環境Quartus Primeを使っているという人の記事を見つけた。VirtualBoxを入れなくても、アタシのiMacにはVMWare Fusionがある。試しにUbuntuデスクトップをインストールしてみているが、フォントが実に美しく(Windows10比)て嬉しくなった。

これでQuartus Primeが快適に動いてくれたらいいなぁ。


FPGA三昧の連休が終わる(ちょっと追加)

2016年05月13日 18時33分24秒 | FPGA

週に一度の専門学校の授業以外はほとんど自宅で仕事をしている。時間を効率的に使えるので週末とか連休とか関係ないと言えば、ない。

とはいえ世間さまが大型連休と浮かれており、どこからも連絡が来なくなるこの時期はなにかを集中的にやっつける好機だ。今回はおかげでFPGAの勉強を死ぬほどやれた。MAX10評価ボードの半完成品と基板だけの書き込み器に部品を実装し、FPGA版Lチカはさほどの苦労もなく成功した。これからいよいよスタックマシンの構築に向けてさらにお勉強。

もっとも連休は今日で終わりなので、週末にボチボチ進めることにする。断片的にだが、チョロリと動いているんだけどね。^^;

------- *

たいして分量がないので、ここに追加しちゃう。

将来の飯の種になる可能性はうんと高いが、いまのところFPGAはアタシの趣味の世界。平日はコンサルで開発に参加させてもらっている企業の仕事が8割で、臨時講師を務める専門学校の授業とその準備が2割。週末の土日だけは自分の時間としてFPGAに取り組んでいる。平日でも夜は晩酌をチビチビやりながら参考書を読んだりはするけどね。

XilinxにしてもAlteraにしても、開発環境にはロジックシミュレータを用意している。ロジアナ相当の機能を開発対象のFPGAに組み込んでしまうというすごい仕組みもあるんだが、ここは趣味の楽しみ方。ディップスイッチやLEDをユニバーサル基板にポチポチとハンダ付けして楽しみたい。LEDはソース点灯だとMAX10に負担をかけそうだから電源を別個にしてシンクドライブにしようとか、入力デバイスとして接続するディップスイッチはプルアップ抵抗が必要かと思ったらMAX10の内部にプルアップ抵抗を持っていることがわかって喜んだり。

FPGAはこのごろ出てきたデバイスじゃないが、最初は使うのが大変だったに違いない。情報が少なかったり、開発環境が整備されていなかったり。別にその辺が整備されるのを待っていたわけではないが、良い時期に始めたような気がする。

楽しまなくちゃね。(^^)


FPGAでFORTHマシンを楽しみながら作る(少し具体的な)方法

2016年05月04日 08時34分46秒 | FPGA

最終的な姿として描いているのは、1個のFPGAの中にコンパイラと実行時インタプリタとスタックマシンが収まったものだ。ソースコードは外部からシリアル通信などで持ち込む。

コンパイラを論理回路で構成するのは、どう考えても無理筋だ。不定長の文字列を処理するのでね。不可能とまでは言わないが、「登山道の入り口で頂上を見上げてそのまま帰ってくる」ことになるだろう。

そこで、Alteraが用意してくれているNiosⅡというCPUコアを使うつもりだ。これはFPGAの中に実装される汎用のCPUで、これを動かすソフトウェアはC言語で書ける。FORTHの特徴のひとつである実行時インタプリタも、こいつ(NiosⅡ + C言語)で書いてしまおう。少なくとも初期段階では。

そして実行時インタプリタを支えるデータスタック、パラメータスタック、それらを操作するプリミティブなワード群は論理回路で構築する。全体をひとつのCPUと見立てると、これがマイクロコードみたいなものかも知れない。ちょっと違うかも知れない。どっちだよ。

こんなふうに分けたのは、まだFPGAを自在に操ることができないし実力のほども把握していないからだ。だから無理をしない。現時点でできそうだと当たりを付けたことをまずやってみる。そのうちだんだんとFPGAというものがわかってくるだろうから(もともとそのために始めたんだぞ。忘れるなよ> アタシ)、この役割分担は変えていってもいい。

------- *

FORTHコンパイラは何度か書いたが、このところはとんとご無沙汰。感覚を取り戻すためにArduinoの上で動くTinyFORTHを書いている。ディクショナリの構造を試してみるのに役立ちそうだと思っている。FPGA側にスタックマシンだけでも実装できれば、このTinyFORTHからそれを呼び出してみることができると思う。

FORTHという言語を知らない人には、何が何だかさっぱりな話だと思う。もともと説明のために書いているのではなく、自分自身の備忘録のつもりなのでお許しを。わからなければさっさと諦めていただくのがお互いの身のためだ。なんなんだよと、我ながら笑ってしまう。^^;

FPGAの方はCQ出版のムックに付いていた基板に、取り寄せた部品を実装し終えたところ。一応の動作確認は済ませており、開発環境一式はインストールした。MacOSだといいのに、こういうものはとにかくWindowsだ。フォントが汚くて(一体どういう工夫をすればフォントをこんなに汚く描画できるのだ)目に良くない。

ブツブツ文句を言いながら、連休はあと残り5日ほど。本も読みたいので、時間配分を考えなくちゃ。充実した5月の連休だ。


FPGAでFORTHマシンを楽しみながら作る方法

2016年04月28日 18時08分38秒 | FPGA

まだやる気が失われていないことを天に感謝しよう。珍しいことだ。

もともとの話はこうだ。少し生活に余裕ができた安心感と、そろそろ始めとかんとつぎの大波(開発屋さん的にだね)に乗れないかも知れないという不安感があって、FPGAの勉強を始めようと思い立った。こう見えても(見えないだろうが)ハードもソフトもひととおりの知識は持っている組み込み系。言っておくが「ひととおり」は謙遜だ。

やるからには、楽しくやれるネタがほしい。あるいは願望でも欲望でもいいが、なにかそういうエネルギーを持続させられるものでもいい。そこで思いついたのがFORTHという言語だ。

この言語には思い入れがたっぷりあるんだが、それはどこかに最近書いたような気がする。それはともかく、この言語はデータの受け渡しにスタックというデータ構造を使う。しかしスタックを効率的に扱える命令群を持ったCPUはこの世に存在しない。そこで仕方なく、そういうCPUをソフトでシミュレートする。まぁおおかた想像が付くように配列とインデクスを使って実現するわけだが、あまり効率はよろしくない。FORTHプログラマの多くが一度は望むことだが、CPUがFORTHが要求するスタック操作をネイティブで実行してくれたらどんなに気持ちがいいか。

もちろんFORTH「で」書くこともFORTH「を」書くことも経験してきたアタシも、そう思っていた。しかしよほどの大金持ちの道楽でもなければ、CPUを自作することなんてできようはずはない。数年前まではね。でもいまは違う。FPGAという、何度でも自由に書き換え可能なロジックデバイスがある。価格が下がってきて、評価用ボードがついに1万円を切った。すべてではなくとも、スタック操作系のプリミティブワードだけでも実行できるスタックマシンを作ることができたら、どれだけ面白いか。わかるか?わからんか?そうだよな。でも面白いんだこれは。絶対楽しいんだ。

FPGAでこれをやったら楽しい上に、FPGAそのものの勉強にもなる。長年の夢を叶えて、しかもつぎの飯の種を手にすることにもなる。スゴいじゃないか。

------- *

さて、どうやって作るかだ(え?)。

仕事ならばお客さんと打ち合わせをしながら仕様を詰めていくんだが、ここはアタシがお客さんでもある。楽しみながら自由にやっていい。先に書いたがスタックを効率的に扱えるCPUなんて秋月にもマルツにもaitendoにも取り扱いがない。前例がないんだから、試行錯誤で行くしかない。他人からみたら行き当たりばったりかも知れないが、その過程自体が楽しいんだ。だって自分で設計したFORTHマシンだぞ(はいはい、わかったよ)。

どんな仕様にすればいいのかわからないときは、まず作ってみるのが一番だ。作ってみて動かしながら、こうすればいい、ああすれば失敗だ、というふうに学んでいく。最初から全体を作り込んでしまうのは大変だから、FORTHオブジェクトを生成するコンパイラの部分は普通のCPU + C言語でやっちゃう。実行時インタプリタもまずは同様に。そこから呼び出されるプリミティブワードの処理をFPGAで記述することにしよう。これなら目的がはっきりしているので設計がしやすいし、規模が小さいから作り直しが何度でもできる。

最終的な目標はFPGAの中に、コンパイラと実行時インタプリタを駆動する汎用CPUと、スタック操作に長けた専用CPUを作り込むことだ。つい先週からFPGAの勉強を始めたトーシロにとって、これがどれだけ大それたコトかは容易に想像が付くだろう。そこでステップを踏むことにする。時間はかかるが、それだけ長く楽しめる。ぐふ。

Arduinoで、ちっちゃなFORTHを作る。ソースコードはiMacの開発環境からシリアルで流し込む。必要最小限の機能があればいい。ここはすべてが純粋にソフトの世界だ。つぎに、ソフトで実装されているスタック操作ワードを実行する機能をFPGAに作り込む。ArduinoからFPGA内のスタック操作機能を呼び出す方法は何か考える。実行速度はまだ考えなくていい。これでいろいろ使ってみて、使用感を確認して細かな仕様を練り直していく。その後でいよいよ、Arduinoよりはずっと能力が高いであろう汎用CPUをFPGAに作り込む。既に動いているスタックマシンとおなじFPGAの中にだ。

------- *

まぁそんなこんな。(^^)

------- *(本日追記)

FORTHコンパイラの入り口のところ。ソーステキストからワードを切り出すところを書いてみたが、思わぬはまりようで時間を食った。

Arduino IDE のバグなんだろうか、typedef enum{~}<name>;がコンパイルエラーになる。ヘッダファイルとして別にすると解決したという情報を見つけたのでやってみたが、このケースでは解決しないようだ。なんなんだかわからないが、まぁいいや。^^;

今夜イッパイ飲りながらオブジェクトコードのフォーマットでも考えることにしよう。コンパイラを書くことが目的ではないんだが、これはこれで楽しい。


FPGAでFORTHマシンを作る(かどうかできるかどうかわからんので単なる希望)

2016年04月26日 12時29分47秒 | FPGA

決してメジャーではないがそれなりに使われている、FORTHという言語がある。

関数(FORTHではワードと称する)の引数と戻り値がともにスタックを経由する。またコンパイラは中間コード(threadedコード)を生成し、インタプリタがこれを実行するという構造。そのため文法も普通じゃない(笑)という強烈な個性を持つ。

この系統のSTOICというコンパイラを開発した人が「EPSONが私のこのSTOICを開発に使ってくれたんじゃないかと想像している」と書いていたり、実はアタシはEPSONに在籍していたことがありプリンタのファームウェアの開発現場で端末画面にFIFTHというおなじくFORTH系のコンパイラが使われていたことを知っていたり、まぁアタシにとってはいろいろとご縁のある言語なんだ。

しかしなんといってもアタシをこのクセの強い言語に結び付けたのは、この世界での最初の恩師、三浦高志さんだ。アタシに8bitマイコンプログラミングの手ほどきをしてくれた三浦さんがその教材に選んだのが、I/O誌に掲載されたTinyFORTHのアセンブルリストだったからだ。ご自身で何枚かのフローチャートを書いてくださり、「ね、ここでEnterを押すといままで入力された文字列の先頭アドレスをDEレジスタに持ってディクショナリ、辞書ね、ここをサーチするわけ。で、見つけたらその先頭番地を持ってこっちの実行時インタプリタに飛ぶのさ」とていねいに教えられた。いまその場面を思い出してもドキドキワクワクしてくるが、おかげでアタシはZ-80のアセンブラよりむしろ早く、FORTHというコンパイラを覚えたわけだ。

もちろんそのときそう思ったわけではないが、その後のプログラマ人生の中で何度か自分自身でFORTHコンパイラを開発するたびに「これをそのまま実行するFORTHエンジンがあったらなぁ、ほしいなぁ」と思ったものだ。FORTHという言語の核は「スタックアーキテクチャのFORTHというCPU」であり、それをソフト的にシミュレートすることでシステムが実装されているのだ。だからこれをソフトシミュレータではなく専用のハードで動かすことができたらと思っても、そう不思議はないだろう。普通のソフト屋(?)ならそう思わないかも知れないが、アタシはソフト屋にしてはかなりハードに詳しかったので。まぁ普通のソフト屋はFORTHとか使わんか。^^;

------- *

FPGAやろうかなと思ったのはFORTHとは関係ない話なんだが、上に述べたような願望があったのですぐに「あ、こいつであれ作れるじゃん」とひらめいたのだ。そうなると俄然やる気が湧いてきた。Google先生を蹴飛ばして情報集めをすると、最近のFPGAは能力が高く、CPUをその内部に構築することも可能だと書かれている。つまりFPGAを汎用CPUにすることができるというのだ。

FORTHマシンを作るといっても、ソースコードを食わせるコンパイラは文字列を扱うので、さすがにデジタルロジック回路では実装しにくかろう。それはFPGA内に構築した汎用CPUに任せる。そして空いたスペースを使ってFORTHの核となるデータスタックとリターンスタック、そしてそれらを操作する機能を実装すればいい。とまぁ、バラ色の脳味噌で夢は膨らむ。

最初のうちはハードであるFPGAも、それにロジックを教え込むソフトであるHDLという言語も、なによりそれらをすべて含むカスタムICの世界観というものがなかなか頭に入ってこない。無理やり押し込んでも今度は腹にストンと落ちない。数日ジタバタしたあげく、まぁいいか、とにかくFPGAの中にスタックマシンを実装してみよう。その動きを見ながら先のことを決めていけばいいじゃないかと腹を固めた。

そう決めたので改めて、その方向で勉強を始めた。まずはVerilog HDLという言語の勉強を始めたわけだが、どうもなぁ…スッキリしない。今朝わかったんだが、HDLがなまじ言語の体裁を持っているため、どうしてもソフト屋の頭で考えてしまうようだ。違う違う、そうじゃなくて、アタシはいまICを設計しているのだ。父ちゃん、わかったよ。

どうすれば使いやすいスタックマシンが作れるか、その一点に集中すればいい。FORTHコンパイラが吐き出したthreadedコードを実行する際に肝心要のスタック操作、たとえばDUPというプリミティブなスタック操作ワードをこの専用ICにどう実行してもらえばいいのか、結果をどうもらえばいいのか、そう考えたらいいんだと気が付いた。やれやれトシは取りたくない。若かったころなら一瞬でここまで行き着いたものだろうに。まぁそれでも一瞬と数日の違いだ。たいした差ではない。あはは。

------- *

という次第で、お勉強は続くのだった。


FPGAの勉強のために買った本

2016年04月24日 10時34分24秒 | FPGA

あくまでも現時点(2016/04/24)の話ね。昨日も投稿をひとつ書いたばかりなんだけど、忘れないうちに書いておこうと思っているだけだ。「これから毎日ばりバリ書きますよぉーっ」というつもりじゃない。そんなエネルギーも根気も真摯さも、ない。^^;

8bitマイコンの時代にこの世界に入った。工業高校電子科卒業後に勤めたのが電力会社の通信部門、趣味はアマチュア無線と来たもんだから、ソフトかハードかというとハードに近いところにいた。初めて手にしたマイコンはCRC-80というZ-80搭載のワンボードマイコンキットで、もちろん自分でハンダ付けして動かした。それからはほとんどソフトの世界にいたんだが、ハードがわからないわけじゃないので機会があるとボードコンピュータで遊んだりはしていた。74xxシリーズみたいな基本的なロジック回路はそんなことをしながら自然に身に付けていった。遡れば父親は旧国鉄の通信屋で、物心ついたときにはオモチャ代わりに父親が与えた[*1]ジャンクの電子部品に囲まれていた。恵まれているっちゃあ、そうだ。

ハードウェアとソフトウェアのどこかにいたわけじゃなくて、この間をフラフラしていたわけだ。しかも子供のころのハードウェアはどちらかといえばアナログ系で、おおざっぱに言えばいまのこの業界では「ソフトもハードもやってます。ハードはデジタルだけじゃなくアナログも経験ありますが、なにか」的な立場だ。もちろんウソではないが、それぞれそんなに深くはない。まぁ冗談のつもりで言っているんだよね。

[*1] 既に他界した父親は「与えた覚えはない。気が付いたら息子が勝手にバラして部品取りしていた」と目を細めていたそうだ。

------- *

さてFPGAをやろうと思い立ったんだが、ほとんどわかっていない。わかっているのは、なにかC言語みたいなもので書いた論理を焼き込む(これがFPGAに関してはあまり正確な表現ではないことはあとで知った)ことで自分仕様のICを作ることができるということくらいだ。やる人はこれで自分用のCPUを作ったりしているらしい。すす、すげぇ。

とにかく敵(テキなのか?)を知らなくてはと思ってGoogleをぶん回した。一番ピンと来たのがこのリンクだ。

ハード素人が32bit CPUをFPGAで自作して動かすまで読んだ本のまとめ

読んでいくと、この本にぶち当たった。

CPUの創りかた

これはFPGAの参考書ではない。TTLロジックIC10数個で4bitマイコンを作っちゃおうという「気は確かか」な内容だ。詳しい説明はしないが、ちょっと惹かれた人は表紙には目をつぶっていますぐポチるべきだ。内容はごく真面目なんだが筆者の昭和なギャグセンスが炸裂して、面白いなんてもんじゃない。腹筋が崩壊する。

さてそれで思わぬ寄り道をすることになったが、元に戻る。脱線人生のアタシには珍しいことだ。

------- *

いろいろ調べてみると、新しい情報にやたらと「MAX10」というキーワードが出てくる。どうやらこれがいま注目の最新FPGAらしい。FPGA評価用ボードの価格はちょっと前までは安いものでも1万円を超えていたのに、こいつは6千円~8千円ほどで手に入りそうだ。せっかくだから(なにが?)これでいこうかと仮決めし、この子の情報をたどり始めた。

見ていくと、安いけれども決してホビースト相手のオモチャではないことがわかってきた。シリーズ中の小規模なものでも実装できるロジック数は充分で、32bitCPUを余裕で実装できるとある。しかもコンフィグレーション用にフラッシュメモリが内蔵されていて、扱いやすい。CPUの実装くらいはほとんどのFPGAで可能だが、コンフィグレーション用フラッシュメモリ在中というのが気に入った。

FPGAは基本的にRAMなので、電源が切れるとせっかく実装したロジックをすべて忘れてしまう。だからFPGAの外になんらかの不揮発性メモリを用意しておき、起動するたびにこいつからFPGAにロジックを書き込んでやらなければならない。当然そのためのスペースと回路構成が必要なので面倒だ。これがなくてもいい(内蔵しているから)というのは将来評価用ボードから自前の基板を起こすことを考えたときに嬉しい。ちょっとだけだけどね。たぶんそれよりは「やり方、新しい」というのが気に入ったんだろう。

さらに調べていくと、どうもMAX10の評価用ボード(全部品実装済み)が付録になっている書籍があることがわかった。電子部品通販のマルツさんからもボードが出ているが、書籍付録のものはこれと同等でタッチピンとDRAMが省略されているらしい。タッチピンくらいハンダ付けできるし、そう巨大複雑なものは最初は無理だから、DRAMはなくてもいい。ほしければあとからハンダ付けできるようにパターンは引かれている。それでまずこれを注文した。

FPGA電子工作スーパーキット

あ、言っとくけどCQ出版の書籍はCQのWebショップから買った方がいい。いつものクセでAmazonから買おうとすると、Amazon本体ではなく出展業者がとんでもなく高い値段を付けて売っている場合がある。CQのWebショップで4,860円で売っている(これが定価)ものがAmazonでは7,788円(2016/04/24現在)だ。気をつけようね。

これで評価用基板は手に入った。部品を揃えてハンダ付けすれば使える書き込み用の基板も付いている。準備(の準備)は整った。しかし書籍の内容が入門者のアタシにはかなり高度だ。はっきり言って治療中の虫歯が痛むくらい歯を食いしばっても追いつかない。全然わからないものでも何度も何度もしつこく読むとわかってくることがあるのは経験済みだが、ここは楽をしたい。

そこでこの本はそれなりの力が付いてからまた読むことにして、もう少し入門レベルの本がないかと探した。さっきのリンクにそれを見つけたので、さっそく注文。

インターフェースZERO No.04 Hello Worldから始めるFPGA入門: 2大メーカXilinx,Alteraのお手軽ボードでチョコッと体験!

これはわかりやすい。これでも壁が高すぎると感じる人は、基本的なロジック回路の勉強辺りからちゃんとやらないとダメかも知れない。フリーのHDL開発環境のインストールがWindows以外だとちょっと面倒かも知れない(ちなみにアタシはMacOSⅩ)が、そこはGoogle先生のお尻を叩いて「iverilog MacOS インストール」くらい食わせれば必要な情報は見つかる。アタシの場合は、ビールが浸みた脳味噌でも30分程度でなんとかターミナルモードで動く環境は手に入った。

この「Hello Wordから始めるFPGA入門」というのがアタシみたいに中途半端に知識のある人間には「なんぢゃそれ」だが、ウソは書いていない。要するにIcarus VerilogというソフトにはHDLのソースコードにコンソール入出力を記述する能力があるので、それでコンソールに文字列を表示することができる。まぁちょっと譲れば「VerilogでHello World」と言えなくもない。これで取っつきの悪さを解消できるならばいいことで、編集者のセンスと度胸をむしろ褒めたい。

いまはこれを勉強中だが、もう1冊注文している。

FPGAマガジンNo.13 入門もホビーもピッタリ! ワンチップFPGA=MAX 10

いま読んでいる方はFPGAとVerilogの入門書だが、こちらはMAX10の入門書として役に立ってくれることを期待している。まだ発売になっていないので予約注文の段階だが、いまから届くのを楽しみにしているところだ。

次回の投稿(いつだかわからんが)では、MAX10に実装しようとしているFORTHという言語システムについて少し書こうと思う。技術解説をするつもりではないことをあらかじめお断りしておく。(^^)


FPGAを始めた理由(わけ)

2016年04月23日 16時01分47秒 | FPGA

何度でも自由に書き換えが可能で、ユーザが自分用に好きなロジックICを作ることができるFPGA(Field Programmable Gate Array)には前から興味があったが、心理的ならびに経済的(笑)障壁が高くて手が出せないでいた。あるシステムハウスの自社製品開発にコンサルとして参加させてもらうようになり、このごろようやく障壁(主に経済的な)が低くなってきたので、ちょっと手を出してみるかという気になった。

以下、今日から始めたFPGA入門者が書くことなので間違いだらけかも知れない。頭から信じ込んだりはしないようにお願いしたい。いやまぁ信じるのは勝手だが、なにがあっても訴えるのだけはやめてね。^^;

これは大変魅力的な製品だ。HDLという言語でロジックを記述すると、FPGAの中にそのとおりのICが実現される。74XXシリーズはもとより、力量と暇な時間が山ほどあれば、CPUさえ実装することが可能だ。「だ」と言い切ってしまったが、やったことがないので聞いた話だ。まぁ、正しいんだろう。

実は30数年前にマイコンの世界に飛び込んだときから、夢に見ていたことがある。FORTHのプログラムを実行するFORTHマシンを自分の手で作ることだ。スタックオリエンテッドなこの言語は、そのほとんどがスタック操作ワード群をソフト的にシミュレートする仮想FORTHマシンによって構成されている。だからほら、普通のCPUにアセンブラとかコンパイラでFORTHのコンパイラや実行時インタプリタを実装しているんだよ。

しかしこれはあくまでもシミュレータだ。そうじゃなくて、FORTHのオブジェクトをそのまま実行できるCPUがあったらすげーなと思っていた。実際、当時のマイコン誌でそうした製品を見たことがある。いや、もしかしたらPASCALのPコードを実行するPASCALマシンだったのかも知れないけど。

------- *

FPGAを自由に操るにはHDLという言語を使わなくてはならない。言語というものはなんであれ、「誰かに何かを伝えるもの」だ。それなしに言語を学ぶというのは日本の学校の英語教育みたいなもので、何年学んでも誰にも何も伝えられない。教育論を展開するつもりはないしその資格もないんだけど。

んでアタシの場合はこれがはっきりしていて、FORTHマシンを作りたいのだ。つまりFPGAにFORTHを実行する方法を伝えたい。ずいぶんはっきりとした話で、我ながら恍惚となっている。目的がはっきりしているので、たぶんこの学習はうまく行くだろう。FORTHマシンが無事に、いやヨタヨタとでも動き始めたころには、FPGAとHDLに関してあらかたの知識は身に付いているはずだ。しかも長年の夢が叶っている。こんなうまい話はない。

------- *

それで取りあえず、参考書なんぞ買ってみることにした。もちろん最近は何でもGoogleに聞けば教えてくれる時代だ。それもやってみたが、やはり書籍としてちゃんとまとまったものにはそれなりの力がある。どんな本を買ったのか? そうだ、それをまずまとめておくことにしよう。


スマホを買い換えないということ

2016年04月21日 09時02分53秒 | iPhone
発売当初は毎年のように、最近でも2年おきに、iPhoneを買い換えてきた。

月賦は借金なので、経済的長期低空飛行を長年続けた経験から敬遠している。よって機種変更時には端末代金を現金で用意するんだが、昨年末初めて機種変をスキップして気付いたことがある。お金をいいことに使える。

もともと現有機がこわれたのでも調子が悪くなったわけでもない。単に新しいのがほしいというだけなので、機種変をしなくても特に困ることはない。現状維持なんだから。その上端末代金相当額が手元に残る。去年は8万円あって、ほしかった部品や測定器を買ったり、お世話になった方にささやかなものを送らせていただけた。自分としてはずいぶん心豊かな年末を迎えることができた。あぁ、そうだ。暮れから正月にかけて飲む酒類に少し、贅沢もできたのだった。

それに味を占めたというわけではないが、今年こそはと思っていたSEへの機種変もどうやら飛ばしそうだ。まだ決めてはいないつもりで表層意識は抵抗しているが、深層意識はさっさと決めてしまったようだ。気が付けば熊本への義援金を奮発(当人意識上の規模感)したり、なかなか手を出せなかったFPGA学習用の書籍を3冊も発注したりしている。臨時講師としてお世話になっている専門学校の生徒さんたちのために、自腹を切ってデバイスを配ったりもした。まったく困ったものだが、深層意識には逆らえない。それにたいていは深層意識の方が、表層意識の浅はかな知恵よりは正しい。直感を信じよ。そして従え。てやつね。

まだこわれないよね?> iPhone5s