systemC 2.2.0 在 ubuntu9.10 with gcc4.4.1 加 helloworld 範例

因為上課的需求,我在 ubuntu9.10 安裝了 systemC

先到 Open SystemC Initiative ( OSCI ) 下載 systemc-2.2.0.tgz

一般使用者必須先加入這個網站的會員才能下載,成為會員是免費的,加入吧!

下載完之後解壓縮,閱讀 INSTALL ,裡面有寫 unix-like OS 如 linux, SunOS, 支援的gcc版本,注意!不支援 bsd 系統

按照 INSTALL 的說明步驟

  1. mkdir objdir
  2. cd objdir
  3. ../configure
  4. 這邊要注意看每行的檢測結果,例如有沒有安裝 g++。
    如果沒有的話可以用 sudo apt-get install g++ 進行安裝

  5. make
  6. make degub
  7. sudo make install

我在 make 時遇到這個問題

make[3]: Entering directory `/home/Pratik/SystemC/systemc-2.2.0/objdir/src/sysc/utils'
g++ -I. -I. -I../../../../src/sysc/utils -I../../../../src -Wall -DSC_INCLUDE_FX -O3 -c -o sc_utils_ids.o `test -f '../../../../src/sys/utils/sc_utils_ids.cpp' || echo '../../../../src/sysc/utils/'`../../../../src/sysc/utils/sc_utils_ids.cpp
../../../../src/sysc/utils/sc_utils_ids.cpp: In function ‘int sc_core::initialize()’:
../../../../src/sysc/utils/sc_utils_ids.cpp:110: error: ‘getenv’ is not a member of ‘std’
../../../../src/sysc/utils/sc_utils_ids.cpp:111: error: ‘strcmp’ was not declared in this scope
../../../../src/sysc/utils/sc_utils_ids.cpp: At global scope:
../../../../src/sysc/utils/sc_utils_ids.cpp:119: warning: ‘sc_core::forty_two’ defined but not used
make[3]: *** [sc_utils_ids.o] Error 1
make[3]: Leaving directory `/home/Pratik/SystemC/systemc-2.2.0/objdir/src/sysc/utils'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/home/Pratik/SystemC/systemc-2.2.0/objdir/src/sysc'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/Pratik/SystemC/systemc-2.2.0/objdir/src'
make: *** [all-recursive] Error 1

之後我在 這邊 找到解答

在檔案 systemc-2.2.0/src/sysc/utils/sc_utils_ids.cpp 裡面加入下面兩行

#include "string.h"
#include "cstdlib"

然後就可以正確編譯過囉!

正確編譯過後,到 objdir/examples/sysc/2.1/dpipe 裡面編譯一個範例試試看

  • make check

正確編譯過之後就會跑出這樣的結果

             SystemC 2.2.0 --- Dec  3 2009 10:12:54
        Copyright (c) 1996-2006 by all Contributors
                    ALL RIGHTS RESERVED
0: 0
1000: 0
2000: 0
3000: 0
4000: 1
5000: 2
6000: 3
7000: 4
8000: 5
9000: 6
PASS: sc_export
==================
All 1 tests passed
==================

以下是一個簡單的 hello world 範例

#include "systemc.h"

// Hello_world is module name
SC_MODULE (hello_world) {
        SC_CTOR (hello_world) {
                // Nothing in constructor
        }
        void say_hello() {
                //Print "Hello World" to the console.
                cout << "Hello World.n";
        }
};

// sc_main in top level function like in C++ main
int sc_main(int argc, char* argv[]) {
        hello_world hello("HELLO");
        // Print the hello world
        hello.say_hello();
        return(0);
}
  1. 每個 systemC 程式一定都要 include
  2. 每個 systemC 程式都從 SC_MODULE 開始
  3. 第四行包含了 hello_world 這個 module

REF:http://www.asic-world.com/systemc/first1.html#Introduction

編譯命令

g++ -Wall -DSC_INCLUDE_FX -I./systemC/include/ -L ./systemC/lib-linux/ hello.cpp -lsystemc

編譯命令的 Makefile 版本

prefix = /home/magicallove/systemC
inc = ${prefix}/include
lib = ${prefix}/lib-linux

all : hello.cpp
	g++ -o hello -Wall -DSC_INCLUDE_FX -I${inc} -L${lib} -lsystemc hello.cpp

clean :
	rm hello

NOTE: you have to modify the value of ${prefix}, replace it with the place you install the systemC

編譯過程會有蠻多 warning ,不影響結果。

執行結果如下:

               SystemC 2.2.0 --- Dec  3 2009 10:12:54
        Copyright (c) 1996-2006 by all Contributors
                    ALL RIGHTS RESERVED
Hello World.