« October 2006 | Main | December 2006 »

2006.11.28

SystemCを使ったハードウェア設計 その3

SystemCを使ったハードウェア設計勉強中

sc_traceの件は引数が間違っていた。(オブジェクトの参照が値渡しになっていた)
無事解決。sc_stringをごちょごちょしていたときに変更したみたい。
参照渡しだとOKで、値渡しだとcoreを吐く理由がいまいち良くわからないが、sc_module
内の仮想関数周りかもしれない。

後半に入ると、合成の話に結構ページが割かれていて面白い。筆者がフォルテの中の
人だからCynthesizerの話だと思うが、頑張って理解すれば有る程度予想した合成
結果を得られる。カタパルトも、入出力の部分が違うがループの展開とかパイプライン
の生成とかはよく似た感じだ。

あとはFIRのサンプルをうちこんでみよう。

| | Comments (0) | TrackBack (0)

loop loop loop

System Design With Systemc、6章まで読んだ。

C++の機能との組み合わせが、恐ろしく面白い。
便利とかすごいではなくただ単に「面白い」。

サンプルを打ち込んでみてちょっとはまる。
シミュレーションがすぐに終わってしまう。print文(cout)を入れて問題解析。
複数あるモジュールのうち、一つだけSC_CTHREADの処理に無限ループが無かった。
だから、1回実行し、そのSC_CTHREADが次のSC_CTHREADにデータを書き込まない
から全イベント終了でシミュレーションが終わってしまう。

サンプルのように、デストラクタでシミュレーション終了時のステータス
(実際に行った試験の実行回数とか)を表示するのはこのトラップに早く気がついて
良いと思う。が、どこのモジュールが止まったのかはわからない。

シミューレーションが終わった時に各プロセス(SC_CTHREAD)の状態を全部ダンプ
してくれるとうれしいと思う。sc_fifoのreadがブロックされているとか、ループ
を抜けて最後の}まで実行して終了したとか、処理の途中だけどsc_stopで無理矢理
終わったとか。

ちなみにこのループ忘れは自分自身のデストラクタでは検出できない。処理が
終わった時点(}を抜けた時点)では、デストラクタは呼ばれないから。
while(ture){}の後に、抜けたことを示すメッセージを入れたら良いかと思ったが、
そんなメッセージを入れるくらいならwhile(ture){}を忘れない。

とかとか、いろいろ考えていると面白い。

| | Comments (0) | TrackBack (0)

SystemCを使ったハードウェア設計 その2

SystemCを使ったハードウェア設計勉強中

ソース中で説明もなくesc.hがincludeされている。Cynthesizer辺りのヘッダーと
にらんで先に進む。
sc_outへの書き込みが、同じ信号でも=で代入されていたり.write()関数を使っていたり
してやや混乱。初期化は=、ループの中はwrite()かと思ったがそうでもなく、ここも
気にせず先に進む。この辺りが、若干初心者に厳しい気がする。

BCAモデルを打ち込んでみるが、sc_traceが上手く動かない。
rgb8_tというユーザー定義のclassをtraceするとこんな感じでcore dump。


SystemC 2.1.v1 --- Nov 24 2006 08:14:49
Copyright (c) 1996-2005 by all Contributors
ALL RIGHTS RESERVED
WARNING: Default time step is used for VCD tracing.
VCD Trace ERROR:
Traced object "rgb_r" has 0 Bits, cannot be traced.

VCD Trace ERROR:
Traced object "rgb_b" has 0 Bits, cannot be traced.

19 [main] run 4540 _cygtls::handle_exceptions: Error while dumping state (p
robably corrupted stack)
Segmentation fault (core dumped)

他のsc_signalは上手くvcdに落とせているので、オーバーライドした部分がおかしい。
つーか、C++ってこんな頻繁にcoredumpするような言語じゃない気がする・・。

| | Comments (8) | TrackBack (0)

2006.11.24

今日の読書

個人でwebサイトなんてやめておけ
なんで買ったのかわからないけど、うだうだと後半流し読みで読んでしまった。
webで何かを公開する心構えについて考えてあるんだけど、そこまで気負わなくても
よくね?、というのが感想。
みんなで、昨日の晩ご飯の話とか、猫の写真とかでうpしてテクノロジーの無駄遣い
しようぜ!

コンピュータグラフィックス 理論と実践
出張のたびにコピーを持ち出して、18章まで読んだ。
あと3章、頑張ろう。

| | Comments (0) | TrackBack (0)

SystemCのParameterize

System Design With Systemc、6章から

SystemCではParameterizeのタイミングが3つ有る。

(1)コンパイル時
C++のテンプレートとか、#defineとか。

(2)elaboration時
sc_main()が呼ばれる前。コントストラクタの引数とか

(3)実行時
頑張れば実行中もParameterizeが可能

なるほど。(1)がC++っぽいし、論理合成ツールとも相性がよさそう。

| | Comments (0) | TrackBack (0)

System Design With Systemc勉強中

System Design With Systemc、4章まで読んだ。

Systemc: from the Ground Upと比べても、密度が濃く面白い。

以下メモ
p17 SystemCのinterfacesは、sc_interfaceを継承する。
ソースを見ていると、constructorはprotected、destructorは
virtual functionで定義。

virtual void register_port( sc_port_base& port_,
const char* if_typename_ );
virtual const sc_event& default_event() const;
後は、仮想関数としてこの2つが定義されている。
portが接続されるときに、register_port()が呼び出される。


p19 sc_portでは インターフェイスを返す演算子として、->()が
オーバーロードされている。インターフェイスの部分はC++のtemplateを使用。

p32 Event Findersがよくわからないから後で戻って読もう。

p52 RTL Medelはsc_in, sc_out, sc_inoutのみをportとして使う。

p72 ! logical notと ~ bitwise notの違いに注意

p75 Fixed point Parameters and Contextsもよくわからないので後回し

p78 以降のサンプルは一度打ち込んで動かそう。

| | Comments (0) | TrackBack (0)

2006.11.21

CygwinでSystemC

SystemCを使ったハードウェア設計を勉強中。
cygwin環境で発生するエラーはこれ

assertion "m_stack_size > ( 2 * pagesize )" failed: file "../../../../src/sysc/k
ernel/sc_cor_qt.cpp", line 85
Aborted (core dumped)

ソースをみて、thread周りとわかればgoogleで解決。
インストール時に、make pthreadsを実行してから、make installでOK

| | Comments (0) | TrackBack (0)

sc_trace

SystemCを使ったハードウェア設計を勉強中。

tb.hに誤植があるが、全然問題ないレベル。
そして、sc_traceではまる。

void sc_trace(sc_trace_file *tf, const rgb8_t o, const sc_string& n) {
sc_trace(tf, o.r, n + "_r");
sc_trace(tf, o.g, n + "_g");
sc_trace(tf, o.b, n + "_b");
}

この記述で下のエラー

cd /home/natu/study/dw_systemc/
make -k
g++ -g -I/usr/local/systemc/include/ -c main.cpp
In file included from main.cpp:2:
class.h:64: error: expected `,' or `...' before '&' token
class.h:64: error: ISO C++ forbids declaration of `sc_string' with no type
class.h: In function `void sc_trace(sc_core::sc_trace_file*, const rgb8_t&, int)':
class.h:65: error: `n' undeclared (first use this function)
class.h:65: error: (Each undeclared identifier is reported only once for each function it appears in.)
*** Error code 1 (continuing)
g++ -g -I/usr/local/systemc/include/ -c rgb2yuv.cpp

格闘すること数時間。
要するにsc_traceは、ファイルポインタ、オブジェクトのリファレンス、文字列(の
リファレンス)がわたってくれよさげ。をincludeして、こんな感じで回避。

void sc_trace(sc_trace_file *tf, const rgb8_t o, const std::string& n) {
sc_trace(tf, o.r, n + "_r");
sc_trace(tf, o.g, n + "_g");
sc_trace(tf, o.b, n + "_b");
}

sc_stringとstd::stringで相互変換してくれるのだろうか。(ソースを追った感じでは
sc_stringは、std::stringを継承しているわけではなく、1から書かれていた。)
そして、FreeBSDとCygwinで動きが違う。というかcygwinはassertで落ちる。orz

ちなみに環境はこんな感じ。
FreeBSD、gcc 3.4.4
SystemC 2.1.v1 --- Aug 30 2006 11:49:29

Cygwin gcc 3.4.4
SystemC 2.1_oct_12_04.beta --- Jul 28 2005 09:25:55

| | Comments (5) | TrackBack (0)

2006.11.20

SystemCの書籍 2006年11月

本を2冊買ったので更新

(1)Advanced Verification Techniques: A Systemc Based Approach For Successful Tapeout

(2)Transaction Level Modeling With SystemC: TLM Concepts And Applications for Embedded Systems

(3)Systemc: from the Ground Up (終了)
邦訳は基礎から学ぶSystemC
感想はこちら


(4)System Design With Systemc
邦訳はSystemCによるシステム設計
chapter2まで読んだ。(3)に比べると説明が少ないが密度は高い。勉強中。

(5)SystemC Kernel Extensions for Heterogeneous System Modeling: A Framework for Multi-MoC Modeling & Simulation

(6)Advanced Verification Methodology Cookbook

(7)よくわかる SystemCによるシステムデザイン入門
感想はこちら


(8)C/C++によるVLSI設計―SystemCによるJPEGコーデック設計

(9)Systemc: Methodologies and Applications

(10)A SystemC Primer
入手困難。アマゾンを信じてまとう。


(11)SystemCを使ったハードウェア設計
回路が(3)に比べると実践的(FIRフィルターとか、色変換とか)なので、実際に動かしてみようと思う。勉強中。

(12)System Cプログラミング基礎講座
ET2006でフライングゲット!基本的なところから書いてある。初期のVHDLの本みたいな感じ。

パソコンの前で勉強の時間が取れたら(11)、電車の中で(3)を読む毎日。

| | Comments (0) | TrackBack (2)

2006.11.14

Co-SIMにおけるMemory Optimization

Co-SIMの本から。

プロセッサがアクセスするメモリを、ISSの中で閉じてしまうこと。
これだけで高速化がみこめる。ISSを使っている以上、プロセッサ周りは
メモリのアクセスがほとんどの負荷になるのは容易に想像できる。

だけどそうしてしまうと、DMAとかバスのパフォーマンス評価が
できなくなってしまう。ROMだけでもISS持って行けるといいと思う。

| | Comments (0) | TrackBack (0)

Co-Verificationのアーキテクチャ

Co-SIMの本から。

・Host-Code Mode with Logic Simulation
 ソフトウェア部分をWS上でコンパイルしてnaviveコードで動かす。
 これと、シミュレータを協調させて動かす。
 
・ISS with Logic Simulaton
ISSからAPIを経由して、シミュレータと連携させる。

・C simulation
RTLをC言語に変換し、全てnativeコードで動かす。

・RTL Model of CPU
CPUのRTLコードを使って、シミュレータで動かす。

・Hardware Model with Logic Simulation
ベンダーが用意するModelを使って、シミュレータで動かす。

・評価ボードとシミュレータの組み合わせ
 シミュレータ側にBFMを用意し、評価ボードからAPIを経由してシミュレータと
 やりとりする。
 
・In-Circuit Emulation
 エミュレータを使う。エミュレータと評価用チップの組み合わせもあり。
 
・FPGA Prototype
いわいるプロト。これが僕の仕事。

いろんな組み合わせがあり、それぞれメリットデメリットがある。
この本には出てこないけど、実データを扱えるかどうかも結構ポイントだったり
する。つまり、音声処理なら実際に処理後のデータを音声として聞けるかどうか。

Co-SIMのアーキテクチャ的には、異なるシステム間の同期もポイント。

実際にシステムを作る場合は、コストと立ち上げ期間も大きなポイントだ。

| | Comments (0) | TrackBack (0)

Co-VerifictionとCo-Simulation

Co-SIMの本から。

Co-Verifictionは下に書いてあるとおり、検証のプロセス。
Co-Simulationは、基本的にいろんなシミュレータを協調させて動かす。
(シミュレーション手法の一種)

| | Comments (0) | TrackBack (0)

Co-Verificationの定義

Co-SIMの本から。


HW/SW Co-Verification is the process of verifying embedded system
software runs correctly on the hardware design before the design
is committed for fabrication.

| | Comments (0) | TrackBack (0)

EmulatorとAccelerator

Co-SIMの本から。

どちらもWS(Workstation)と専用ハードウェアの組み合わせだが、以下の
違いがある。

エミュレータ
・WSではテストベンチを動かさない
・ハードウェアがMasterで、WSがSlave。
・CLKはハードウェアで生成

アクセラレータ
・テストベンチをWSで動かすことが可能
・WSがMasterで、ハードウェアがSlave
・CLKはWSが生成

アーキテクチャ的にはどちらがMasterかがポイント。なるほど。

| | Comments (0) | TrackBack (0)

Co-Verification of hardware and Software for ARM SoC Design

Co-Verification of hardware and Software for ARM SoC Design読みました。

なにげにアマゾンで買った本ですが、思いっきり当たりでした。
いわゆる、softwareとhardwareのCo-SIMに関して書かれた本です。

一般的な手法から、各エンジニアの立場の違いなど、著者の経験を元に
詳しく説明してあります。最初の方は用語集のような感じですが、
途中からは具体的にいろいろと書いてあります。
ちなみに著者はVerisityの中の人です。

有料/無料セミナーなどで、Co-SIMの話(例えば某メンターのSeamlessとか)
は聞くのですが、具体的にAMBAのプロトコルレベルでどうしたとか、
各手法のメリットデメリットの違いなどまで言及されることはほとんどなく、
とても勉強になりました。

英語も難しくなく、上海出張のホテルと空港で読み切れました。

メモ:VHDLがAdaに近いのは、両方ともDepartment of Defense出身だから。

| | Comments (0) | TrackBack (0)

2006.11.13

はにーとらっぷ

上海へ行って初日の最後は、「マッサージ行きましょう」といわれて
かなりドキドキ。すごいマッサージで弱みを握られて、言いなりに
なるのかと生きた心地がしなかった。

結局足をもんでもらっただけだけど、女の人が「キモチイイ?」と
聞いてくるので僕も「気持ちいい」と答える。また「キモチイイ?」
と聞いてくるので「気持ちいい」と答える。

「キモチイイ?」
「気持ちいい」
「キモチイイ?」
「気持ちいい」

録音されたら十分ハニートラップです。ありがとうございました。

| | Comments (0) | TrackBack (0)

上海

仕事で上海行ってきました。
もうね、何もかもすごい。ビルもすごい、人の熱意もすごい、
車もすごいし、自転車もすごい。それで外人がいっぱい。
日本企業いっぱい。

向こうのエンジニアに会ったけど、英語、漢字交じりでなんとか
コミュニケートしてきた。。挨拶くらいは中国語も勉強しないと、
んで、僕の英語力が全然足りない。

2日目くらいから、お互い全然英語が通じないのがわかるから、
やばそうな単語は全部先に紙に書く。「realize」と紙に書いて、
そこを指さしながら「Can you realize the system ?」と聞くと
一発で通じる。confidentialも、abstractも英語で書けばすぐに通じた。
ちなみに、機密も抽象も漢字だと書けない。orz

この先、自分のキャリアが大きく変わりそうな出張でした。

| | Comments (0) | TrackBack (0)

2006.11.04

今日の読書

ユーラシア大陸も統一したので、勉強再開。

Effective C++
なんとか最後まで読めた。有名な本で、レビューもたくさんあるので簡単に。
良かったですよ。必読というのにふさわしい本だと思います。


SystemCを使ったハードウェア設計
これは買っただけ。再来週くらいから頑張って読んでいこうと思う。

低度情報化社会
筆者の経歴が嘘くさい。すくなくともエンジニアとしての考察は皆無に近い。
情報処理1種合格を前面に出しているのが、うさんくささ爆発。

その辺りを割り引いて読めば、そこそこ楽しめると思う。
無理して読まなくても良い本。
まあ、我々はWeb2.0に到来によってどんどんバカになっていくのだ。

成功学キャラ教授 4000万円トクする話
ファウストの連載からずっと読んでいたが、ようやく単行本に。
そこそこ楽しく最後まで読めました。何かいてもネタバレになるのでノーコメント。
点数は70点くらい。

| | Comments (0) | TrackBack (0)

お葬式

嫁の祖母が亡くなったので、お葬式に行ってきた。
お通夜、お葬式、初七日の3連戦だったけど、なんとか乗り切りました。
田舎だし、僕自身が信仰心がないので、結構お葬式は苦痛だ。
力仕事もやらされたし、結構半泣き。

式が始まると、僕の役目は香典係。ジンギスカンでゆうところの、
血縁だけど使えないので、後方の生産都市を守るようなそんな位置づけ。
こっちの方だと、もらった香典袋に糸を通して抜かれないように
するってのを初めてしった。良い香典袋だとなかなか穴が空かなくて
必死。普通に千枚通しを人差し指に突き刺してしまった。香典血まみれ。

なんか式の最中は「数珠は手首を守る」とか「Wカップで、人が殺せる」
とかどーでも良いことばっかり思い出して大変だった。

坊さんがお経を読んで、みんなで合唱しながら一礼するところで、
今まで静かにしていた娘が「いたーだきます☆」と言った所で
癒された。

| | Comments (0) | TrackBack (0)

ジンギスカン

勉強しないといけないのに、ジンギスカンIVを夢中でやってしまった。
医療の都みたいな所に入ると懐妊率が100%になるので、そこからは
年間5~10人くらいのペースで子供が生まれる。
最後は寿命との戦いだったが、なんとか全国統一。
この間、仕事のクオリティ下がりまくり。

気を取り直してがんばろう。

| | Comments (0) | TrackBack (0)

GNU Development Tools

ここで買って読みました。
良い本です。思ったよりもコマンドの実行結果が多く、それほど難しくはない。
FreeBSDで初めてshared libraryを作ってみた。結構簡単で驚いた。

この手の話は、国産の組み込みマイコンのツールキットが勉強用としては、
よいんでしょうね。gccほど余計な機能はないですし、いわゆるリンカ
スクリプトも自分で書かないといけないし。ドキュメントは日本語だし。

この本に書いてあることをある程度説明できない人っていうのは、C言語の
プロを名乗ってはいけないと思うのだがどうだろう。組み込みマイコンをし
てきた、という人のスキルを確認する一つの方法として、「リンカの設定を
自分でできますか?」を使っている。あるいは、「自力でプログラムを
ROM化できますか」も良い。ここが説明できるかどうかってのは、組み込み
プログラマとして一人前かどうかの境目だと思う。

この本は僕基準で組み込みプログラマとして、一人前になれるかどうかの境目
について書かれている。組み込みは、ブート処理とROM化というもう一つの壁
があるが、それでもリンカはちゃんと使えないとCPUは動いてくれない。

職業でCプログラムを書く人で、リンカの動きを説明できない人にお勧め。

| | Comments (0) | TrackBack (0)

My job want to India

原書で持っていたけど、時間が無いのであきらめて邦訳で読みました。
自分の立ち位置をもう一度考えるきっかけになりました。

この本自体は、インド人に仕事を奪われていくアメリカ人の話ですが、
インド人を新人に置き換えても十分通用する。

JavaとBeOSの比較はおもしろい。BeOSは魅力的な環境だったが、環境自体
がぽしゃってしまって、BeOSへの投資は無駄になった。SystemCとか、
SystemVerilogもこの危険性はずっと持っている。でも、どこかで
リスクを取って新しい技術に挑戦していかないと後がない。

Javaエンジニアを募集するのに、smalltalkを条件に入れた話もおもしろ
かった。結局そういうことだ。本質を理解している人間を集めるには
そういう条件を組み合わせるべきだと思う。VerilogとJavaとか、
VerilogとC++とかそういう条件での求人も増えてくるだろうと思う。
SystemCもSystemVerilogもオブジェクト指向の知識必須+HDLの知識も
いる。

「自分の人生を他人任せにするな」とか、心を打つ表現がいくつもある。
ニッチなところで専門家をめざしつつ、ジェネラリストという難しい
道のりを示している。「他人のコードを通して自分の力を思い知れ」
「成功におぼれるな」も良かった。

最後に、リーダーとして気になった点を整理。
・報告できる成果を毎日上げよう
 → そういう仕事の振りを考えよう。また、工夫した事を聞き出すようにしよう。
・間違いに気がついたら、問題として取り上げ、責任を負い、そして解決策
 を考える。

仕事に自信を持ったり、自信をなくしたときに読むのがおすすめ。
自分の仕事/スキルを見直したくなります。

| | Comments (0) | TrackBack (0)

秋葉原

SystemCのセミナーついでに秋葉へ。ていうか、会場が秋葉。
秋葉の駅をスーツ着た人間が一斉にビルに向かって歩いていくの
違和感ありあり。
時東ぁみの巨大ポスターをみてなんか落ち着いた。

ジンギスカンで箱庭ゲームに夢中になったので、シヴィライゼーション
を探しに電気街へ。2か3の安いのを買おうと思っていたら、全部入り
見つけて速ゲチュ。uho。さすが秋葉。

なんかカードゲームついていたので、娘にあげたが全然興味をしめさず
それっきり。

| | Comments (0) | TrackBack (0)

systec & systemverilogセミナー

行ってきました。
前に書いたとおり、すっかりsystem verilogを、「信号をまとめて
つなげられる」「検証言語の追加」「PLIがちょっと変わるらしい」
程度に考えていました。

全然違った。orz

普通にclassとか、継承とか、仮想関数とかでてくるの。ありえねー。
説明を聞いた感じだと、C++よりはjavaに近い。多重継承ができな
かったり、ガベコレがシミュレータ任せだったり。SystemCと比べた
ときに速度が問題になるのも、C++とJavaの構図ににている。

SystemCのセミナーに行くとSystemCは駄目だと思い、SystemVerilog
のセミナーにいくと、SystemVerilogは駄目だと思う。
ようやく、下のコメントにかかれている棲み分けが見ててきた。
軸足をRTLに置くならSystemVerilog、軸足をC++におくならSystemCだ。

画像の評価環境などで、ソフトウェアによるアルゴリズム検証環境が
できているならSystemCを使った方がよい。SystemCは何でも有りだ。
Win32APIだろうが、システムコールだろうが何でも呼べる。
DPI-Cなんて関係ない。

逆に今あるRTLがスタートラインなら、SystemVerilogしかありえない
SystemCとRTLのインターフェイスは、どこかでSystemCの記述を
RTLレベルに変換しないと行けない。だったら、SystemVerilog
の方が立ち上がりが早いし、RTLをターゲットとした検証用機能が
デフォルトで存在する。

今の学生さんにアドバイスをするなら、なんちゃってVerilogで
遊ぶくらいなら、C++かJavaをガチで勉強した方が良い気がする。
3年後くらいには「Verilogは今いるリソースで十分です。これからは
SystemCや、SystemVerilogについて行けない人は必要ありません」
になっているかも・・。
大手さんなら十分あり得るかもね。彼らはVerilogエンジニアは月
いくらですぐに手配できるから。

30過ぎたけど、もっと勉強がんばろう。

| | Comments (0) | TrackBack (0)

« October 2006 | Main | December 2006 »