アダルト・ヴァイオリン May the force be with you..

2006年2月15日

RDTSC命令

Filed under: 組込みシステム — @ 12:35 AM

Pentium系のプロセッサにはタイムスタンプカウンタというカウンタがある。実は多くのアーキテクチャでこの手のカウンタはあるのだが、Pentium系のカウンタは64ビット幅なので、かなり時間が経ってもオーバフローすることが少なく使いやすいのである。

ちなみに、64ビットマシンのAlphaプロセッサでは設計者は何を思ったか32ビットのタイムスタンプカウンタにしてしまったので、長い時間の計測には全く使い物にならなかったのであった。

AMD64アーキテクチャにも当然ながらこのカウンタは継承されていて、命令の使い方は良く似ている。

が、64ビット値を読み出すというところで、32ビットマシンであるIA32とAMD64で高級言語からデータの読み出しをするときに注意が必要である。

64ビットの値を受け渡すのには、IA32ではEAX/EDXのペアでデータを渡すようにしているのであるが、64ビットアーキテクチャのAMD64が普通にC言語から64ビットデータを取得する時には、当然ながら1つのレジスタで読み出せるのである。

その部分が、トラブルの種になる。
RDTSC命令は、IA32との互換性を考えて、AMD64でもEAX/EDXペアにカウント値を読み出すので、64、32ビット共用の読み出し関数はこの点を考慮しないといけない。

inline long long rdtsc() {
int ax,dx;
asm(“rdtsc”:”=a”(ax),”=d”(dx));
return ((long long)dx<<32 | ax);
}

このカウンタ、実は利用時に注意が必要である。
というのは、単にクロック数をカウントしているだけのカウンタなので、ノートPCなどでSpeedStepをONにしていると、マシンの負荷状況によってクロック周波数が異なり、実時間に変換するときに、計測時点での実クロック周波数を読み出す手段がないと変換できないのである。

SpeedStepを用いていなければ何の問題もないのであるが・・

2006年2月13日

組み込みソフトウェア開発スタートアップ

Filed under: 組込みシステム — @ 2:50 PM

CQ出版の組み込みソフトウェア開発スタートアップは、雑誌扱いだったので、AMAZONでは取り扱いがなかったのだが、先ほど来年のテキストの指定のため、CQ出版に見に行ったら、いつの間にやらムック扱いに変更になり、ISBNが付いていた。
ISBNがあればアマゾンで発注できるはずと検索してみたら、ちゃんと見つかるではないか。

組み込みソフトウェア開発スタートアップ

CQ出版さん、最初からムックで出してくれればよかったのにね~

ちなみに、この本、結構お勧めである。

2006年2月11日

sfl2vlの符号拡張とビット切り出し

Filed under: 組込みシステム — @ 9:04 AM

SFLの言語規格では演算に対しても符号拡張やビット切り出しが可能となっているが、特に必要性を感じなかったので、sfl2vlではこれらは端子かレジスタに対してのみ許可していた。

ところが、昨日、ユーザから、「符号拡張をサポートしていないのですか」と質問があって、見たら演算結果を符号拡張しようとしていた。

ん~、エラーメッセージには識別子にしかこの演算はサポートされないって出ているだろうと思いながら、説明したが、演算結果を符号拡張するには、単に一時端子に代入するだけなので、言語処理系で行っても大したことはない。

ということで、処理系を少し変更し、20060211版からは、演算に対しても符号拡張やビット切り出しが可能になる。
注意が必要なのは、演算ビット幅が確定しない加算などの演算に対しては、望む結果と異なる出力が出ることがある点である。

これは、動作を考えれば当たり前の話で、これがあるから、確定したビット長の識別子にしか演算を許していなかったのであるが、気をつけて使ってくれれば処理系で自動にやった方が便利ではある。

一応、問題ないはずなので、リリースとしているが、何か問題があれば、連絡してもらいたい。

この機能は、たとえば、下記のような記述に利用するのである。

module exttest {
input a<4>;
input b<4>;
output f<8>;
output g<4>;
par {
f=8#(a+b);
g=(a||b)<5:2>;
}
}

2006年2月6日

グレイコードとバイナリコード

Filed under: 組込みシステム — @ 9:58 AM

sfl2vlの状態遷移マシンの状態番号は宣言順にバイナリコードでアサインしている。
これは、教科書的にはNGである。スイッチング理論やディジタル回路の教科書では状態割り当てによって回路規模が大きく変わる「特殊ケース」が説明されることが多い。これらを受けて、バイナリコードアサインはあんまりだという人が時々いる。

実際問題として、大きな回路を作成するときに、教科書のような特殊ケースはまず発生することがなく、状態アサインの最適化の効果はほとんどゴミのようなものである。

これが、sfl2vlであえてバイナリアサインを保っていた理由なのだが、もう少し毛色の変わったアサインをしたい向きもあるだろうから、グレイコードアサインが出来るようにオプションを追加した。

sfl2vl filename.sfl -gray

と後ろに-grayをオプションとして付加することで、状態アサインはグレイコードになる。もちろん、状態変数の最適化なんてものは一切していないので、バイナリであろうとグレイであろうと出てくる回路は大差ないのである(そもそも、ALTERAのツールではどちらもFSM最適化によって無視され勝手に割り振りを付け直される)。
それでも、グレイコードにすることで、宣言順に順次状態が遷移する場合には多少回路的な負担が少なくなる合成系もあるだろう。

2006年1月25日

組込みソフトエンジニアのための新しい教科書

Filed under: 組込みシステム — @ 7:59 AM

SESSAMEのワーキンググループが作成した新しい教科書が発刊になったということだ。

組込みソフトウェア開発のための構造化モデリング

組込みソフトウェアエンジニアは中々ソフトウェア工学手法を適用するほど勉強時間がない人が多いけれど、構造化をしっかりと書いた本は今時貴重である。この本は、現場のエンジニアたちが勉強しながら作成したので、心と実感がこもった本になっているに違いない。
(私も早速発注しよう・・)

2006年1月18日

オブジェクト開発の神髄

Filed under: 組込みシステム — @ 10:46 PM

しばらく、電車での移動時間に読んでいた

オブジェクト開発の神髄~UML 2.0を使ったアジャイルモデル駆動開発のすべて

をようやく読み終わった。

アジャイルによるエンタープライズ系の開発手法の話であるが、分厚い本であるにもかかわらず、辞書的な使い方には向いていなく、頭から一気に読む方が良い本である。
ただ、電車で読むには重いし大きいので、大変であった(笑)

エンタープライズ系では、発注する側と開発する側が異なり、開発者は利害関係者の求めるものを引き出すことに注力するので、この本の手法は適用できるのだろうけれど、製品開発など新しい価値を創造する仕事でモデリングやアジャイルをうまく回せるのかは今ひとつはっきりとしない感じだ。
利害関係者が自分自身だと思って、アジャイルを回せばいいのだろうけれど、そこに意識が行くと、話しの流れとずれてしまうので、自分の関係している分野への適用方法を導き出すのは中々難しそう。

2006年1月14日

x86_64用Linuxメモリ管理の変更

Filed under: 組込みシステム — @ 11:05 AM

昨日、Linux-2.6.15のソースツリーをダウンロードし、ざっとブラウズしていたが、とりあえず、変更方針と基本設計は完了した(つもり)

20日締め切りの研究会申し込みに出すかどうか、まだどこまでコードを作りこんで評価ができるか日程的な見通しは立っていないので微妙なところだが、申し込んで原稿締め切りが設定されないと他の仕事を優先してしまい、中々作業を進められないのはいつものことなので、思い切って申し込んでしまおうか・・・

自宅でも作業ができるようにマシンを置いてあるのだが、僕が自宅にこもりっぱなしで作業をすると、何も仕事をしない連中がいるので、ここは悩みどころである。
職場で作業できるように、職場のマシン環境を整える必要があるなぁ。

Linuxカーネルの作業はユーザ空間のプログラムと異なり、確認のときに完全にマシンをリブートしないとできないので、共有マシンでは作業しにくいのである。

職場でも、自分用にコンパクトなマシンをもう一台買う必要があるか?
x86_64の安価なマシンでコンパクトなものというのが、中々ないのであるが・・

2006年1月11日

プレステ2の調整

Filed under: 組込みシステム — @ 12:02 AM


先日購入したPS2のピックアップが届いた。

これでDVDも読めるようになるだろうと、割と気軽に考えて、調整を始めた。
ところがである。新しいピックアップでもやはりDVDの画像は乱れ、まともに読めない。
これって、問題はドライブの機構側にあるってことかも?と、思ったが、調整可能なピックアップのレーザー出力を少しいじってみることにする。

ところが、この半固定抵抗の調整はめちゃくちゃクリチカルであった。
DVDが読めるポイントなどほとんど1点だけであり、それも精密ドライバのような
細かな回転が制御できない工具では読めるポイントを探し当てるのは至難の業であることが良く分かった。

ということで、新しいピックアップが来てもやっぱりDVDは読めないまま放置されることになったのである。

2006年1月2日

sfl2vl: ステージ記述で構成要素宣言

Filed under: 組込みシステム — @ 7:22 PM

大きなモジュールを作る傾向のある人は、SFLの言語仕様のままだとレジスタや端子などの宣言が実際に使用する場所とかなり離れてしまい分かりにくくなる。
そこで、20060102版として、これらの構成要素の宣言をステージ記述の中で利用可能なように修正した。

stage {
reg_wr r123<8>;
sel s456<8>;
…..

のように、ステージの記述の最初に記述することで、多少は見通しのよい設計ができるようになる。ローカル変数のようにシンボルのスコープを制限しても良かったのであるが、(Verilogに変換したときに、分かりにくくなるので)そこまでの必要はないと考えて、宣言はグローバルである。もちろん、宣言より前にシンボルを使うことはできないので、ステージ記述で宣言される構成要素はステージ記述より前に使用してはならない。

この変更、どれだけの人が嬉しいかな?

2006年1月1日

FPGAでファミコンを作ろう

Filed under: 組込みシステム — @ 7:58 AM

長崎出身のS氏がSFLとFPGAを用いてファミコンを作成し、彼のサイトでその設計経験を公開している。
S氏は以前から知っていたし、ファミコンを作ったことも知っていたが、サイトを発見したのは偶然であった。たまたま、SFLの関連サイトを検索していたら、彼が私のツール(sfl2vl)と他のツールを比較するページを作っていて、目に留まったのであった。
当初、彼はSFLをVHDLに変換してFPGAに合成していたのであるが、sfl2vlのVHDLへの合成結果にXilinxのツールで通らない構文があって手修正が必要だったらしい。Allianceのvasyではかなりいい加減な構文でも平気で通ってしまうので、単純に確認漏れであり、更新をしたとサイトに書かれていたメールアドレスを頼って彼に連絡をした。
その後、数通やり取りした後、彼は合成のベースをVerilogに変更した。
中間言語として使うにもVHDLは不便であり、この変更は彼のためにもなっただろう(笑)

内部モジュールは全てSFLで記述し、Verilogに変換して合成しているが、最上位のモジュールだけまだVerilogのまま(ちょっと前までVHDLだったけれど、XilinxのツールがVHDLとVerilogを混在させるとおかしなエラーを起こすので、Verilogに書き直した)だけれど、これもsfl2vlの declare interface宣言を用いれば容易にSFLで書き下ろせるので、彼にはぜひ全てSFLで見通しよく書き下ろして欲しいものだ。

色々なところでSFLの面白事例を集め、紹介していくのもいいかもしれない。

« Newer PostsOlder Posts »

Powered by WordPress