2014年12月31日水曜日

齧って逃げた子、誰だ〜

だ〜れ〜だ〜。
最近あやち聴いてばっかり。

佐藤さんのFPGAのコミュニティーに顔を出しておきながら、めっきり論理設計してない私。論理設計屋さんからソフト屋さん転職して早4年。そろそろ何か書かないと勘を忘れそうなので、ちょっとリハビリしてみました。

まずは家のリポジトリ漁って、使いまわせそうなやつを集めてGitHubに共通モジュールとして突っ込んでみたのが一週間前。なんかもうISEインストールして、今更なSpartan 3 Starter Kit(しかも無印)で動作確認するだけでぐったりですよ。だって今時パラレルポートとかないですもん。しかもUSB変換器じゃ駄目っていうJTAGお馴染みの問題。さらにUbuntuが新しすぎてドライバがインストールできないとか、おーのー。ここに時間かけるくらいならZynq買ったほうが安上がりだった。玄人志向のPCIとか買ってる場合じゃない!

で、とりあえず最近おなじみ、かつお手軽そうな6502でも実装してみるか、と。とにかく昔のCPUなんで今時のCPUとは違う楽しみがあるかもな、とか思ったわけです。で、いきあたりばったりで一気に書き上げてみたんですが……そうとうなカオスコードになってしまったorz 今にも書き直したい気分だけど、面倒って気持ちの方が大きかった。

このくらいなら手書きでデコード論理組めるだろー、とか甘く見てたんだけど結構ぐちゃぐちゃ。これだったら素直にcase文でパラの線にバラして、論理圧縮は合成ツールに任せたほうがマシだった。
あとやっぱり面倒だったアドレッシングモード。本家のマニュアルにアドレスバスに出てくるパタンが説明されてるので、だいたい中でどう動かしてるのか想像つくんだけど。なんか計算途中のゴミアドレスをバスに流してて気持ち悪い。こんなんでメモリマップドI/Oとかホラー過ぎる。で、資料がある故に厳密に倣って作ってみたんだけど、いろいろとチグハグにならざるを得なかった。やっぱり当時は資源共有して最小限の論理数で作ることに命かけてるんで、そこはあえて同じこだわりで設計してみた。
モジュール間のインターフェースもエンコードするかバラして流すかってのは悩むんですけどね。FFに突っ込むにはエンコードしといた方が資源節約になるけど、CPUの場合せっかくデコードしたのになー、みたいな気持ちもあって。今回は中途半端にエンコードしたままにしたせいで、条件がいろいろ複雑になってしまった。
でもまぁ、マイクロコード以前のCISCがどんな感じで作られてるか体験する良い機会にはなった。

まぁ、来年はApple IIをグラフィック込みで動かすくらいはやるかもです。

あ、ちなみに合成するとXC3S200で論理21%、FF 3%くらいの使用率。もっとFF使っても良いですね。800ロジックセルだから、あてにならないゲート換算で1万ゲートくらい?綺麗に書き直せば500ロジックセルくらいまで減らせないかなぁ。

0 件のコメント: