組み込まれたエンジニア

我輩は石である。名前はまだ無い。

Gmail不調

2010-06-26 23:05:34 | Weblog
Oops... a server error occurred and your email was not sent. (#721)


となって、メールの送信ができない。

検索すると、世界中で同じエラーでメールが使えなくなっているようだ。

ハヤブサが戻ってきた時期でもあるし、サマーウォーズの映画を思い出してしまった :-p

不思議なことに、受信は問題ない。

Google Docsの仕様も今朝になって、いきなり変更になっていたりしたし、システムの変更を大規模にしているような気もする。。

Gmailも、Google Docsも困ったものだ。

とくに、Docsは、過去との互換性が無くなる変更をいきなりするのは、やめてほしい。

Homebrew CPU

2010-06-26 15:55:52 | Weblog
Digikeyを見ていて、ふと、1万個のFETを買っても、たいした金額にならないことに気がついた。

5千個もあれば、8ビットのCPUは十分作れるので、Home Brew CPUとして、
FETから作るというのは、かなり魅力的な選択肢になる。

実際に工作するかどうかは、ともかくとして、思考実験をしてみよう。

スピードを犠牲にして、負荷抵抗を47kΩにしてしまえば、電源容量も高々1A程度になるので、そこらのスイッチング電源で十分だ。

8ビットで1MHzでれば十分なので、軽く計算してみる。
まず、論理段数だが、アドレス加算がおそらくクリティカルになるが、スピードを犠牲にすれば、
8ビットALUを2回使いまわせばいいので、8ビットのキャリーチェインがクリティカルパスになるだろう。ここは、15段程度。

2N7000は、ゲート容量が20pFあり、出力容量が10pFあるので、こいつらが並列にネットに接続される。
キャリーパスのファンアウトを2で設計することにしよう。
すると、抵抗がドライブする負荷容量は、50pFである。

目標を1MHzとすると、0.7×15RCを1μSに収めたいので、RCは100nSを実現する必要がある。50pFで100nSとなると、2KΩが必要。
全部を2KΩにしてしまうと、電源が大変なので、クリティカルパスだけ、少し小さな抵抗でがんばってもらい、ゆっくりのパスは、のんびり行くか、それとも、電源に少しがんばってもらい、20A程度流そうか。。。


問題は、プリント基板は、そんなに安くないってことだ。。こちらは、回路の進捗に応じて少しずつ買い足せばいいか。。
でも、蛇の目基板で作りたくないなぁ。。基板を起こすか?

片面だけで、1ゲートずつの小さな基板にしても、100枚作ると3万円程度かかる。蛇の目の方が安い。
500枚でようやく蛇の目と互角。 ;-p

NSL 論理ループの検出

2010-06-22 00:58:12 | Weblog
初心者向けのサンプル回路を書いていて、ふと、論理ループを作ってしまう初心者が多そうだなと思った。

Verilogコンパイラにかければ分かるというのは、初心者向きではないので、論理ループを検出してエラーを出すようにした。

まだ、リリースしていないけれど、コードは変更済み。

この例題の説明を書いていて思ったのだが、シミュレーションサポートのためのテストベンチ生成は、サンプルを使わせるときにも、教えるステップ数が圧倒的に少なくなるので、とても便利だった。



たとえば、初めてのNSL回路例題として、

declare tut0 simulation { }
 
module tut0 {
    _finish("Hello World");
}


のようなモジュールを書いてもらい、NSL COREでsimulationを指定してコンパイルし、できたVerilogファイルをiverilogでコンパイルすれば、vvpでシミュレーションが動作する。
$ iverilog -o tut0.vvp tut0.v
$ vvp tut0.vvp
VCD info: dumpfile tut0.vcd opened for output.
Hello World

初心者には一切 Verilogを見せる必要がないので、大幅に手間が減る。

こんな簡単な仕組みは早く作っておけばよかったか。。

$90のEasyPC

2010-06-20 23:20:06 | Weblog
しばらく前に、$80のPCが話題になったが、最新版は、もう少し高価で、$90程度になっていたが、面白そうなガジェットなので、Ebayの出品業者から購入

デフォルトのOSはWindowsCEとなっているが、WindowsCEターゲットのgcc環境も開発されているので、このままでも結構楽しめそうなのだ。
例えば、エディタ一つとっても、Vimが移植されていたりする。

けれど、もう一つの楽しみとして、Linuxノートとする方法がある。(メモリが少ないので、あまり大きなプログラムは難しいが)


Ubuntuのグループなどでも大変人気になっていて、フォーラムの書き込みは1000件近くもある

Linuxの移植については、こちらのホームページが詳しい。


クティオの設定が飛ぶ

2010-06-20 21:35:27 | Weblog
出先でネットを使おうとクティオの電源を入れる。

EMの端末の青い光を確認したところで、接続しようとしたら失敗。
???何で???

PCのワイヤレスネットの表示をさせ、手動で接続しようとして、第2SSIDがないことに気がつく。
第1SSIDはセキュリティオフになっていて、管理画面のパスワードもデフォルトのまま。(パスワードを画面に表示するのはいかがなものかと思うのだが。。)

管理画面に入ると、3Gの設定がきれいさっぱり消えていた。

これらの設定情報はメールで送信されていて、オンライン上にあるので安心していたのだが、こうなると出先では手も足もでない。

家に帰ってから、設定情報をやり直す。ただ、pppパスワードはすっかり失念していたので、覚えのある数種類を次々試そうと、入力しては、クティオの管理画面の接続ボタンを押すが、どのパスワードもすべてログイン失敗となる。覚えがないようなおかしなパスワードを設定したとは思えないのだが??

ということで、プロバイダの管理画面に入り、そこからpppパスワードを再設定。

これでいけるだろうと、再度、クティオの管理画面で接続を試みるもやはり失敗!

しばし、考えるが、入力ミスは考えられないので、もしや、再起動しないと、接続情報が更新されないのでは?と、再起動をしてみる。

今度は正常に接続した。

ユーザーインタフェースは、人を惑わすように作ってはいけません。

しかし、そもそも、何で設定が飛んだ?

NSL:整数記述可能箇所の拡大

2010-06-16 08:27:28 | Weblog
NSLでは、信号のビット数は厳密に管理するけれど、ビット数が推定できる箇所には、整数を記述できるようにして、記述し易さと読み易さを両立させている。

これに関連し、SN/Xの新文法版を書いていて、もう少し拡張の必要性を感じて実装。

  • 制御端子の実引数に整数を記述できるようにした
  • ビット拡張の被拡張信号に整数を記述できるようにした。


20100615版からのサポート

NSL:制御端子の返り値

2010-06-14 21:38:22 | Weblog
NSLには、制御端子の宣言と、その動作内容を記述する構文がある。
制御端子には、func_in, func_out, func_selfの3種類があり、それぞれ使い方が異なる。

これらの制御端子は、モジュール内外のメッソドを定義するのだけれど、ハードウェアの特性から、返り値は複数あることがあるし、どの端子に返り値を戻すのかは設計者の趣味もあるので、返り値は明示的に設計者に指定させてきた。

それでも、返り値が唯一しかない場合も多く、そういうケースの記述性を上げるため、制御端子の返り値を返す端子を指定できるようにした。

例えば、制御入力端子なら、

declare  test {
  input a[8];
  input b[8];
  output q[8];
  func_in add(a,b): q;
}


のように、制御端子の宣言の後ろにコロン(:)と端子名を書くことで、この端子に値を戻すことを明示する。

本文では、
module test {

 func add {
    return a+b;
 }


のように、return文で返り値を指定すると、宣言で指定した端子に値が転送される。

そこで、このモジュールを呼び出す親モジュールでは、

.....
    test a1;
....
    o = a1.ex(pc,1);
...


のように、端子を指定せず、制御を呼び出し、返り値を受け取れる。

返り値に指定できるのは、


制御端子返り値端子
func_inoutput/inout
func_outinput/inout
func_selfwire


とした。

この文法に合わせて書き換えたSN/X CPUをIP ARCHに置いた


NSL:カウント型for文

2010-06-14 01:33:43 | Weblog
はやぶさのニュースを気にしつつ、NSLに新しい文法を追加。

WPA内に目視確認ということは、もう回収されているだろう。
はやぶさは、とてつもない偉業を成し遂げた。拍手で迎えよう♪

本論だが、今回の新構文はカウント型for文と名付ける。
これは、FORTRANのDO文相当の機能だれど、とりあえず、+1のみのループ制御とする。
(要望があれば、将来負のカウントや1以外の増分をサポートするかも?)

シミュレーションスクリプトの自動生成にかけるため、余分なコードも入っているけれど、↓のコードを見れば、使い方は分るはず。
20100613からの変更。
このバージョンでは、合せて、初期化するレジスタが未使用ネット検索の利用ネットリストから洩れていたのを修正。

declare for2 {
}
module for2 {
func_self ex();
reg i[8];
reg cnt[8]=0;

cnt++;

if(cnt[5:0]==32) ex();
if(cnt==255) _finish();

func ex seq {
        for(i:=0,4) {
                _display("%d:%d",_time,i);
        }
        _display("%d:for end:%d",_time,i);
}

}


pogoplugセットアップ

2010-06-13 21:53:31 | Weblog
だいぶ寝かせて熟成してきたPogoplugをセットアップした。
パーソナルクラウドという名目で、これをセットアップすれば、ネットに接続すればどこからでも自分のファイルが読めるという、ふれこみは優れもの。

ルータに接続し、USBディスクをつないで、設定は?と説明を見ると、my.pogoplug.comにアクセスしろとある。
アクセスしてメールアドレスとパスワードを登録し、メールのアクティベーションを行うと、もう使えるようになっている!?

えっと、これって、ルーターのIPアドレス「だけ」から認証しているってこと?
proxy経由で複数の人たちが同じIPアドレスで出て行ったらどうなるの??
などなど、?が浮かぶが、時間でフィルターしているのかもしれないなど、好意的に解釈しておこう。

しかし、パソコンのアプリを止めて、ログアウトしているのに、USBディスクに延々とアクセスが続くのは、なぁぜ?

とりあえず、手元の音源ファイルをアップロードしてみる。

EMobile回線から、以前、自分でリアルタイム入力したBachのメヌエットのMIDIをダウンロードして音を鳴らしてみよう。

と、たった1KBほどのファイルなのだけれど、音が鳴り出すまで延々と待たされる。(何か操作を間違ったかと思い、他のことを始めたら、いきなり鳴り出して驚く)

う~む、もっとサクサク動くのかと思っていたけれど、使い心地は微妙ですね~

容量制限の緩い遅いFTPサイトを一つ持ったと思えばいいのか。。


話は突然変わるが、今日、国道を走っていたら、前を見慣れない車が走っていた。

ずっと後ろからだったので、全体像は不明だけれど、右ハンドルなので、イギリスのガレージメーカー製か?と思っていたが、車の後ろに http://abflug.jpというURLが書かれていたので、検索してみると、

ありました。まさにこいつ↓

TOYOTA スープラ  Abflugコンプリート 「GT-05」

NSL:構造体

2010-06-11 11:35:39 | Weblog
構造体宣言と、構造体インスタンスのサポートを行なった。

構造体は、モジュールの外部で先行して宣言する。
インスタンスはモジュールインスタンス同様、構造体名を用いて、宣言。
インスタンス宣言時に、regかwireかを明示する。

構造体名および各メンバーに対して、独立に参照、転送が可能。
左辺ビット連結も、無名構造体扱いとして、. { } = 値という形の転送を許す。(中括弧の前のピリオドに注意)

構造体全体への転送は、ビット数の推定は行なわず、ビット数違いはエラーとする。

構造体宣言の後ろのセミコロン";"の必要性は微妙なところだが、将来の拡張時に利用する可能性があり、とりあえず付けておく。


struct test {
test1[3];
test2[4];
test3;
};

declare st{
output a[3];
output b[4],c[5],d[4];
}

module st{
reg r1[8],r2[3],r3[5],r4[3],r5[8];
test wire mmm
test reg mmr;

. { a,b,c,d } = 0x2345;
. { r1,r2,r3 } := 0x6789;
r4:=mmm.test1;
mmr := 8'h93;
mmm.test2 = 0xa;
r5 := mmm;
}

ノートPCのメモリ増設

2010-06-03 22:52:57 | Weblog
すっかり据え置き形になっているノートPCのDELL Latitude D400だが、メモリが少ないと、VMが動かないので、メモリ増設を決心。

D400は、DDRメモリなのだけれど、時代はDDR3になっていて、そろそろDDRの入手性が悪くなっているのも背中を押したのだった。

このパソコン、買ってからたぶん7年くらいしか経っておらず、まだ新品同様といっても過言ではない。

キートップの文字が擦り切れて見えなくなっているとか、ハードディスクが40GBで、大きなものが入らないとか、USBの電流管理に厳しく、ポータブルHDDがつながらないとか、小さな問題はあるけれど、まだまだがんばってもらいたいものだ。

メモリアップグレードは、パソコン底面と、キーボードの下の2箇所のどちらかを交換することになる。すでに、アクセスしやすい底面のメモリは512MBにアップグレード済みなので、今回は必然的にキーボード下のメモリの交換となる。

アップグレード自体は無事に終わって、最後にお掃除のため、掃除機でキーボードの間の埃を吸い込んでいたら・・・キートップが吸い込まれた!

掃除機の中からシフトキーの残骸を救出したが、プラスチックの爪が折れ、そのままではつかない。応急手当として、セメダインで貼り付けているが、強度的にも不安だ。

ということで、シンガポールの会社にD400の代替キーボードを発注。

$13.5なり。

何かと物入りな今日この頃である。