電子工作に興味がわきました。
そもそもの発端は
名著「CPUの創りかた」を読んだからです。
http://www.amazon.co.jp/dp/4839909865
本に従い、ロジックICを買ってきて組み立てようかと誘惑に駆られたのですが、
作ってそこで終わりな気がしたので、ちょっと方向を変えることにし、
以前から気になっていたFPGAに手を出すことにしました。
参考にしたサイトは
触って学ぼう FPGA開発入門です。
非常にわかりやすいです。
ちなみに、同じ著者の「【実践】C言語による組込みプログラミングスタートブック」も買ってはみたものの、Cでロジックを書く意味が見いだせず、こちらはお蔵入りとなりました。
上記サイトにて使用されているEDX-002を購入し、サイトの記述に従って
実際にやってみました。
わからないことはいろいろありますが、まずはLED制御がなんとなくできるようになりました。
わかった気になったので、CPUをつくることにしました。
アーキテクチャは「CPUの~」の設計(TD4)をそのままつかわせてもらいました。
命令セットが見事です。
で、ごにょごにょやっていると、なんとなく動くものができました。
まだバグがあり、
・入力ポートが動かないっぽい
・クロックが適当
という不具合があるものの、
プログラムが動き、LEDが点滅しました。
すばらしい。
ソースは公開しておきますか。
https://subversion.assembla.com/svn/yosinori_public/trunk/fpga/spartan2/cpu1/
cpu.vがソース。たったの187行。
FPGAって楽だなぁ。
ハードのことがわからない人間がFPGAの知識もほぼない状態で
CPUを作るとこんな感じになる、というモデルケースの一つとして参考にしてください。
次なるステップは
・実用的なCPUを作る(設計も自分流に)
・既存のIPコア、picoblaze or pacoblazeを試す
・シリアル通信などのハード制御をしてみる。
あたりですかね。
ゆくゆくはdis VMをハードウェア化したプロセッサを作ればな、
などと考えてはいますが、
disの命令セットが一筋縄では実装できなさそう。
forkとかあるみたいだし。
2010年12月24日金曜日
2010年12月12日日曜日
Inferno 関連書籍
書籍をいくつか購入したのでまとめ。
こうして見ると結構ある。
Principles of Operating Systems: Design & Applications

http://www.amazon.co.jp/Principles-Operating-Systems-Design-Applications/dp/1418837695
OSについての教科書。じっくり読む価値があると思う。
Inferno Programming with Limbo

http://www.amazon.co.jp/Inferno-Programming-Limbo-Phillip-Stanley-Marbell/dp/0470843527
Inferno 3rdの時の本だが有用とのこと。
4thでの変更に注意しながら読む必要がある。
差分がまとまっている所は見つけられなかったので、自分で作ろうかな。
Inferno (Operating System)

http://www.amazon.co.jp/Inferno-Operating-System-Frederic-Miller/dp/6130282990
Wikipediaの記述をまとめただけという驚きの本。やられた。
Limbo (Programming Language)
(画像なし)
http://www.amazon.co.jp/Limbo-Programming-Language-Lambert-Surhone/dp/6133174110
こちらも、wikipediaの記述をまとめたもの。
嫌な予感はしたが、的中。
〜〜〜以下、購入できず。〜〜〜
Inferno Programmer's Manual
(画像なし)
http://www.amazon.co.jp/gp/product/0953870103
The Inferno Programming Book: An Introduction to Programming for the Inferno Distributed System

http://www.amazon.co.jp/Inferno-Programming-Book-Introduction-Distributed/dp/0470849711
こうして見ると結構ある。
Principles of Operating Systems: Design & Applications

http://www.amazon.co.jp/Principles-Operating-Systems-Design-Applications/dp/1418837695
OSについての教科書。じっくり読む価値があると思う。
Inferno Programming with Limbo

http://www.amazon.co.jp/Inferno-Programming-Limbo-Phillip-Stanley-Marbell/dp/0470843527
Inferno 3rdの時の本だが有用とのこと。
4thでの変更に注意しながら読む必要がある。
差分がまとまっている所は見つけられなかったので、自分で作ろうかな。
Inferno (Operating System)

http://www.amazon.co.jp/Inferno-Operating-System-Frederic-Miller/dp/6130282990
Wikipediaの記述をまとめただけという驚きの本。やられた。
Limbo (Programming Language)
(画像なし)
http://www.amazon.co.jp/Limbo-Programming-Language-Lambert-Surhone/dp/6133174110
こちらも、wikipediaの記述をまとめたもの。
嫌な予感はしたが、的中。
〜〜〜以下、購入できず。〜〜〜
Inferno Programmer's Manual
(画像なし)
http://www.amazon.co.jp/gp/product/0953870103
The Inferno Programming Book: An Introduction to Programming for the Inferno Distributed System

http://www.amazon.co.jp/Inferno-Programming-Book-Introduction-Distributed/dp/0470849711
2010年10月23日土曜日
Armadillo 440
Armadillo440に触る機会が出来ました。
ひとまずInfernoがインストールできるか確認です。
armadilloでセルフビルドが一番簡単そうなのでそのように。
2011/02/26 utilsのビルドはいらないっぽい。コメント参照
・debian環境の構築
アットマークテクノの提供するソフトウェアマニュアル「7.2. ストレージに配置する」を
参考にし、
Flash ROMの中のLinuxを立ち上げ、micro SDカードにdebianをインストール。
ドキュメントがよく整理されていてわかりやすい。さすが。
なんと開発用のLinux PC環境を用意しなくても出来ちゃう。
詳細は割愛。
以後はSDカードのdebianを立ち上げてから行う。
・ビルドに必要なパッケージをゲット
armadilloはEthernetでインターネットに接続できるようにしておきます。
パッケージ名は、
・infernoのソースをゲット
google codeからmercurialで持ってくる。
・ビルド用の設定
パスの設定、コンフィグの書き換え、その他。
/inferno-os/mkconfigを一部書き換え
・ユーティリティとOSのビルド
・実行
infernoのプロンプトが現れる。すばらしい。
なお、wm/wmを実行してみたが、画面の色深度が16bppじゃだめと怒られた。
どうしたものか。
※ネットワーク上のxserverに画面を飛ばすのはOK。
ひとまずInfernoがインストールできるか確認です。
armadilloでセルフビルドが一番簡単そうなのでそのように。
2011/02/26 utilsのビルドはいらないっぽい。コメント参照
・debian環境の構築
アットマークテクノの提供するソフトウェアマニュアル「7.2. ストレージに配置する」を
参考にし、
Flash ROMの中のLinuxを立ち上げ、micro SDカードにdebianをインストール。
ドキュメントがよく整理されていてわかりやすい。さすが。
なんと開発用のLinux PC環境を用意しなくても出来ちゃう。
詳細は割愛。
以後はSDカードのdebianを立ち上げてから行う。
・ビルドに必要なパッケージをゲット
armadilloはEthernetでインターネットに接続できるようにしておきます。
apt-get update
apt-get install [パッケージ名]
パッケージ名は、
- x-window-system-core
- libxext-dev
- gcc
- make
- mercurial
・infernoのソースをゲット
google codeからmercurialで持ってくる。
cd /
hg clone https://inferno-os.googlecode.com/hg/ inferno-os
・ビルド用の設定
パスの設定、コンフィグの書き換え、その他。
export PATH=$PATH:/inferno-os/Linux/arm/bin
cd /usr/bin
ln -s gcc arm-gcc
/inferno-os/mkconfigを一部書き換え
ROOT=/inferno-os
SYSHOST=Linux
SYSTARG=Linux
OBJTYPE=arm
・ユーティリティとOSのビルド
cd /inferno-os
./makemk.sh
cd /inferno-os/utils/iyacc
mk install
cd /inferno-os/utils
mk install
cd /inferno-os/limbo
mk install
cd /inferno-os
mk install
・実行
cd /inferno-os/Linux/arm/bin
./emu
infernoのプロンプトが現れる。すばらしい。
なお、wm/wmを実行してみたが、画面の色深度が16bppじゃだめと怒られた。
どうしたものか。
※ネットワーク上のxserverに画面を飛ばすのはOK。
2010年6月29日火曜日
一国一城の主に
オシロを買いました。
picoscope 2203というやつです。
http://www.picotech.com/ultracompact-oscilloscopes.html
かっこいい。
別に何か目的があるわけでは無いのですが、使い方を習得したかったので
弾みで購入しました。
いじる時間が取れなさそうなのが悩みです。
なお、このオシロスコープはiPhoneアプリも出ていて、
波形をiPhoneの画面に出すことができます。
これも面白い。
picoscope 2203というやつです。
http://www.picotech.com/ultracompact-oscilloscopes.html
かっこいい。
別に何か目的があるわけでは無いのですが、使い方を習得したかったので
弾みで購入しました。
いじる時間が取れなさそうなのが悩みです。
なお、このオシロスコープはiPhoneアプリも出ていて、
波形をiPhoneの画面に出すことができます。
これも面白い。
2010年3月14日日曜日
AndroidでStyx、略してStroid
ブログタイトルにサブタイトル入れておきました。なにもひねりがありませんが。
AndroidでStyxを動かしたくなりました。
略してStroid。
最終目標は、wmをAndroidアプリで実装して、ローカルorリモートのInfernoを
タッチパネルから操作できるようにする。
既存のStyxライブラリを検証してみました。
・Jstyx
結構外部ライブラリに依存している。
Androidでの起動に失敗。
・ninedroid
Android上で動く実装もあったので、簡単に動いた。
すばらしい。
サーバー側。
・styx-n-9p2000
Android上で動く実装があったので、簡単に動いた。
クライアント側。
・j9p/styxlib
ざっとソースツリーを眺めると結構大きい。
気力が尽きたのでポーティングは試みていない。
apache/antを使うとか、外部ライブラリへの依存があるのかも。
ちなみに、ninedroid とstyx-n-9pのAndroid端末内でのローカルホスト対向通信は
失敗。なぜだろう。
Styxはシンプルなプロトコルといわれているが、認証とか暗号とか考えると
意外と大変かも。
AndroidでStyxを動かしたくなりました。
略してStroid。
最終目標は、wmをAndroidアプリで実装して、ローカルorリモートのInfernoを
タッチパネルから操作できるようにする。
既存のStyxライブラリを検証してみました。
・Jstyx
結構外部ライブラリに依存している。
Androidでの起動に失敗。
・ninedroid
Android上で動く実装もあったので、簡単に動いた。
すばらしい。
サーバー側。
・styx-n-9p2000
Android上で動く実装があったので、簡単に動いた。
クライアント側。
・j9p/styxlib
ざっとソースツリーを眺めると結構大きい。
気力が尽きたのでポーティングは試みていない。
apache/antを使うとか、外部ライブラリへの依存があるのかも。
ちなみに、ninedroid とstyx-n-9pのAndroid端末内でのローカルホスト対向通信は
失敗。なぜだろう。
Styxはシンプルなプロトコルといわれているが、認証とか暗号とか考えると
意外と大変かも。
2010年2月25日木曜日
そういえば、Smart Q5でLinux Emuは動いてます

すっかり報告し忘れていましたが、Smart Q5上のubuntuで、
emuは動いています。
残念ながら、wmは動いていません。理由はXの画面モードのようで、
色深度16bppでは動かないそうです。
24bppにすれば多分動くと思うのですが、設定の仕方がまだわかっていません。
(ブートパラメーターなのか、設定ファイルなのかすら不明)
動かしたInfernoの出所は、Google codeの物を
beagle board上のubuntuでビルドしたものです。
もともとBeagle board用にセルフビルドしたものですが、
それがそのまま動きました。
写真はその時の模様です。
iPhone 3Gにはマクロレンズが無いので、虫めがねごしです。
ボケてゆがんでいるのはそのせいです。
ところで、Android上でemuを動かす試みは
まだうまくいっていません。
ただ、これがもしうまくいけば、バックグラウンドでInfernoを動かし、
UIはAndroidアプリで構築し、ローカルのInfernoに接続する、
なんてことができるかもしれません。
Android用のDrawtermがあるといいのかな。
(あれ?DrawtermってInfernoに使えるの?)
なお、Drawterm for iPhoneというのは構想があるそうです。
http://cm.bell-labs.com/wiki/plan9/iPhone_drawterm/index.html
2010年2月15日月曜日
曲を聴きながら眠りにつき、良いタイミングで起こしてもらう(Sleep Cycle Clock をiPodとともに使う)
大人気のiPhoneアプリSleep Cycle Clockというのがあります。
寝ている間の体の動きをセンサーで検知し、眠りの深さを計算し、
眠りの浅いときを見計らっておこしてくれる目覚まし時計アプリです。
常にアプリランキングに入っています。
こんなアプリを作れたらいいなぁ。
これを起動している最中は
音楽を鳴らすことが出来ないのが残念でした。
しかし、回避する方法があるそうです。
これをやると、「曲を聴きながら眠りにつき、良いタイミングで起こしてもらう」ができるのです。
参考サイト:
http://holygekko.posterous.com/combining-sleep-cyle-and-ipod-or-how-i-tricke
詳細は引用もとのサイトを参照してください。
やり方だけ抜粋。
ちょっと手順が込み入っているけど、慣れればそれほど難しくないかと。
iPhone3Gで試してみたところ、成功しました。
良くこんなウラワザ見つけたなー。
寝ている間の体の動きをセンサーで検知し、眠りの深さを計算し、
眠りの浅いときを見計らっておこしてくれる目覚まし時計アプリです。
常にアプリランキングに入っています。
こんなアプリを作れたらいいなぁ。
これを起動している最中は
音楽を鳴らすことが出来ないのが残念でした。
しかし、回避する方法があるそうです。
これをやると、「曲を聴きながら眠りにつき、良いタイミングで起こしてもらう」ができるのです。
参考サイト:
http://holygekko.posterous.com/combining-sleep-cyle-and-ipod-or-how-i-tricke
詳細は引用もとのサイトを参照してください。
やり方だけ抜粋。
1. あらかじめiPodコントロールを有効にしておく。(設定→一般→ホーム→iPodコントロールをONに)これは一度設定すればOK。
2. iPhone標準アプリの時計を起動。寝付くまでの時間を設定し、「タイマー終了時→iPodをスリープ」を設定。こうすることで、いつまでも曲が流れ続けるのを避け、途中で曲をストップしてくれる。
3. iPodを起動し、好みの曲をスタート。
4. Sleep Cycle Clockを起動。起動が完了する前にHOMEボタンをダブルタップ(←ここがコツ)
5. iPodコントロールというウィンドウがポップアップし、裏ではSleep Cycle Clockが起動完了し、iPodの再生を止めるはず。その状態になるまで待つ。
6. Playボタンを押し、iPodの再生を開始し、Closeを押してポップアップを閉じる。あとはSleep Cycle Clockを通常通りに使う。
ちょっと手順が込み入っているけど、慣れればそれほど難しくないかと。
iPhone3Gで試してみたところ、成功しました。
良くこんなウラワザ見つけたなー。
登録:
投稿 (Atom)