いつもの週末が来た。そらま来るわな、フツー。(^^)
目が覚めてからずっと、この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を持ち出してきたのでこの方が楽だからね。