組み込まれたエンジニア

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

NSLとAllianceVHDLでチップ試作

2010-07-29 23:16:32 | Weblog
NSLで論理を作成し、AllianceVHDLでレイアウトをしたチップが上ってきた。
1.2um 2層メタルのミニチップだけれど、デザインフローの確認には充分。

ただ、2層メタルなので、クロックツリーの作成など、次のステップとなる部分は確認できず、以降の試作で確認予定。

80ピンQFPのパッケージ品で動作確認する必要があるので、確認回路の設計をしないといけないですね。

ベアチップに顕微鏡でピンを立てて、動作確認する方が、私好みなのだけれど、「できる気がしない」などと言う奴に、やる気を出させるアイデアはないですか?

NSL: SystemCシミュレーションスケルトン生成

2010-07-29 22:45:13 | Weblog
SystemCのシミュレーションスクリプトは、
慣れれば難しくはないのだけれど、
慣れるまで、少し作成に時間がかかるので、
NSLからスケルトンを生成できるようにした。


#include <systemc.h>
#include "inc16.sc"
#include <stdlib.h>
sc_clock m_clock("m_clock",10,0.5,0,false);
sc_signal<bool> p_reset;
sc_signal<sc_uinit<16> > a;
sc_signal<sc_uinit<16> > q;
sc_signal<sc_uint<1> > exe;

inc16 inc16("inc16");

static int ctrl_clock=0;
SC_MODULE (c_clock) {
        sc_in<bool> m_clock;
        void do_reset() {
                ctrl_clock++;
                if(ctrl_clock==0) p_reset=1;
                if(ctrl_clock==1) p_reset=0
        }
        SC_CTOR(c_clock) {
                SC_METHOD(do_reset);
                sensitive << m_clock.pos();
        }
};

int sc_main(int argc, char *argv[])
{
        int stop;
        if(argc>1 && (stop=atoi(argv[1])<=0)) stop=1000;
        sc_trace_file *tf = sc_create_vcd_trace_file("inc16");
        sc_trace(tf,inc16.p_reset,"inc16.p_reset");
        sc_trace(tf,inc16.m_clock,"inc16.m_clock");
        sc_trace(tf,inc16.a,"inc16.a");
        sc_trace(tf,inc16.q,"inc16.q");
        sc_trace(tf,inc16.exe,"inc16.exe");
        c_clock cclk("cclk");
        cclk.m_clock(m_clock);
        inc16.p_reset(p_reset);
        inc16.m_clock(m_clock);
        inc16.a(a);
        inc16.q(q);
        inc16.exe(exe);
        sc_start(stop, SC_NS);
        sc_close_vcd_trace_file(tf)
}


DeSmetCコンパイラ

2010-07-24 16:17:05 | Weblog
MSDOSの時代、一世代を築いたコンパイラにDeSmetCがあった。
途中から、ANSI C互換文法もサポートし、利用者がかなりいたと思うが、DOSの時代が終わるとともに消え去っていた。

FreeDOSで小さなアプリを作るため、x86の16ビットコンパイラをいろいろと探していたが、どうも、思ったようなものがなかった。

やはり、ここは自分で移植しないとだめかと、ほぼあきらめかけたとき、DeSmetCがオープンソース(GPL)になっていたことが分かった。

このコンパイラは、非常にコンパクトなので、変更したりするのも便利だし、何より、ライセンスを気にせず使えるのがうれしい。

少し落ち着いたら、VMでFreeDOSを動かして、動作確認をしてみよう。

LiveCygwinにnxtOSEK同封

2010-07-10 10:04:54 | Weblog
教育に使うには、LiveCygwinは便利なので、サーバー容量の関係で削っていたnxtOSEK同封版を復活させた。

複数のLiveCygwin環境をメンテナンスするのは、もうやっていられないので、全部入りとしてしまったので、これまで最大の大きさになった(115MB)。

それでも、これ一つ持ち運べば、ソフトがインストールできないマシンでも、たいていの教育はできてしまうので、便利である。

搭載ソフトウェア:


  1. 例題を実行するため必要最低限のCygwinバイナリ
  2. GCC
  3. EDAtools

    1. NSL CORE: i386/win32 コマンドライン版
    2. UML2NSL: Java コマンドライン版
    3. Icarus Verilog
    4. GTKWave
    5. SystemC
    6. AllianceVHDL


  4. LEGO NXT向けの開発環境 nxtOSEK(v2.13)

アウトオブオーダー実行CPUを500行以内で

2010-07-09 08:43:50 | Weblog
演習で利用するため、NSL CORE評価版の行数制限で、なんとかアウトオブオーダー版SN/X CPUを作成しようと検討中。

スーパースケーラSN/Xは300行ちょっとで記述できるけど、OoOを500行に収めるめどは、まだ立っていない。

各ユニットのリザベーションステーションと、リオーダバッファをモジュールで共通化するなど、まだ、手段はあるので、あとちょっとをなんとかしたいものだ。

不安定なGoogleDocs

2010-07-04 08:54:02 | Weblog
現在、執筆中の文書が、テキストファイルのバイト数にして、約100KB程度になってきた。

編集場所を選ばないという理由で、Google Docで書き始めたが、この量になると、かなり不安定。


  1. 目を離した隙に、全テキストが消える!! 数度経験。→ Ctrl-Zでたいてい回復
  2. 半角英数を入力すると、勝手にOverwriteモードになってしまい、後ろのテキストを消す。 → 打ち直し
  3. カーソル位置が勝手に変わり、見つからない。→ マウスでクリックしなおし
  4. インデントとインデントのテキストの合間に、普通のテキストが入らない → HTMLを直接編集
  5. インデントの方式が場所場所で、違い、しかも、枠が印刷されてしまう場合と、されない場合があり、あとから修正できない。→たぶん、HTML編集が必要。


最初の不具合以外は、我慢できない範囲ではないけれど、問題は、GoogleDocsから持ち出すフォーマット変換がオオバカで、まともなファイルにならない点にある。

テキスト形式は中でも一番まともだけれど、全部、フォーマットやり直しかぁ。。


FET売り切れ

2010-07-02 11:20:43 | Weblog
先日紹介したFETを発注しようと、職場の担当部署に見積もりをお願いしたら、なんと、売り切れで必要個数が入手できないそうだ。

たくさんあると思っていたが、ブログで紹介する前に、見積もりをお願いしておくべきだったか・・ ;-o

とりあえず、在庫がある限り、発注をお願いしておいたが、よく考えてみれば、別に急ぐ必要はないので、数がそろってから、ゆっくり発送してもらえばよかった。(もう遅いけど)

少し、トランジスタの数が減ったので、アーキテクチャをシュリンクする必要がありそうだ。