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

組み込まれたエンジニア

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

sfl2vl:declareとmoduleの入出力端子

2009-09-03 08:05:55 | Weblog
シンボルテーブルの持ち方を変更したので、declareで宣言したら、module側で宣言しなくても、入出力端子を使用可能となった(とした)。

declare sub {
input a,b;
output f;
instrin ex(a,b);
instrout done(f);
}

と宣言しておけば、

module sub {

instruct ex { done(a&b); }

}

と記述できる。declareとmoduleで同じことを2回書くのにうんざりしていた方には朗報かも?

使い方としては VHDLのentity -> declare, architecture -> module という対応となる。

もちろん、このためには、モジュールファイルの前に必ずdeclareの宣言が必要なので、分割ファイルにする場合、declareをインクルードファイルとしてまとめておくのがいいだろう。

フリーソフトでのVerilogからの論理合成

2009-09-02 21:49:17 | Weblog
以前、自分で作成したIcarus Verilog用の合成ターゲットファイルは、iverilog-0.7用で、これを使えば、Allianceの合成系に接続できることは分かっているけれど、残念ながら0.7はgcc4系ではコンパイルできない。
もう少し何かやれることはないかと、少し調べてみる。

もともと、Icarus VerilogはXNFやAtmelのFPGA用の合成をするように構成されているが、そのターゲットの一つに、LPMを用いたEDIFがある。LPMなんで、おそらくAlteraのツールにはそのまま持ち込める気がするが、他のベンダーでLPMをまともにサポートするベンダーってあるのだろうか?

とまあ、そんなことは置いておいて、とにかくEDIF形式にはなる。LPMのセルをどこかで書いてあげれば合成系に接続できる。sxlib用のターゲットでは、このLPMの展開をすべてターゲットモジュール内のCのコードで行っていた。

で、今回提案するパスは、

iverilog -tedif -o hoge.edi hoge.v

として、LPM版の合成を行わせる。

x2y edi vst hoge hoge

として、Allianceのツールで、VHDLストラクチャード形式に変換。

LPMのセルを動作記述で作成し、vasyで変換する。

LPMのセルは元々の種類は限られているが、パラメータが変わることでバリエーションができる。
EDIFファイルを読み込んで、対応する動作記述を自動生成しないと、少ししんどいかも?

sfl2vl:制御出力の引数

2009-09-01 22:08:36 | Weblog
某氏より、制御出力の引数はdeclare文に記述できるようにとの要望があったので、対応をしてみた。一応動いているようには見えるが、シンボルテーブルの持ち方を大幅に変更することになったので、動作の確認がきちんと取れるまではベータ版扱いである。

ちなみに、sfl2vlでは、以前より、引数は(C言語のように)制御端子の端子名の後ろに直接記述できる。

ここまでくると、制御端子の気持ちの悪い名前も変更したくなる。
control_input
control_output
などが候補だが、こっちの方が読む人に分かりやすいはず。

書く手間が増えるという意見は、UML2SFLを使うようにとすればOK。

MOS技術の黎明期

2009-08-30 08:17:28 | Weblog
MOS技術の発展の様子を通して、デジタル時代の黎明期を明らかにした本(To the Digital Age: Research Labs, Start-Up Companies, And the Rise of MOS Technology)が出版されています。

アメリカのアマゾンの書評は星5個と最高で、LSIが発展していくころのダイナミズムを感じさせるとしています。

今日、発見したばかりで、注文中なので、内容のコメントはできませんが、MOSのLSIに関わるものとしては、内容に期待できます。

Alliance VHDLでのLSI製造

2009-08-29 23:14:27 | Weblog
5年ほど前に、0.35umのプロセスを用いて、Alliance VHDLでレイアウトを作成し、LSIを製造した。このときの作業履歴を探していて、うろ覚えだった開発環境をクリアに思い出した。

5年前には、sfl2vh(VHDL変換)が今ほどきちんとしておらず、主としてVHDLの文法に私が不慣れだった理由によって、Verilogへの変換に比べて大幅に機能が不足していた。そこで、LSI製造時に、SFL→Verilog→EDIF→Allianceと複数のツールを組み合わせてネットリストを作成してAllianceで配置配線をしたのであった。
Verilogからの論理合成は、フリーのものはなかったので、私がIcarus Verilogのプラグインを作成し対応した。このルートで、レイアウトエラーなしのCIFファイルが作成でき、それを指定されたレイアウトチェックプログラムに通しただけで、変更なしで製造し、出来上がったチップの動作確認もできたのだった。

今回はもっと詳細なプロセスを用いるので、同じデザインフローで動作するチップができるかどうか、慎重に検証が必要。

3state端子の扱い

2009-08-21 09:26:01 | Weblog
一般にLSI内部でハイインピーダンス状態を作成すると、あまり良い結果を生まないので、束線を3stateとして扱うケースは、バスなどで限定的に用いるため、用意している。出力バッハの最終段だけ双方向扱いにするのが通常の使い方で、途中の生成式は通常論理として計算する。
ところが、束線内のビット単位でハイインピーダンスを制御したいという要望が来て、ディスティネーションが双方向の場合の式の生成を少し変更した。問題となったのは、VHDL側で、こちらは、最適化をかける場合には、アサート文を複数段に分割せざるを得ないので、最終段だけの対応では無理だ。そこで、最適化の論理分割式において、ディスティネーションが双方向かどうかを判断し、その場合には、途中式であってもバス形式で出力させることにする。(気持ち悪いが。。)

この仕組みを少し改造すれば、busとselの使い分けができるが、基本的にデータ確定時間が不安定なbusは、高速論理では、使えないと思っているので、採用するつもりは、今のところない。
どうしてもという要望があれば考えるが。。。

Windowsのショートカットからリンク元を探す

2009-08-20 17:08:37 | Weblog
ショートカットの元ファイルを探すには、COMを使って、IShellLinkから引っ張り出さないといけない。MSDNに対応するサンプルファイルがあって、確認は取れたが、Cygwinでは、ショートカットをシンボリックリンクの代わりに使っていて、ファイル名の拡張子 .lnk を隠蔽するので、この仕組みを使っても、あまりまともにショートカットの扱いができない。

もちろん、CygwinのDLLには、この仕組みが入っているので、Cygwin上だけでオープンソースで開発するならば、それほど面倒ではないが・・

仕組みは分かって、使えることも分かったが、結論は、対応せずとする。

しかし、たかがショートカットになんて大げさな仕組みを用意したんだ?→MSFT

携帯電話

2009-08-19 21:49:19 | Weblog
今回のタイ出張では、いつも使っているNokia E51がとても役に立った。タイの1-2-callのプリペイドSIMを入れて使っていたのだけれど、通話、SMS、email, webとたいていのことがこの一台でこなせるのだ。もちろん、Bluetoothドングルを持っていれば、モデムとしても使えただろう。(今回は、まさか、ホテルのネット環境がこんなに悪いとは想像していなかったので、持ってこなかった)
翻って、日本に戻って、いつものソフトバンクプリペイドSIMを入れると、とたんにパケット通信はできないし、SMSはキャリア内限定だし。。。と、できなことが多い。
日本のキャリアは、どこのキャリアでもこのダメさ加減はほとんど同じ(というか、中でもソフトバンクが一番まし)。

今までは、O2か、bMobileのSIMと入れ替えながら使っていたが、入れ替えは電源を切って、電池を抜いてとなるので、出先で行うのはちょっと勘弁してほしい作業の筆頭だ。

ならば、これら、パケットアクセス専用機を入手するのもいいかもしれない。

値段が安く、日本語にも対応というと、やはり、Symbian搭載のNokiaとなるだろう。特に、5320 MusicExpress なんかは、ずいぶんとよさげだと、1shopmobileの値段を見ながら考えている。

1shopmobileの価格情報

でも、やっぱり、パケット専用ならGPSもあった方が面白いかも?などという悪魔のささやきも。。。

sfl2vlのアップデート

2009-08-15 22:52:34 | Weblog
二週間のタイ出張で、SFLとLSI設計を教えてきた。
LSI設計のツールには、Alliance VHDLを使ったのだけれど、これは、その名の通り、エントリをVHDLで行う。sfl2vhという、SFLをVHDLに変換するコマンドで、必要な変換をしながら、LSIを作っていくコースなのだけれど、普段は自分ではVHDLを使わないので、少し使い勝手の悪いところがあった。

1)Allianceのセルは同期リセットしか許していない。でも、通常のFPGAのリセットは非同期であり、その辺りのつじつまをつけるため、同期リセットというオプションを用意していた。だが、VHDLはアライアンスエントリくらいしか使わないだろうと思い、すべて同期リセットにしていたのだった。
非同期リセットに対応した(つもり)

2)演習中に、引数なしのprocの呼び出しで、SEGVを起こす場合があった。Verilogは対策済みの修正反映ミス

以上の変更を加えたバージョンは、20090814となる。

Linux研修修了

2009-08-01 04:53:23 | Weblog
4日間の研修が修了。

受講生の皆様、おつかれさまでした。4日のうち、3日間、まるまる朝から晩までの講師で、私も体力限界状態ですが、この講座、やるたびに発見があり、受講生の皆様からもパワーをいただき、なんとか乗り切りました。

割り込みを用いたデバイスドライバの作成に、みなさん、ずいぶん苦労され、最後、大幅に時間が超過したのですが、終わった後の調整で、最後のチームも課題が動作し、よかったです。

もう少し時間があれば、せっかく、sysctlやprocの勉強もしたのだから、ドライバの動作を動的にsysctlやprocで表示変更しながら、デバッグできるとよかったですが、私の講義のペース配分が後ろに押していたので、時間的にいっぱいいっぱいになってしまいました。

明日からは、タイに出張で、向こうでは、ハードウェアの設計を教えてきます。

こういうのを貧乏暇なしというのか。。。

SFL2VL Windows版アップデート

2009-07-31 08:01:38 | Weblog
WindowsGUI版で、プリプロセッサのプロセスがsfl2vlを終了しても残るバグがあったので、GUI版だけ、2009-0731版で修正。

子プロセスとのインタフェースの問題だけれど、使わないつもりだった標準ハンドルの扱いの問題。

標準入力をそもそも設定していないのだから、読み出したときにEOFが返ると
思っていたけれど、そうではなく、入力待ちでプロセス終了がされなかったらしい。(詳細は時間の関係でチェックしていないけれど)

一番うれしい(当たり前?)なのは、今まで、一度開いたSFLファイルは、プリプロセッサが利用中となって、ReadOnly扱いになってしまったのが、普通に使えるようになったこと

自分でGUI版を使うケースが少なかったので、ReadOnlyになるのは、gvimの問題か?と勝手に思っていたけれど、よくよく見たら、自分の問題だった ;-(

レガシーデバイス

2009-07-29 08:08:50 | Weblog
今やっているLinuxの研修では、デバイスドライバの実験にパラレルポートからの割り込みを使う。

パラレルポートは、レガシーデバイスで、多くのパソコンで削られていく方向にあり、この研修を始めた時点でも、ノートPCでは、すでにパラレルを持たないものも多かった。

昨日、研修担当のS氏から、ついに、今後の研修システムのPCには、パラレルポートはなくなる予定と通達された。

パラレルポートからの割り込みのように、簡単に外部からの非同期割り込みの実験ができるデバイスは、通常のPCには、他にはないので、困った事態だ。

PCIバスでも割り込みは起こせるが、PCIバスだって、ノートPCにはない。

手軽に使えるIOといえば、USBであるが、USBは割り込み駆動ではなく、OSからのポーリングなので、これでは、割り込みの実験にならない。

そもそもPCで研修をするってのが間違いか?

でも、独立ボードでLinuxを動かして実験しようとすれば、その環境の理解だけで、また研修時間が圧迫され、あまり好ましくない。

う~~む、なにかいい方法はないものかなぁ・・・

Alliance VHDLのVasy

2009-07-27 16:44:08 | Weblog
Vasyはかなりインテリジェントなフロントエンドで、Allianceの使いづらさを相当軽減してくれている。

ただ、相当単純なものであっても、functionには対応しておらず、
他のVHDLツールとソースコードを共用する場合には、使い方に注意が必要だ。

sfl2vh(CUI版)では、-vasy オプションを持っていて、vasyフレンドリーな出力を出す。ところが、GUI版には、このオプションを設定する所がなかったので、来週の講習において、早速不便するため、vasyオプションをGUIから設定するように変更。20090727版より。

ついでに、optimizeの時に、以前の残骸として出力していた、不要なfunctionを出力しないようにした。

ただ、VHDLは、自分ではほとんど使わないし、ユーザも少ないので、問題がまったくないとは言い切れないが、何かあったら連絡していただければ、対処を検討します。

sfl2vlのライセンス制限変更

2009-07-25 02:09:07 | Weblog
評価ライセンスと非商用ライセンスを分けました。
評価ライセンスは500行まで。これでも、SN/Xプロセッサをはじめ、かなりの回路が作成できます。
非商用ライセンスは2000行まで。これだけあれば、ほとんどの回路作成に不自由しません。非商用ライセンスは、sfl2vl配布ページからメールで要求ください。空メールをお送りいただければ、折り返し、ライセンス情報を含むメールを返信します。

商用ライセンスは、個別ライセンス契約での対応になります。契約締結後、ノードロックライセンスファイルを発行します。

Alliance VHDLをcoLinuxへ

2009-07-24 11:36:23 | Weblog
来週は、4日間のLinux講座だが、次の週、8月に入ったら、すぐに海外で、LSIの設計講習を行うので、その準備のため、Alliance VHDLをcoLinuxへインストール中。
Alliance VHDLの構築された頃と、多少、コンパイラなどの状況が変わってきていて、1カ所パッチが必要なのと、coLinuxでディストリビューションはUbuntuにしているが、デフォルトでは必要なパッケージがなさ過ぎなので、パッケージを追加する。
追加パッケージは、
libmotif-dev, bison, byacc, tk8.4-dev, libxi-dev, libxpm-dev, libgl1-mes-dev, flex, g++
などである。ログからリストアップしているが、不足分があれば、申し訳なし。

変更箇所は、

nero/src/ADefs.h の141行目をprivateからpublicへ。

これだけあれば、
./configure --prefix=/opt/alliance
make
make install
で構築できるはず。

coLinux-7.3のubuntuは、バージョンがいくつなのか知らないが、AllianceのMLには、ubuntuのg++-4.3だとコンパイルに失敗するようなことが書いてある。coLinuxでインストールしたものは、4.0.3なので、とりあえず、g++はそのままでOK。


cofsでWindows側のパーティションを読み書きできるようにしておけば、Windowsのツールと、行ったり来たりも簡単になる。DrealやGraalでは、X11の画面が必要なので、XmingをcoLinuxと同時に立ち上げるように、ubuntu.confのコメントアウトを外す(パスも修正)。

X11の画面をWindowsに飛ばすのに、DISPLAY変数を.bashrc_profileに設定しておく。
.bashrc_profileにallianceのインストールディレクトリの alc_env.sh をsource する記述を追加。

でいいのでは?

下記の加算回路を作って、動作確認

module test {
input a<8>,b<8>;
output f<8>;
instrin ex;

instruct ex f=^a + b;
}

レイアウトの詳細チェックをする時間はないけれど、一見、できていそう(笑)。
sfl2vh, vasy, boog, ocp, nero,graalの順番で処理した結果が画像である。
ringを動かしていないので、パッドは付いてない。

このレイアウトを作成するには、以下のコマンド列を実行する。

sfl2vh test.sfl
vasy -p -a -I vhdl test
boog test
ocp test test
nero test test
graal -l test

以上で、画像のレイアウトが出る。