« June 2010 | Main | August 2010 »

2010.07.16

AI Memo

CADRの資料がある場所に、大量のPDFがあります。
http://www.bitsavers.org/pdf/mit/ai/aim/

中身は印刷物のスキャンなのですが、どこに何が書いてあるかファイル名だけではさっぱり分かりません。とりあえず開いてタイトルをテキストに落とすという、人間OCRをやっていましたが、一つ上のフォルダーにすでに一覧がありました。もっと早く気がつけば良かった。

http://www.bitsavers.org/pdf/mit/ai/aim_index.txt

Turing や Chessで検索すると面白そうなのがいくつかありますね。60個くらい目を通した感想だと、ファイルサイズが大きい物ほど面白そうです。逆に小さいのは本当にただのメモです。

LISP Machine CADRに関する資料は、AIM-528_CADR.pdf以外には無い様子。残念。

| | Comments (0) | TrackBack (1)

2010.07.14

LISPマシンELISの基本設計

わだばLisperになる (35)LISPマシンELISの基本設計(1980)から、リンクされた論文を読んでみました。

手書きなので驚きましたが、日本語で分量も多くないのですぐに読めます。

速度とメモリ空間のトレードオフに苦労している様子が分かります。別のLispマシーンCADRの資料も読んでいるのですが、当時はPDP11が大活躍だったようです。

論文の中で面白かったのが、サイズが固定長のページングよりも、サイズが可変にできるセグメンテーションの方が良いと書いてあったことです。動作の単位がコンパイルされた関数だと、可変長の仮想記憶の方が良いというのもよく分かります。

| | Comments (0) | TrackBack (0)

なれるSE

http://www.amazon.co.jp//dp/4048686054

読みました。新人SEがツンデレ上司と共に少しずつ成長していくようなお話です。2chのマ板やム板に行った方が、もっと面白い話が聞けると思いますよ!

| | Comments (0) | TrackBack (0)

2010.07.08

楽天について思うこと

楽天さんからのメールも全文英語にしてください。

時々、スパムフィルターに引っかかったメールを本名で検索して、大事なメールが入ってないか確認するんですよ。そうすると、楽天さんからのメールばっかり引っかかります。そもそも、楽天さんで買い物なんかしたことなくて、ホテルの予約取るときに旅の宿がいつのまにか、楽天さんになっていたのですよ。いつものホテル取ろうとして、しょうがないから登録して予約したらこのざまです。

楽天さんには英語が達者な人が多いはずですので、メールの英訳も簡単なはず。スパムメールのグローバル化を進めるためにも是非お願いします。

| | Comments (0) | TrackBack (0)

2010.07.06

Rubyチップその2

Ruby チップ・・・だと・・・に反応。
全体的はに同意。「FPGAで作りました!」系の論文ははずれが多い。つーか、僕でも作れるってのもよく見る。行列演算をFPGAで実装しましたとかね。

Javaチップに関しては、上手くいかなかった経緯も含めてJazelleという一つの形にはなっているので、完全に無駄ではないかと思います。今回の図をみると、RubyのVMそのものをハードウェア化するのではなく、GC周辺のみをコプロやMMU的な仕組みでサポートするようなので、そちらの実装には興味があります、

図の通りのRubyチップなる物ができたとして、速度、消費電力、コスト面で有利になるとはとうてい思えないので、期待しすぎるのは良くないです。作ったRubyチップなるものを実際に使う所があるかどうかって言えば、まあ無いでしょうから導入実績で評価するなら、失敗するべきプロジェクトかなと思います。

Rubyチップ自体よりも、OS無しのスタンドアローンな環境で動くRubyの方が需要がありそう。

| | Comments (0) | TrackBack (0)

2010.07.04

FPGAプログラマのレベル10

レベル1:合成ツールのエラーが理解できなくても泣かない
レベル2:思った通りシミュレーションが動かなくても泣かない
レベル3:シミュレーションは通ったのに合成でエラーがでても泣かない
レベル4:合成結果がFPGAリソースを大きく超えても泣かない。
レベル5:シミュレーションで動いて、実機で動かなくても泣かない
レベル6:ボードが怪しい動きをしても泣かない
レベル7:ベンダー提供のIPコアが謎の動きをしても泣かない
レベル8:困ったときの検索結果が自分のブログだけでも泣かない
レベル9:合成ツールがインターナルエラーを出しても泣かない
レベル10:自作CPUのユーザーが0人でも泣かない

| | Comments (4) | TrackBack (0)

2010.07.03

Lava動かない

一日試行錯誤してみたけど、やっぱり動かない。
ダウンロードできるlava-0.3.tar.gzと、ドキュメントが整合とれていない。
多分、もっと開発の進んだバージョンがどこかで手に入るんじゃないかと思う。
今のままだと、ただのXilinxのプリミティブの呼び出しと接続だけなので、それだったらVerilogで書いても同じ手間だな。

という訳で、Lava目当てで「関数プログラミングの楽しみ」を買うのは止めた方が良い。

| | Comments (0) | TrackBack (0)

2010.07.01

lavaを動かしてみる

結論から言うと、ghc-6-10-1を使え。

僕はportable ubuntuを使っているので、ファイルはここからダウンロードした。
http://www.haskell.org/ghc/dist/6.10.1/ghc-6.10.1-i386-unknown-linux- libedit2.tar.bz2

普通に./configureからのインストールでOK。

インストール後、サンプル回路のコンパイルで/usr/bin/ld: cannot find -lgmpと言われたときは、 sudo apt-get install libgmp3-devでlibgmpをインストールする。

以下、試行錯誤の履歴。

portable ubuntu ghc6のパッケージでインストールされるのは、ghc-6.8.2なのでこれが問題。

まずlavaのディレクトリーでmakeをすると、

Setup.hs: lava.cabal:16: Parse of field 'build-depends' failed:

のエラーが出る。(ghc-6-10-1なら問題なし)

てっきり、lava.cabalがおかしいのかと思って試行錯誤したけど、これはCabalのバージョンがCabal-1.2.3.0だから。で、最新版持ってくると、

Setup: ghc-pkg: unrecognized option `--no-user-package-conf'

と怒られるので、Release 1.6.0.2を持ってくる。(これもghc-6-10-1なら気にしなくてOK)

今入っているパッケージはghc-pkg listで確認できる。こんな感じ
pubuntu@pubuntu:~/tmp/mtl-1.1.0.2$ ghc-pkg list

/usr/lib/ghc-6.8.2/package.conf:

Cabal-1.2.3.0, array-0.1.0.0, base-3.0.1.0, bytestring-0.9.0.1,

containers-0.1.0.1, directory-1.0.0.0, filepath-1.1.0.0,

(ghc-6.8.2), haskell98-1.0.1.0, hpc-0.5.0.0, mtl-1.1.0.2,

old-locale-1.0.0.0, old-time-1.0.0.0, packedstring-0.1.0.0,

pretty-1.0.0.0, process-1.0.0.0, random-1.0.0.0, readline-1.0.1.0,

rts-1.0, template-haskell-2.2.0.0, unix-2.3.0.0

あとは足りないパッケージを持ってくれば良いのだが、依存性の関係でどうにもならなくなる。最初に戻って、おとなしくghc-6-10-1を自力でインストールしよう!

これでVHDLのサンプル回路が作成されます。

サンプルのadder8.vhdの中身。

library ieee ;
use ieee.std_logic_1164.all ;
entity adder8 is
port(a : in std_logic_vector (7 downto 0) ;
b : in std_logic_vector (7 downto 0) ;
cin : in std_logic ;
sum : out std_logic_vector (7 downto 0) ;
cout : out std_logic
) ;
end entity adder8 ;

library ieee, unisim ;
use ieee.std_logic_1164.all ;
use unisim.vcomponents.all ;
architecture lava of adder8 is
attribute rloc : string ;
signal lava : std_logic_vector (0 to 42) ;
begin
cout <= lava(42) ;
sum(0) <= lava(20) ;
sum(1) <= lava(23) ;
sum(2) <= lava(26) ;
sum(3) <= lava(29) ;
sum(4) <= lava(32) ;
sum(5) <= lava(35) ;
sum(6) <= lava(38) ;
sum(7) <= lava(41) ;
lava(18) <= cin;
lava(10) <= b(0);
lava(11) <= b(1);
lava(12) <= b(2);
lava(13) <= b(3);
lava(14) <= b(4);
lava(15) <= b(5);
lava(16) <= b(6);
lava(17) <= b(7);
lava(2) <= a(0);
lava(3) <= a(1);
lava(4) <= a(2);
lava(5) <= a(3);
lava(6) <= a(4);
lava(7) <= a(5);
lava(8) <= a(6);
lava(9) <= a(7);
muxcy_26 : muxcy port map (s=> lava(40), di=> lava(9), ci=> lava(39), o=> lava(42)) ;
xorcy_25 : xorcy port map (li=> lava(40), ci=> lava(39), o=> lava(41)) ;
lut2_24 : lut2 generic map (init => "0110") port map (i0=> lava(9), i1=> lava(17), o=> lava(40)) ;
muxcy_23 : muxcy port map (s=> lava(37), di=> lava(8), ci=> lava(36), o=> lava(39)) ;
xorcy_22 : xorcy port map (li=> lava(37), ci=> lava(36), o=> lava(38)) ;
lut2_21 : lut2 generic map (init => "0110") port map (i0=> lava(8), i1=> lava(16), o=> lava(37)) ;
muxcy_20 : muxcy port map (s=> lava(34), di=> lava(7), ci=> lava(33), o=> lava(36)) ;
xorcy_19 : xorcy port map (li=> lava(34), ci=> lava(33), o=> lava(35)) ;
lut2_18 : lut2 generic map (init => "0110") port map (i0=> lava(7), i1=> lava(15), o=> lava(34)) ;
muxcy_17 : muxcy port map (s=> lava(31), di=> lava(6), ci=> lava(30), o=> lava(33)) ;
xorcy_16 : xorcy port map (li=> lava(31), ci=> lava(30), o=> lava(32)) ;
lut2_15 : lut2 generic map (init => "0110") port map (i0=> lava(6), i1=> lava(14), o=> lava(31)) ;
muxcy_14 : muxcy port map (s=> lava(28), di=> lava(5), ci=> lava(27), o=> lava(30)) ;
xorcy_13 : xorcy port map (li=> lava(28), ci=> lava(27), o=> lava(29)) ;
lut2_12 : lut2 generic map (init => "0110") port map (i0=> lava(5), i1=> lava(13), o=> lava(28)) ;
muxcy_11 : muxcy port map (s=> lava(25), di=> lava(4), ci=> lava(24), o=> lava(27)) ;
xorcy_10 : xorcy port map (li=> lava(25), ci=> lava(24), o=> lava(26)) ;
lut2_9 : lut2 generic map (init => "0110") port map (i0=> lava(4), i1=> lava(12), o=> lava(25)) ;
muxcy_8 : muxcy port map (s=> lava(22), di=> lava(3), ci=> lava(21), o=> lava(24)) ;
xorcy_7 : xorcy port map (li=> lava(22), ci=> lava(21), o=> lava(23)) ;
lut2_6 : lut2 generic map (init => "0110") port map (i0=> lava(3), i1=> lava(11), o=> lava(22)) ;
muxcy_5 : muxcy port map (s=> lava(19), di=> lava(2), ci=> lava(18), o=> lava(21)) ;
xorcy_4 : xorcy port map (li=> lava(19), ci=> lava(18), o=> lava(20)) ;
lut2_3 : lut2 generic map (init => "0110") port map (i0=> lava(2), i1=> lava(10), o=> lava(19)) ;
vcc_2 : vcc port map (p=> lava(1)) ;
gnd_1 : gnd port map (g=> lava(0)) ;
end architecture lava ;


| | Comments (2) | TrackBack (0)

« June 2010 | Main | August 2010 »