goo blog サービス終了のお知らせ 

組み込まれたエンジニア

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

PapyrusによるNSL開発方法  ステップ・バイ・ステップ(3/23改訂)

2010-03-22 15:07:26 | Weblog
多少、手順を知っていないと、うまく合成可能なコードができないので、ステップを追った手順書を作ってみた。

PapyrusによるNSL開発ステップ・バイ・ステップ(PDF) 3/23改訂

この手順通りに作業すると、論理合成可能なNSLが作成できる。

現在、NSLの機能のうち、Papyrus対応をサポートしていないものに、interface宣言がある。ArgoUMLでは、ステレオタイプで指定するようにしたが、Papyrusのステレオタイプは、プロファイルを適用しないと使えず、少し不便なので、別の方法を考えるか、プロファイルを本格的にサポートするべきか決めかねている。

クラスをprotectedに宣言したら interface宣言とみなすなどとしてもいいのだけれど、Papyrusではクラスの属性変更がダイアグラムから分からないので、多少不便。→ protectedクラスはinterface宣言を付けるようにしました。(3/23)


Papyrus UMLからのコード合成

2010-03-20 16:11:06 | Weblog
UMLツールは、ツールごとに、生成するXMIが微妙に異なる。
これは、メタファイルとして「それらしい形」になっていればいいという判断だろうけれど、XMIから、いろいろと処理を展開する合成系には不便な話だ。そもそも、UMLとXMIに関しては、XMI2以降は標準がなくなってしまい、あくまでもメタ情報ということになっていまっているので、混乱は今後も続くのだろうと思う。

UMLtoNSLのコード合成は、ArgoUMLとMagicDraw、BogoUMLなどに対応していたが、このところPapyrus UMLの可能性を探ってきた。

とりあえず、それなりのコードが出るようになった(気がする)バージョンとして、20100320版をアップロードしておいた。

Papyrus UMLの気持ち悪い点は、3つほどあり、

  1. 操作のvisibilityは、デフォルトでパブリックが指定されているようにプロパティウィンドウのチェックボックスで見えるのだけれど、実際には、visibilityは出力されない
  2. 初期化をクラス図上で明示しなくても、勝手にdefaultValueのタグが出力される
  3. 初期値を保持するタグが、UML 2.Xのドキュメントと異なる

などあって、上記のバージョンでは、これらに対応している。

Papyrus UMLには、よい点もたくさんあり、操作にopaqueBehaviorが指定でき、UMLクラス図でNSLのコードが書けるし、UIは気持ち悪いことも多いけれど、それなりに使えるものには仕上がっている。


nsl2vl: splitオプション

2010-03-19 08:28:40 | Weblog
VHDLとSystemCでは、必要性からモジュールごとばらばらのファイルに分割するsplitオプションを用意していた。

従来、このオプションは、同一ディレクトリにファイルを展開するようにしていたけれど、ディレクトリを指定・作成して、その中に展開したいニーズもあるので、splitを指定したときに -o で出力先ディレクトリを定義できるようにした。

Verilogでは特に分割の必要性はなかったけれど、これだけ特殊扱いする理由もないので、Verilog時出力時も同様にsplitオプションを有効にした。

このサポートのため、スクリプトを一新。$0を解析して、モードを変更するようにした。

20100318版からのサポート

再現性に乏しいエラー

2010-03-15 22:49:09 | Weblog
完全に再現するものは、比較的追いかけやすいのだけれど、自分のところで、再現しない問題は追いかけるのも難しい。

マシンによって結果が違うことから、おそらく、変数の初期化の問題ではないかとあたりを付けて、とりあえず、対策(のつもり)

NSL: variableの左辺サブレンジ転送サポート

2010-03-13 12:04:24 | Weblog
NSLでは、通常の信号は、左辺にサブレンジを指定しての転送は禁止している。
これには理由があって、NSL/SFLの文法では、コードの複数の部分において、端子に対する転送が記述可能なので、サブレンジ単位では転送条件を制御することができないからなのだ。(サブレンジ転送をする用途では、複数の異なるビットに対する転送を同時に行う場合がほとんどだが、重なりの検出、同時でない場合の対応等々、条件が数多く発生し、好ましくない)

VerilogやVHDLでは、代入を1箇所でしか記述できないので、サブレンジに代入しても、処理系は混乱がない。この方式だと、動作を完全に分析した後で、ほとんどネットリストに近い形でコードを書かなくてはならない欠点があるのだ。この欠点はとんでもなく大きく、生産性を著しく下げると思うのだけれど、ユーザは、その場その場で、自分に都合の良い解釈をするので、NSLでサブレンジ転送ができないことを欠点と捉える場合がある。

そこで、varilable変数に限定して、サブレンジ転送をサポートすることにした。もともと、variable変数は、ハード的な実体と1対1にはなっておらず、コンテキストに応じて、必要な端子を自動生成するので、左辺にサブレンジを持ってきても、そういう端子を自動生成すればいいだけなので、お気楽である。

このバージョンでは、さらに、variable変数は初期化しないで使った場合に、初期値0とする変更、プリプロセッサの引数変更も同時に行った。(プリプロセッサ対応の、スクリプトを追加:nsl2vl, nsl2vh, nsl2sc)

おっと、もう一つ忘れるところだった。

このバージョンから、NSLでは、moduleでの入出力端子の記述を禁止します。
入出力端子等は、declareに記述してください。


20100313版からのサポート


サブレンジ転送の例題は下記↓

declare subrange interface {
input a[8];
output f[8];
}

module subrange {
variable v[8];

 v[3:0] = a[7:4];
 v[7:4] = a[3:0];
 f=v;
}

XSLTコンパイラ

2010-03-13 02:56:41 | Weblog
Java版のコンパイラとしてApacheのものを使っていたが、JDKに標準搭載されているということだった。コンパイラモジュールのパッケージ名がJDK搭載時に変わったので、JDKでコンパイルし直さないと過去コンパイルしたものは動かなかったが、JDK標準ということで、余分なjarを添付する必要がなくなり、シンプルになった。

UMLからNSLへの変換ルーチン(Java版)は、JDKベースに変更済み

NSLプリプロセッサ

2010-03-12 00:27:32 | Weblog
実は、Cのプリプロセッサと出力形式を互換としているので、sflpp.exeの代わりにcpp.exeを利用可能なのだけれど、独自プリプロセッサの必要性も結構あるので、もう少し機能拡張中。

まだ、リリース前だが、-Iと-Dのオプションをサポートした。次の改訂で入る予定。-Iで指定できるインクルードパスはとりあえず128個を上限としておく。
-Dは、マクロの定義だが、

-DSOMETHING

として、マクロ定義だけするケースと

-DANYTHING=BOO

と、定義に値をセットするケースの両方をサポート。
注意すべき点として、-Iも-Dもオプション中に空白は許さない点だ。WindowsやMacOSXなど、空白をディレクトリ名やファイル名に使うことのあるOSでは、フルパスを指定するのは難しいので、相対パスの利用が基本となる。

テストをしてみたが、ちゃんと動いていそうだ。ただ、現在の起動スクリプトには、プリプロセッサにオプションを渡す方法がない。これは、今後の課題としておこう。


追記:
とりあえず、下記のスクリプトでなんとかなりそう。もう少し改良が必要だけれど、当面、この方針でいこう。

#!/bin/bash
if [ $# -lt 1 ]; then
echo "Usage: nsl2vl filename.nsl {-neg_res|-neg_clk|-sync_res|-O{0|1|2}|-v}"
exit 0
fi
SFL2VLEXE=sfl2vlbin.exe
SFLPP=sflpp.exe
exearg=""
pparg=""
name=$1
shift
for arg in $*
do
args=${arg:0:2}
        case $args in
                -I)     pparg=$pparg" "$arg ;;
                -D)     pparg=$pparg" "$arg ;;
                *)      echo defaut! ; exearg=$exearg" "$arg ;;
        esac
        shift
done
echo "${SFLPP} $pparg $name | ${SFL2VLEXE} $exearg -nsl -o `basename $name .nsl`.v "
exit $?

サブモジュールのインスタンス数

2010-03-10 10:56:40 | Weblog
パピルスでUMLを書いていると、関連で接続した子クラスに多重度を設定したくなる場合がある。
サブモジュールのインスタンスは、今まで1つずつ設定していたが、UMLと合わせて、多重度を表記できるようにした。

これを使って、下のようなモジュールを書くことが出来る。(例はあまりよくないが)

20100310版より、NSLOverture, UMLtoNSLで対応。
declare subm {
 input a;
 output f;
}
declare mm {
 input xx[4];
 output yy[4];
}
module mm {
 subm mx[4];
 integer i;
 variable v[4];

 for(i=0;i<4;i++) mx[i].a = xx[i];
 v=0;
 for(i=0;i<4;i++) v = v | (({0b000,mx[i].f})<<i);
 yy = v;
}

技術は掛け算

2010-03-08 23:07:48 | Weblog
技術習得中の人が、与えられた仕事を細かく分担して、自分の担当を小さくしようとしているのを見ると、なんて狭量なんだと思ってしまう。

せっかくの、実力を伸ばすチャンスを、自ら摘んでしまおうというのだ。

もの作りにおいて、自分の保有技術は掛け算で効いてくる。

たとえは悪いかもしれないが、自分の家を建てるのに、二人の大工がいたとしよう。

  • 一人は、左腕だけは、人の2倍の力と器用さで、誰にも負けないが、右手、両足は、人の半分の力しかない。
  • もう一人は、両手・両足が人並みである。

あなたならどちらの大工に仕事を任せるだろうか?

全ての能力をまんべんなく伸ばすことしか、自らの将来の立ち位置を確保することは難しい。

なるべく自分の担当分野を小さくしようとする人たち。それで、将来、世界で戦えますか?

UMLエディタ パピルス

2010-03-07 19:34:00 | Weblog
某氏から教えていただいたパピルスが、かなり面白い。

チュートリアルが、ビデオ中心というのが、要点だけさっと読みたい私には、今ひとついただけないが、大体、勘所がつかめてきた気がする。

クラスや操作に振る舞いを追加可能で、追加した振る舞いのコード部分がXMIに出力されている。

そこで、UMLtoNSLを、この形式に対応させ、NSLのコードをパピルスだけで、開発可能としてみた。

Eclipseのプラグインとして使うのは、試してなく、スタンドアローンで使っているけれど、使いでがありそうで、長く付き合えるツールに育っていくかもしれない。
(操作性は、私の直感と今ひとつ合わないが・・)

オーバートーン株式会社設立

2010-01-30 23:32:00 | Weblog
関係者皆様のご尽力により、1月29日付けで、新しい会社を設立した。
設計エンジニアには、非人間的な部分で工数を取られることなく、創造的な能力を発揮してほしい、これまでの実力の何倍もの生産性を紡ぎ出してほしいという願いを込めて、会社名を決めた。

オーバートーン株式会社

を、よろしくお願いします。

設立直後で、体制はあまり整っていないけれど、会社が回るようにロケットダッシュで体制を整えていきましょう。

sfl2vlの SystemC生成コード変更

2010-01-28 08:58:26 | Weblog
ビット連結はsc_int/sc_uintしかできないとか、色々な問題があり、先日からバタバタとしていたが、今朝になって、ベータリリース版における、基本的な1bit信号は sc_uint<1> に変更することにした。

ただし、クロックはboolでないとSystemCライブラリとリンクできないので、クロック、リセットのみboolとしておく。

過去のテストベンチも、これにあわせて変更要なので、注意が必要。

SystemCのユーザは少ないので、緊急性は低いから、慌ててやらなくてもいいのだけれど、気が付いたときに変更しておかないと忘れるので・・・

EDSF用のパッケージは変更前のものを入れておくことにします。
(日付でバージョンをつけているので、同一バージョンに見えますが・・)

C言語ポケットリファレンス

2010-01-25 08:14:32 | Weblog
O'Reillyのポケットリファレンスは薄くて、携帯に便利なので、C言語を扱うすべての人にお勧めだと思う。


C Pocket Reference


というのは、組込み技術者(に限らないけれど)で、曖昧な記憶に頼って言語をとらえて、コンパイルエラーがなければOKと思っている人が散見されるから。
自分の記憶が曖昧だと感じたら、リファレンスを参照しましょう。

たちが悪いのは、自分は絶対正しいと間違ったことを信じている奴なんだが。。

自分ポータルサイトを作る

2010-01-25 00:34:26 | Weblog
ホームページを5個、ブログを6個持っているが、自分でも把握しきれなくなってきたので、自分ポータルサイトを作り、一覧できるようにしてみた。

http://nshimizu.com/

過去、相互非リンクだからこそ書けることもあったのだけれど、カミングアウトの結果は・・・(まぁ、何とかなるさ)