組み込まれたエンジニア

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

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)
}