ラベル LSI開発 の投稿を表示しています。 すべての投稿を表示
ラベル LSI開発 の投稿を表示しています。 すべての投稿を表示

2012年6月3日日曜日

ネットワーク関連の本、下から上まで


最近、面白そうなネットワーク本を見つけたので、それを含めて蔵書の紹介。どれも名著と呼ばれるものばかりのはずです。ただ、書いてみて気づいたんだけど、ここで一番上のレイヤーって言ってる本ですら、今時のほとんどの人にとっては目に触れる事のない最下層レイヤーかも・・・。それでも気になるって人だけ読んでください。

Principles and Practices of Interconnection Networks

京のネットワークコントローラを設計する際に散々お世話になった教科書。ルーティング、フロー制御、トポロジについて論理からハードウェア設計まで丁寧に説明されています。シミュレーションによる性能評価のノウハウも書かれてるので、この分野(インターコネクトアーキテクチャ)で研究しようと思ったら、これ一冊読むだけでスタート地点まで行けます。

Interconnections

古本が安く出てたので気になって購入。まだ読んでないんだけど、ハードウェアとIPの間を埋めてくれそう。ようするに、ひたすらL2中心の分厚い書籍(笑)。この本でようやく上から下まで繋がる気がします。

詳細TCP/IP (TCP/IP Illustrated, Volume 1: The Protocols)

日本語だと初版しか出てないのかな。SOFTBANK BOOKS版とピアソンの新装版があって、僕は古いSOFTBANK BOOKS版の頃に買って読みました。TCP/IPの基礎がすべて詰まっていて、ソフトの人が必要になるであろう知識としては一番下のレイヤーから書かれてます。たぶん、自作ウェブブラウザーを開発しようと思って買ったんじゃなかったかなぁ? 1997年です・・・。
有名なプロトコルについては簡単に説明が書いてあるのでRFC読むのが面倒な時とか、時々振り返って読んでます。会社の人に2版を進められてるので、そのうち買うかも。現在僕にとって一番勉強しておかないといけないレイヤー。

マスタリングTCP/IP SSL/TLS編

仕事でWebSocketに携わることになって。SPDYとの関係もあったのでSSLの理解は避けて通れない予感がして覚悟を決めて読んだ一冊。すべてを理解したとは言い難いかもしれないけど、だいぶ見通しは良くなったかな。なんだかんだでSSL周りのコードをいじる事もあるんですよね。上記TCP/IP本のセキュリティに関する補遺的な位置づけで読むべき本です。

UNIXネットワークプログラミング第2版 Vol.1 ネットワークAPI: ソケットとXTI

10年以上前に働いてた会社で初版を読みました。当時は会社で唯一のWindowsプログラマだった事もあり、WinSock2の本も読んでましたけど・・・あまり覚えてないなぁ。で、会社を辞めて大学に戻ってから、手元にも一冊ないと不便だなぁ・・・と買ったのが第2版。なので、結構読んでないところもあります。
ソフトウェア屋さんにとっては上の2冊が理論で、この本が実践。やっぱりソフトの方がハードより勉強する事多いのかなぁ。

2009年1月31日土曜日

つまらないけど重要

趣味で開発している時には問題にならないけど、仕事で開発となるとついてまわるのが仕様書の問題。特に大きい会社では仕様書を書くのに割く時間は馬鹿にならない。ソフトウェアの場合、doxygenみたいなツールを使えば、わりとつまらない図を書いたりする時間も削減できたりするんだけど、ハードウェアだとなかなか良いツールがない(知らないだけ?)。

という事で、ソースから図を自動生成しようかな・・・とか考える。とりあえず
  • スクリプトでお手軽かつ適当に生成したい(テキストベースが楽ちん)
  • Wordに貼付けた際に汚くならない(ベクトルデータが良い)
って方針ですか。そう考えて思い出したのがSVG。XMLが出てきた当時、どう使うと便利なんだろう・・・とか思い悩んだもんですが、今や空気みたいなもんですね。出力するにはテキストが楽。でも入力時に解析するにはバイナリの方が楽。。。そんなわがままを受け入れてくれるのがXMLのうれしいところです。

さっそくSVGの仕様書(*1)を眺めてみたわけですが、結構シンプルで簡単。仕様書にも図付きでサンプルが載っていて、みながら数分で基本的な図形は作れるようになります。あとは、ここで理解したタグをスクリプトから自動生成してやるだけ。RTLからの変換にはRubyを使いました。って事でできたのが下の図。こんな馬鹿げた図でも、VisioやExcelでヘロヘロ作っていたらどんどん時間が飛んでいきます。くだらない事にタラタラ時間使って「忙しい」とか言う人間にはなりたくないものです。作業の効率化は研究者、技術者にとって永遠の課題です。

ソースはこんな感じ。お手軽ですよね。
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<g>
<text fill="black" x="62" y="50" font-size="6">RI2S1_DATA</text>
<line stroke="black" stroke-width="1" x1="50" y1="53" x2="250" y2="53"/>
<polygon fill="black" stroke="black" stroke-width="1" points="244,50 244,56 250,53"/>
</g>
... 中略 ...
</svg>
生成したSVGのプレビューや変換にはInkscape(*2)を使いました。Ubuntuからはapt-getでヘロっとインストールできました。EPSへの変換ができます。SVG Import Filter(*3)を使えばOpenOffice経由で色々と変換も可能。いきなりWMFとかにも出来るんだけど、グループ化を解除すると黒い豆腐になる問題があって、どういう経路で変換するのがベストかは今のところ模索中です。

*1: Scalable Vector Graphics (SVG) 1.1 Specification
*2: Inkscape
*3: SVG Import Filter for OpenOffice 2.0

2009年1月2日金曜日

お金をかけずにSystemVerilogを使ってみる

設計に関して言えば、まだまだ他のツールチェインとの相互運用の面で問題が起きやすく、手放しに喜ぶ事のできないSystemVerilogですが、検証に関して言えば逆にVerilogなんかじゃやってられません。会社で使う分にはライセンスに困らないので普通にIUSとかQuestaを使えば良いのだけど、個人で使うとなると・・・わりと選択肢がないです。

フリーなVerilog処理系で有名なのはIcurus Verilog。ウェブなんかではSystemVerilogにも対応してるとか書いてるページもあるんですが、それは嘘。引数の互換性を持たせるためにVerilogのバージョンを指定できるようになってますが、パーザは引数を見ずに、全てのモードで同じ動作をします。

という事で商用の評価版として重宝しているのがModelSim。ModelSim Xilinx Edition-III Starterが制限付きながらも利用できます。Windows版しか利用できないのが残念ですが・・・。あくまでインストールしたコンソール端末だけで利用せよ、との意図で、リモートデスクトップからログインしているとライセンス違反で起動できません。そうなると、Cygwinを入れてsshdを立てておき、sloginしてコマンドを叩く、って使い方をするしかありません。もちろんちょっとした試験にはこれで十分なんですが、波形を表示しようとするとちょっと面倒。wlfをvcdに変換してscpしたり、gtkwaveを使ったり。あるいはVNCを使うのもありですが。。。もう少しなんとかならんかなぁ、って事でLinux+wineにインストールしてみました。って事で、以下書きメモです。

  1. Configure Wineのアプリケーション設定でWindowsのバージョンを「Windows 98」に設定。
  2. Configure Wineのドライブ設定でCドライブの詳細設定を選びシリアルを適当に設定(8桁の[0-9A-F]です)。
  3. インストーラから標準インストール(mxe_3_6.3c/setup.exeを使いました)。
  4. ライセンス申請
    • インストーラからの流れでうまくいかない場合、Modeltech_xe_starter/lic_request.txtの6行目に書かれているURLを叩けばライセンス申請に入れる
    • lic_request.txtで最後から2番目の行に「Disk Serial Number」の行がなければシリアルの取得に失敗してるので、上記のURLのQueryにも「ds=xxxxxxxx」(xxxxxxxxは2で設定したシリアル番号)を追加してやる必要あり。
こんな感じでうまく動いてそうです。あとはvlib.exe、vlog.exe、vsim.exeあたりに

--- /usr/local/bin/vlib ---
#!/bin/sh
exec wine $HOME/.wine/drive_c/Modeltech_xe_starter/win32xoem/vlog.exe $*
------------
こんな感じのラッパーを用意してやれば、ほぼLinux版のつもりで使えそうです。とりあえずovm-2.0.1のexample/tlm/tlm_fifoが動くのは確認しました。

そんなこんなで、近々OVMあたりも紹介したいなぁ、と思ってます。

追記(2009/1/4):バージョン設定についてはmodelsim.exe、vsim.exe、vish.exeあたりを個別に行っておけば、Default Settingsは変えずにOKっぽいです。

2008年9月14日日曜日

POWER6の物理設計

あまり新しい話題でもないですが、IBM Journal of Research and DevelopmentにてPOWER6の特集が組まれていまして。その中でも気になっているのがIBM POWER6 microprocessor physical design and design methodologyって記事です。

図2に設計フローが紹介されているんですが、これによればPOWER6はVHDLで論理設計を行っているんですね。今までゲートレベルで設計していたプロセッサメーカも徐々にRTL設定にシフトしてるって事でしょうか。

面白いのが、RTLへ移行したタイミングで周波数が一気に上がって、でも複雑なOoO制御は止めて・・・という、直感とは違う結果が出ていること。後者は電力から来る要求で、そもそもアーキテクチャをダイナミックに変更できたというのがRTLの成果なのかもしれませんが。周波数に関しては、ゲートレベル設計が有利というのはもはやアセンブラプログラムが速いってのと同様の幻想なのかもしれません。

System z10の特集はまだだけど、同じような傾向があるのでやっぱりRTL設計なのかな。

気迫と勘だけで作ってる某社とは違って、きちんとサイエンスしてるな、と思います。

追記:設計フローの基本はPOWER4の頃から変わってないとの事で、POWER4の特集を調べたら当時からVHDLで論理設計をしているようでした。ただ、物理設計周りの人手でやっていた部分がだいぶ自動化されたようですね。