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

組み込まれたエンジニア

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

メモリの初期化

2009-05-27 01:08:11 | Weblog
VerilogHDLのメモリ初期化コードはalways文だとNGで、initialだと、A社、X社ともにOK。
ただし、X社は、全領域の初期データがないときには、初期化を無視する。
あまり使いやすいとは言えないが、とりあえず、合成は終了し、初期化可能(らしい)ことは確認した。


sfl2vlでのmemory初期化

2009-05-26 06:21:13 | Weblog
sfl2vlでのメモリ初期化の方法を検討中。

VerilogHDLでよくある例題だと、単純にメモリをモデル化して、
そのアドレスをデコードしてROM内容を出力するが、
メモリの内容を初期化したいのであって、ROMをモデル化したいのではない場合、
あまりよい例題が見つからない。

実際に合成系に通るかわからないけれど、やりたいことは。例えば

mem ram[16]<8> = { 0x01, 0x02, 0x03, 0x04};



always
begin
ram[0] <= 0x01;
ram[1] <= 0x02;
ram[2] <= 0x03;
ram[3] <= 0x04;
end

に変換するようなことである。

β版として、この変換をサポートするものを
http://www.ip-arch.jp/binaries/sfl2vlwin-20090525.zip
として、作ってみた。(サイトからリンクしていない)

使い勝手について、ご意見があれば、教えてほしい。(メールでもコメントでも) 

sfl2vl

2009-05-23 01:25:12 | Weblog
再び、pgate1氏の情報で、バグだしができた(多謝)。

今回は、ソースコードを整理した際に、条件を見落とし、整理し過ぎたため、
stageの部分に誤りがあり、拡張機能を使わないstageの記述が文法エラーとなるというもの。

20090522で対策。


uml2sfl

2009-05-20 01:42:27 | Weblog
多少変更

1:operationの引数を実行文を書く所に、コメントとして記述。
2:インデントを少しまともに
3:XMI-1.2とXMI-2.0の記述共通化を少し進める。

sfl2vl変更

2009-05-18 13:38:53 | Weblog
NES on FPGAのpgate1氏からの連絡で、少し変更。

・>>、<<などのシフト演算の右項には、10進数を記述可とした。
これは、一時、すべての演算に10進数を許可していたのを
ビット数指定記法を導入したときに、削除っしたものだが、
シフト演算の右項には、シフト数を書くので、他の式の定数とは
多少意味が異なるからだ。

前のように、10進を許可して、ビット数未確定のワーニングを
出しておく方が利便性が高いかもしれないが、ワーニングを
徹底的に無視する人達が少なからずいるので、とりあえず、対処療法。

・stageやparなどの中のインスタンス(sel,reg等)の拡張機能で
サブモジュールをこの位置に書くと、インスタンスが生成されない件を修正。
コードとしては、どこに書いてもOKなようにしたつもりだったが、
実際には、SFLで構成要素の定義に割り当てられている部分しか
文法を解析していなかった(^^;)。

P&H本のMIPSサブセット

2009-05-15 00:33:51 | Weblog
研修生にP&H本のプロセッサを設計してもらっているが、論理設計が全く始めての人が0からプロセッサを作るのは、やはり、敷居が高いのか、なかなか進まなかったので、アウトラインだけは、提供することにした。

この図があれば、後は何とかなるだろう(?)。

ちなみに、この図から、自動変換した、拡張SFLのコードを、ココに置いた

sfl2vlで、SystemCとVerilogHDLに変換できることは確認済み。

uml2sfl

2009-05-12 01:38:08 | Weblog
UMLからSFLに変換するツールに、操作属性の追加を行なった。
追加したのは、package属性だ。

これで、4つの属性全てに対応関係を作ったことになる。

public -> instrin : control input signal
private -> proc : state definition
protected -> instrout : control output signal
package -> function : control internal signal (aka instrself)

属性とSFLの対応、アドホックに後から追加しているので、
あまり直感的ではない。いつか、機会を見て、整理したいかも?

ついでに、sfl2vlも修正。今回は、引数なしのprocが定義できないようになっていたのを修正(20090511版より)


タイからの研修生

2009-05-10 20:28:46 | Weblog
短期の研修なので、時間を無駄にしないように、メニューを整えていくが、彼女が、MacBookを持ってきていたので、MacOSXで研修可能なセットアップができないかと、今日は、家のMacBookで確認してみた。

sfl2vlは問題なく、パッケージをインストールすればよい。
uml2sflは、monoを使ってもNG。.NET 3.5のアセンブリが必要らしい。
XilinxlISEは、Wineを使ってもNG
QuartusIIのインストールはできた。ドライバないのでプログラミングは不可だろう。
SystemCは、i386のMacOS用のビルドスクリプトはなかったので、ビルド済みのをインストール
Allianceはソースからコンパイルして普通に動作
GTKWaveは、macportを入れて、そこからインストールするらしい(依存が多く時間がかかったが成功)

UMLとFPGAのツールが使えないのが痛い。

LiveCygwinマイナーチェンジ

2009-04-27 22:34:50 | Weblog
先週、韓国で行なったセミナーで、多少、ユーザーの混乱があったので、LiveCygwinをマイナーチェンジした。

変更は、homeディレクトリを示すエキスプローラー画面のパス設定。
従来、ルートを作成するユーザのワークパスからhomeを表示していて、これはこれで良かったのだけれど、アプリケーションからファイルをオープンしようとした時に、どこにhomeがあるのか分りにくかった。

今回の変更で、homeディレクトリに独立仮想ドライブ名を割り当てることにしたので、オープンする時にファイルを見つけやすくなる。

即時提供開始である。


追記: 安心していたら、少し失敗。
LiveCygwin.exeは、Visual C++ 2008 Express editionでコンパイルしていたが、コード生成のオプション指定をデフォルトのままにしていて、DLLがないと動かない。ライブラリをスタティックリンクしないといけなかったのだ。自分のマシンはコンパイル環境にDLLが入っていたので、これに気がつくのが遅れた。今度来る研修の人のために設定中の新しいマシンにLiveCygwinを載せて実行しようとして気がついた。

今晩(4/30)にでも修正予定。

白いMacBookがやってきた

2009-04-27 08:19:57 | Weblog
何故、白かというと、安いからである :-)

最初にやるのは、開発環境である、Xcodeのインストール。

次は、sfl2vlをコンパイル。
コンソールを開いて、通常のようにmakeをするが、flexが勝手にunistd.hを読み込むので、コンパイルオプションに
YY_NO_UNISTD_H
を追加した。これで、普通にコンパイルが終了。

ライセンス系の構築はまだなので、とりあえず、ノンプロフィット版のみの提供となる

インストール時には、

sudo tar xzf sfl2vlbin-darwin-unix-xxxx.tar.gz -C

と、sudoを付けて展開する。

次は、monoを入れて、.NETアプリの動作確認かな・・・
(これは慌てる必要はないけれど)


ハードウェアgeneratorとsynthesizer

2009-04-19 00:48:33 | Weblog
FPGA CPUのサイトにJan Grayが comp.arch.fpgaに投稿した記事が出ている。

彼の定義だと、generatorは明示的にネットリストを記述したもので、synthesizerは、動作合成を共なうものということだ。Grayは高級言語から回路合成するsynthesizerに懐疑的で、必要性は薄いといっているが、これは私も同じ意見だ。これをありがたがるのは、設計において、クロックスロットを制御できないヘボい似非エンジニアくらいのものだろう。ソフトでもハードでも、まともな設計者は、データの流れ(いつ、どこに、どのように移動させるか)をコントロールすることが設計の重要ポイントであることを知っているのだ。

さて、高級言語(HLL)からの合成は、Grayが定義したような解釈が固まりつつあるように思えるが、Logic synthesisという時には、VerilogやVHDLなどの明示的にネットリストを記述する言語からのネットリスト生成もsynthesisと扱っている。(これらの言語が出始めたころの時代の問題か?)

それはともかく、UMLから、SFLのスケルトンを作るのは、ほとんど一対一対応であるが、ネットリストを記述するよりは、もう少しましなことをしているので、合成という雰囲気を持っていると解釈している。

ただし、データの流れは、100%制御可能であることが、HLL合成の連中とは異なる。

我々ロジックアーキテクトに必要なものは、データの流れを100%制御可能でありながら、記述性が高く生産性を向上できる言語なのだ。

今回の一連のUML2SFLの開発の中で、UMLクラス図は、上手に使うと、生でテキストを描くよりも、生産性が上るかもしれないと思い始めている。(余分なタイピングを減らすことができる程度ではあるが・・・)

全てをUMLに載せることもできるが、OMGのMDAのようなおかしなものにすると逆に生産性は大幅に低下すると思うので、エンジニアリングチョイスが重要である。

ArgoUMLを使ってみる

2009-04-16 01:24:01 | Weblog
フリーで使えるUMLエディタの一つ、ArgoUMLを使ってみた。
デフォルトでは、visibilityもMultiplicityも表示しないようになっているので、セッティングから変更しておくとよい。(変更前に作成したプロジェクトにはグローバルなセッティングは反映されないので、プロジェクトセッティングを変更しないといけないようだ)。

このツール、比較的軽いし、マルチプラットフォーム(JAVA)なので便利だが、UML1.4までしか対応しない(これ自体はどうせ1.4までの機能しか使わないのでいいのだが)し、エキスポートするXMIのバージョンは、1.2らしい(というのは、xmi.versionの設定がXMIのファイル中に2箇所あり、最初のは、1.2だが、次に出てくる時に、1.4となっている??)。

私が使う範囲では、XMIの2.Xと1.Xの違いで一番大きなものは、関連の扱いかもしれない。XMI 2.Xでは、関連はクラスの属性の一つとして扱われ、クラスを処理する時に一緒に処理できるが、1.Xでは、関連はクラスと同一階層のオブジェクトとして記述されており、クラス内には関連を持っているかどうかの情報がない。

そこで、UML2SFLでは、クラスの処理の時に、すべての関連をサーチして、処理中のクラスが関連の端に相当するかどうかを調べている。非常に大きなクラス図を描いたりすると処理性能に問題を生じるかもしれないが、UMLであまり大きな図を描くような気がしないので、とりあえずは、いいとしよう :-p
(実は、一つのクラスに複数の関連がある場合には正しく動かないかもしれないが、とりあえず、図のような単純なケースの変換は出来た)

UML2SFLをArgoUMLに対応するようにバージョンアップした今回は、VisualBasicの部分はソースコードを同封したので、もっと使いやすいGUIが欲しい人は、勝手に変更して欲しい。 VBによるGUIに変更済

唯一無二なURI

2009-04-13 23:41:41 | Weblog
XSLがターゲットとするXMLには、名前空間の概念がある。
名前空間は、使用にあたっては、世界中、唯一無二なURIを用いて、名前空間を定義しなくてはならない。

このURI、唯一無二でありさえすればいいのかと思いきや、その値がスタイルシートの中だけでなく、変換対象のターゲットXMLとも一致している必要がある。
(つまり、自分で作るXMLもその時の気分で名前空間を作ったりすると、XSLTのスタイルシートを作る時にはまるということだ)

SAXONを使って、UML 1.4ベースのXMIを利用できるようにしようと作業していた。
UML 1.4ベースのツールでは、UML: という、名前空間の接頭が付くケースが非常に多い。昨日、見事にはまったのが、この UML: であった。

URIが一意でありさえすればいいと思っていた私は、UML 2.1のURIを少し書き換え、適当なURIを作成して名前空間の定義としておいた。

開発を進めていくと、大きなトラブル。タグがselectを使っても、全くヒットしないのだ。

name()='UML:Class'のように明示的に比較オペレータを使えばいいのだが、XSLTの解としては、美しくない。

散々悩んだあげく、URIをターゲットのXMLモデルからコピペしてみると、なぜか動いていそう!?

名前空間はターゲットのXMLを含め、整合性が取れてないといけない。一つ勉強した :-)