« 2007年12月 | トップページ | 2008年2月 »

2008.01.31

事務員さん決定!

応募していただいいた方の中から、早速、決まりました。
昔、組み込み業界にいたということもあって、とても期待しています。
特電も少しづつにぎやかになってきました。

| | コメント (0)

アイデムさんに求人広告を掲載

アイデムさんに一般事務の求人広告を掲載してみたところ、月曜日から水曜日までの3日間で、20件くらいの申し込みが来ました。
月曜日の朝は電話が鳴りっぱなしでした。

ただ、年齢制限を書いていなかったので、あきらかにお年を召された声をした方なども大勢含まれていました。
「年齢制限ありますか」と聞かれて「一応40くらいまで」と答えると、それは残念ですと悲しそうにされたりすることも多かったです。
千代田区を中心として配っていただいたし、新聞の折込広告なので、高齢者が多いのかも。
ともかく求人広告に年齢を書くのは必須のようです。

そうそう、求人広告を出したら変な会社から電話が来ましたよ。
「うちも求人広告を出している会社なのですが、うちにも出しませんか?」
とか
「広告みたのですが、うちは人材派遣をやっている会社なのですが、ご入用ではないですか?」
とか。
求人広告を出している会社に電話して営業するとは・・なんてつわものなんだ。

さて、履歴書をお送りいただいた方の中から何名かに面接に来ていただくことにして、もしうまくいかなければ、今度は別の媒体に出してみることにしましょう。

| | コメント (1)

2008.01.26

格好いいアイコンが作りたい!!

どうやったらかっこいいアイコンが作れるのかと悩んできました。

私はソフトウェアの開発には、Borland(今はCodeGear)のC++Builderを愛用しているのですが、この付属のイメージエディタでアイコンファイルを作ろうとすると、16色のデフォルトのパレットしか扱えません。

BMPファイルならば256色まで扱えるのですが、色の選択がこんな感じ
ボーランドイメージエディタのパレット
なので、グラデーションの効いたドット絵を作るのは至難の業です。
Delphiを使っている人もきっと同じでしょう。

そういうわけでいままで綺麗なアイコンを作るという作業を避けてきたのですが、そろそろ本気で考えなければと感じてきました。

今のMITOUJTAGのアイコンはこんな感じです。
今のMITOUJTAGのアイコン
このアイコンはデフォルトの16色パレットそのままだし、そもそも何の絵だかわからないし、あまりにもダサい。
我ながらイケテナイとつくづく思っていました。

最近のソフトでは、対象物を少し斜めから見て、グラデーションのかかった立体的なアイコンが流行のようですから、こういうアイコンを簡単に作る方法を考えてみました。

使ったツールは、Microsoft Excelと、「Paint Shop Pro」と、「@icon変換 Version1.21」です。
・アイコンの元になる絵を描くのにExcelを使います。Excelのバージョンは何でもいいと思いますが、2007では難しいと思います。ExcelでなくてもPowerPointでもいいでしょう。
・Paint Shop Proはビットマップファイルの編集(主に画像の縮小)に使います。他の画像エディタでも、画像の拡大縮小機能があれば同じように使えます。ホームページ作成ツールに付属の画像エディタでもよいでしょう。
・「@icon変換 Version1.21」はフリーソフトで、BMPファイルをICOファイルに変換してくれます。

まず、以前このブログで紹介した「Microsoft Excelで波形を描く方法」に書いたとおり、Excelの枠のサイズを、横0.96、縦9.6にします。

オートシェイプの中から適当なものを選んで貼り付けましょう。
立体っぽく見せるのならば、「基本図形」の中の「円柱」と「直方体」が便利です。

大きさは縦横16マスくらいがいいです。
線の太さは3ptくらいにしておきます。
そしてグラデーションを使って色をつけます。
Excelのオートシェイプ

そしたら、この絵をコピーペーストして、Paint Shop Proに貼り付けます。Paint Shop Proに限らず、画像編集ソフトなら何でもいいでしょう。この段階でグラデーションの色数が少し減ることがあるようですが、気にしなくてもよいです。
オートシェイプを画像編集ソフト貼り付け

そして縦・横16ピクセル、あるいは32ピクセルのサイズになるように縮小します。

ここで、単純にピクセルを抽出して縮小すると、色が混ざらないので綺麗なアイコンになりません。
単純に縮小した場合

なので、縮小するとき色を上手く混ぜてくれるモードで縮小するようにします。こうすると、グラデーションが効いてよい感じの画像に仕上がります。
ぼかしながらして縮小した場合

この方法を使えば、たとえ黒の一本の線を引いたとしても、縮小するときに勝手にグラデーションがかかるので、ドット絵を描く必要はなくなります。

例えば、↓のような図形は
黒い線のサンプル
↓のようになります。
黒い線のサンプル(変換後)

こういう中間色は自動でできます。

この調子でExcelのオートシェイプを活用して、立体的な絵をいっぱい書きましょう。
Excelで描いたいろんな図形

それを切り出して、望みのサイズに縮小して、16×16のビットマップファイルをいっぱい作ります。
EXEファイルに表示するアイコンは、BMP→ICOファイル変換ツールを使ってICOファイルにし、C++Builderのリソースに登録します。
プログラム実行中に、ボタンや随所に貼り付ける画像ははBMPファイルのまま利用します。

MITOUJTAG Version2のアイコンはこんな感じになりました。
MITOUJTAG2のアイコン

速攻で作ったわりには、いままでのと比べてずいぶん良くなったと思います。

こうして作ったアイコンをいっぱい使って、ツリー表示してみます。
MITOUJTAGのプロジェクトツリー
よくある「統合環境のプロジェクトマネージャ」をイメージしてみました。

最後にまとめです。
「ドット絵職人みたいなことをせずに、手軽にアイコンを作る方法」をまとめると
①Excelのセルのサイズを0.96×9.6に変更し、グリッド固定を行う。
②大きいサイズで大胆にお絵かきする。
③斜めから見たアイコンの元の絵は、Excelのオートシェイプを使うと簡単に作れる。
④アイコンのグラデーションは、Excelの塗りつぶし機能と、画像ソフトの縮小時の「ぼかし」を利用する。通常はドット絵を編集する必要はない。
⑤Microsoft ExcelやWordのワードアート、Wingdingsなどのフォント、を活用してみてもいいかも。

この情報が皆様のお役に立てたら幸いです。

| | コメント (1)

2008.01.23

事務員さんも募集

ここ数ヶ月、見積書・納品書・請求書の発行や会計、商品発送、その他日々の業務に追われていて、ほとんど開発らしき仕事がすすんでいませんでした。

そこで、業務をサポートしてくれる事務員さんを一般募集することにしました。

事務員さん募集!

とはいっても、うちみたいな会社がホームページで募集しても、一般事務の人はなかなか集まらないのが現実なので、求人広告を出すことにしました。

選んだメディアは「アイデム」さん。営業所がうちの事務所から数軒となりなので、営業の方がすぐに来てくれました。神田に事務所を構えているっていうのは、すごくいい立地条件だと感じました。

来週の日曜日、新聞の折り込み広告に求人案内を載せます。
媒体は「アイデム」という求人広告で、東京都千代田区・文京区~総武線沿線の10万世帯以上に配られ、同時に駅などに置かれているフリーの求人紙の「地域版」にも掲載されるそうです。
とりあえず一番小さい枠サイズで申し込みましたが、すごくお得だと感じました。

| | コメント (0)

2008.01.18

PCI Expressのコンフィグ空間

Boshu

PCI Expressのコンフィグ空間を読み書きするツールを作っています。

最初の画面はよくあるPCI コンフィグ空間モニタツールのような感じですが、

Pcieman1_2


PCI Express固有のレジスタも解析できるようにしています。
細かなレジスタがいっぱいあって大変です。

Pcieman2_2

Expressのレジスタが解読できるツールがなかなかないので、作っている次第です。

まさかBus=0,Device=28なんてところにRootComplexがいるとは・・


| | コメント (1)

2008.01.12

バーストライト

Boshu

PCI Expressコアで、バーストリードができるように改良してみました。

ここでいうバーストライトというのは、PCI Expressのターゲット・ボード(FPGA)から、パソコン上のメモリへデータを一度に転送するモードです。このモードは画像のキャプチャなど大量のデータを取り込むときに使う、もっとも高速性が要求される重要なモードです。

実際に実行してみたのが下の図です。
Dma_wr

実験に使用しているパソコンは、インテルのICH9というチップセットが乗っています。このボードの現在のBIOSの設定では、PCI Expressで一度に転送できるデータサイズ(Max Payload Size)は128に設定されているようです。このため、大きなデータを転送しようと思ったら128バイトごとに区切って送らなければなりません。
その区切りがあるため、上の図のように間欠的に転送が起きています。
なお、この約束を守らずに128バイトを超えるサイズのデータを送ろうとしても無視されてしまうようです。

上の図では、128バイトのデータ転送に928nsかかっています。
つまり、実効転送レートは137MBytes/sec程度しか出ておりません。これではPCI Expressの帯域の55%しか活かしきれていないことになり、バーストリードよりも遅いという結果になってしまいました。

その原因は、マザーボード側が返してくるAckを受け取るまでは、FPGAが次のデータを送らないように待ってしまっているためです。

そこでACKを無視してフライング気味に動かすようにしてみました。

Dma_wr2

最初の3回はACKを見ますが、その後はACKを見ないようにしてみました。
こうすると、128バイトを608nsで送れるので、最大速度が211MBytes/secと理論どおりになります。

おそらくパソコンのマザーボードは、メモリにデータを書き込むためには、キャッシュの制御やSDRAMのバンク切り替えなど、いろいろとやらねばならないことが多いのでしょう。そのため最初の1回目は時間がかかるのだと思われます。
そういうわけですので、PCI Expressの最大速度でパソコンに対してデータを送るならば、ACKの制御やフローコントロール、送信バッファは必須といえるでしょう。
逆に毎秒130MBytes程度でよいならば送信バッファもACK・フローコントロールなしでも大丈夫そうです。

このIPコアはDMAの実装まで完了しましたが、この時点でSpartan3 1000の20%のSLICEを消費しました。論理合成時間はいまだに2分以下で済んでいます。
Repo

そろそろ上位層へのインタフェースを書き直したりして、来週中のリリースを目指します。

| | コメント (0)

2008.01.10

バーストリード

PCI Expressコアで、バーストリードができるようにしてみました。
DMAコントローラを作り、BAR0空間に設定レジスタをおきます。

だいたいこんな感じです。
BAR0 +0 パソコン側の物理アドレス
BAR0 +4 転送長
BAR0 +8 転送開始レジスタ

このコアを動かすには、パソコンのソフトはまずカーネルモードでメモリ確保し、そのバッファの物理アドレスを取得します。そして、BAR0+0にそのアドレスをセットします。

で、実際に実行してみたのが下の図です。

Dma_rd

PCI Expressでは規格上の最大転送長が4096バイトなので、長いデータをリードライトするには複数回に分けてリクエストを発行しなければなりません。ところが今回のデータ長は512バイトにしたのですが、なぜか64バイトのトランザクション8回に分けて発行されました。
(Read Completion Boundaryとよばれる仕様です)

PCI ExpressのTLPパケットのオーバーヘッドは20バイトあるので、64バイトのデータを送るのに84バイト必要という計算になります。
今回は切れ目無くパケットを送ってきているので理想的な転送なのですが、メモリリードの帯域は190MBytes/secでした。
最大250MBytes/secの帯域を十分に活かしきれていないのは、パソコンから送ってくる際に64バイトづつ、というのがボトルネックになっているようです。


ところで、上の波形は、ユーザプログラムが用意したバッファではなく、CPUの物理アドレス0番地からのデータを読み出しているのです。

ダミーのデータが見えているのか、それとも本当に0番地のデータが見えているのかわかりませんが、ひょっとするとPCI Expressのボードからメモリリードコマンドを送ると、OSの保護とかそういうものは関係なしに何でも読めてしまう可能性があります。
(PCI Expressからのメモリリードリクエストへの応答はハードウェアレベルでの反応であって、OSでは拒否できない?)

もし本当に任意の物理アドレスの内容が読めるなら、すごいセキュリティーホールとなる予感がします。

この問題はいずれ検証してみることにします。

Boshu

| | コメント (0)

2008.01.08

PCI Expressのリードライト

PCI デバッグライブラリを使って、開発中のPCI Express IPコアに読み書きを行ってみました。

・読み出し
使った関数は、_MemReadBlockLongで、8ワード(32バイト)です。
Rd_8dword

・書きこみ
使った関数は、_MemWriteBlockLongで、8ワード(32バイト)です。
Wr_8dword

これらの関数名にはBlockとついていますが、JTAGロジックアナライザで見てみると、1ワードの転送をN回繰り返していました。
本来はPCI Expressは1つのTLPパケットに256バイトくらいのデータを載せられるのですが、パソコンから単純にアクセスすると、1ワードにつきTLPパケットを1個発行してしまうようです。
DMAモードというか、1つのTLPに複数のワードを載せる「バースト転送」は発行されませんでした。
PCIでもバースト転送を発行させるのは大変だみたいなことがTech-Iの本にかかれていたので、同じような理由なのでしょう。

ただ、明らかに書きこみのほうが速いですね。書きこみでは1μ秒の間に32バイト書き込んでいるので、32MBytes/secといったところでしょう。読み出しはその約8分の1でした。

今からDMAモードの実装に入ることにします。

| | コメント (0)

2008.01.06

PCI Expressバスアナライザ

開発中の特電PCI ExpressのIPコアですが、マザーボードを新しくしたら動かなくなってしまいました。

Intelのマザーボードなのですが、正体不明のMessageパケットをとてもいっぱい吐き出してきます。CPUもチップセットもIntelです。いろんなアプリを立ち上げるとメッセージパケットの数が増えますので、きっとIntelのチップ同士で会話しているのでしょう。

このマザーボードもBIOSの立ち上がりで、PCIのコンフィグレジスタを設定してくるのですが、WindowsXPが起動したときにはBAR0に設定されたアドレスが消えてしまっています。これが原因のようです。
どういう経緯でそうなったのか、ロジアナの波形とにらめっこしながらK27.7・・とか読んでいても埒があかないので、PCI Expressバスアナライザを作ることにしました。

PCI Expressの生の信号のうち、TLPだけをFPGA内に作りこんだFIFOに貯め、それをRS232Cで吐き出すようにしてみました。FIFOに入れるときには、取得した時刻の情報を付与しておきます。こうすることで解析の役に立つからです。

RS232CとPCI Expressの信号の速度の差は約2万倍あるのですが、FIFOのおかげで、パソコン起動時のパケットはなんとか損失せずに読むことができました。パソコン起動時のTLPの密度は平均すると0.005%程度ということでしょう。

Pcielogana

非常にシンプルなツールで、バグも多いのですが、ロジアナの波形で見るよりもずっと楽になりました。

なんだかnullified TLPというパケットをみつけました。上手く起動しないのは、これをちゃんと取り扱っていないからかもしれません。

追記

どうやら、リカバリーステートというものが原因でした。
JTAGロジックアナライザ(バウンダリスキャン版)で調べてみたら、すぐにわかりました。
このパソコンでは、リセットがかかってから8秒くらいの間はちゃんとリンクがアップして、なにやらデータをやりとりしているのですが、突然リンクが切られてしまうようなのです。
Pciediscon

上の図で、中央の暗い部分が、リンク確立している時間です。

で、なぜリンクが切られてしまうかというと、JTAGロジックアナライザ(BLOGANA版)で調べてみたら、すぐにわかりました。
PCI Expressはリンクが確立すると、L0ステートというステート(通常の通信が行えるモード)に移行します。

バスのリンクアップが終わり、L0ステートに移行し、PCIコンフィグレジスタとかいろいろ読み書きしたところで、このパソコンはいきなりTS1パケットを送ってきているのです。TS1パケットというのは、PCI Expressのリンクが確立する前にお互いの情報を交換するためのパケットなのですが、通信中に再確認のような意味でTS1を送ってくることがあるようなのです。
Pciediscon2

本来ならば、TS1を受け取ったらL0ステートを離れ、リカバリーステートに移行しなければなりません。
パソコン側は、ターゲットボードから返信のTS2が送られてくることを期待しています。
リカバリーステートで正しくお互いの情報をやりとりすれば再びL0に戻れるのですが、ここで失敗すると最初のDetectステートに戻らなければなりません。(ゴール直前でふりだしに戻る感じ)

本来ならリカバリーステートをちゃんとつくるべきなのですが、いきなりDetectステートに戻すようにしてみたところ、見事にうまくいきました。つまり、何らかのエラーが起きたら、バスの状態をリセットして最初からリンクアップしなおすようにしたわけです。
こうしたら、このパソコンでもPCI Expressはリンクアップし、Windowsが起動するとPnPで認識され、問題なく通信できることが確認できました。

バスアナライザなんて作らなくてもよかったかも。いやいや、きっとこれから役に立つときがくるはず。

Boshu

| | コメント (0)

2008.01.01

あけましておめでとうございます

あけましておめでとうございます

皆様、昨年は絶大なるご支援をいただきまして誠にありがとうございました。

平成20年という年は、特電にとって、2つの意味で変革の年となります。

第一の変革としては、自社製品の開発に注力するということです。
昨年は、自社製品に開発に費やす時間がほとんどなかったという反省のうえにたって、今年は自社製品に注力する一年にしたいと思います。

現在進行の自社製品プロジェクトとしては、
・MITOUJTAG Version 2
・ソフトロジック製品
・PCI Express IPコア
・携帯版スミスチャート
・JTAG信号解析装置
などがあります。

まずはPCI Express IPコアを最優先でリリースさせていきたいと考えています。

また、MITOUJTAG Version 2も、開発を進めております。
多くの皆様にご愛用いただいて参りましたMITOUJTAG BASICは、度重なる機能追加と拡張によって、もはやこれ以上改良することが困難な状態となってしまっています。そこで、昨年の11月半ばからMITOUJTAGのコードをすべて一から書き直すための研究を重ねてまいりました。
今年はMITOUJTAG Version 2として、新しくメジャーバージョンアップを行います。
MITOUJTAG Version 2では、卓越されたプロジェクト管理機能や、ヘルプがいらないほどのわかりやすい操作体系、各種モジュールの連携動作、イレギュラーなJTAGデバイスの取り扱い、クラスタデバイスの取り扱い、アドバンスドJTAGファンクションジェネレータの包含などを予定しております。

第二の変革としては、今年から徐々にではありますが、業務の主軸を、「高等の科学的専門知識を要求される技術」にシフトしていきたいと考えています。
これまでの特電の業務を振り返って見ますと、MITOUJTAGや数多くの受託開発案件がありました。これらは最初のアイデアを思いつくのは容易ではありませんが、それらを実装するには資本と経験と時間があればできてしまうという特徴があるものでした。
年々激しくなる国際競争の中で勝ち抜いていくためには、今後は「資本と経験と時間」では決してできない分野に挑戦していきたいと考えております。

現在進行の自社製品プロジェクトが完了した後は、偏微分方程式や、逆畳み込み、NP問題、尤度関数、HMMなど、高等の数学が必要となる問題に対して電子技術で挑んでいくような、そういう会社に変革していきたいと考えております。
(このような会社に変わってゆくためには、特電は多くの優秀な人財を必要としています。もし本ブログをご覧の方の中で、真の技術を楽しみたいという方がいらっしゃいましたら、是非とも力になってください。特電では随時、正社員・契約社員を募集しています。)

皆様、今後ともよろしくお願いします。

| | コメント (0)

« 2007年12月 | トップページ | 2008年2月 »