SystemC的開發工具有很多種,不過原則上SystemC只是在C++裏增加一個Class,因此基本上任何一個符合ANSI標準的C++編譯工具都可以對systemC程式進行編譯連結來產生可執行檔。
在此我們將介紹如何在Linux環境裏,使用g++來編譯SystemC的程式。我是用4.1.2的g++。
首先請到OSCI網站下載systemc-2.2.0.tgz
http://www.systemc.org/downloads/standards
下載時需要帳號才行下載,所以就申請一個,啟動帳後再回來下載
下載回來後,找個地方把你的systemc-2.2.0.tgz解開
tar xvf systemc-2.2.0.tgz然後
cd systemc-2.2.0然後
mkdir /usr/systemc然後
./configure --prefix=/usr/systemc最後
make做到這裏,我們已經把SystemC的開發環境做好了,我最後在make install時有發生錯誤,但由於是example的部份,所以我就不管它了
make install
接下來寫個範例程式來測看看
hello.h
#ifndef _HELLO_Hhello.cpp
#define _HELLO_H
#include "systemc.h"
SC_MODULE(hello){
SC_CTOR(hello){
cout<<"Hello,SystemC!"<<endl;
}
};
#endif
#if 1上面的hello有2種寫法,但意思是一樣的啦!
#include "hello.h"
#else
#include "systemc.h"
class hello : public sc_module{
public:
hello(sc_module_name name) : sc_module(name){
cout<<"Hello,SystemC!"<<endl;
}
};
#endif
int sc_main(int argc,char** argv){
hello h("hello");
return 0;
}
Makefile
LIB_DIR=-L/usr/systemc/lib-linux你也可以使用g++ hello.cpp -I/usr/systemc/include -L/usr/systemc/lib-linux -o hello -lsystemc直接下命令編譯
INC_DIR=-I/usr/systemc/include
LIB=-lsystemc
APP=hello
all:
g++ -o $(APP) $(APP).cpp $(LIB_DIR) $(INC_DIR) $(LIB)
clean:
rm -rf $(APP)
參數說明:
- -I/usr/systemc/include 告訴g++去/usr/systemc/include底下尋找include檔案,也就是我們寫的systemc.h路徑
-L/usr/systemc/lib-linux 告訴ld去/usr/systemc/lib-linux底下尋找library檔案
-o hello 最後輸出一個執行檔,檔名為hello
-lsystemc 靠訴ld要引用libsystemc.a這個函式庫
g++ -o hello hello.cpp -L/usr/systemc/lib-linux -I/usr/systemc/include -lsystemc
hello.cpp:16: error: new types may not be defined in a return type
hello.cpp:16: note: (perhaps a semicolon is missing after the definition of 'hello')
hello.cpp:16: error: two or more data types in declaration of 'sc_main'
hello.cpp: In function 'hello sc_main(int, char**)':
hello.cpp:16: error: new declaration 'hello sc_main(int, char**)'
/usr/systemc/include/sysc/kernel/sc_externs.h:49: error: ambiguates old declaration 'int sc_main(int, char**)'
hello.cpp: In function 'hello sc_main(int, char**)':
hello.cpp:18: error: conversion from 'int' to non-scalar type 'hello' requested
make: *** [all] Error 1
千萬不要以為是sc_main參數有問題,或是回傳值有問題,其實真正的問題點很有可能是沒有加";"喔!
比如:
SC_MODULE(hello){就是在最後的"}"後面,還必需接一個";",才不會有錯誤。
SC_CTOR(hello){
cout<<"Hello,SystemC!"<<endl;
}
}
執行結果如下:
[root@svn hello]# ./hello
SystemC 2.2.0 --- Oct 3 2008 11:10:01
Copyright (c) 1996-2006 by all Contributors
ALL RIGHTS RESERVED
Hello,SystemC!
如果是用Windows的可以參考底下這篇文章或 Installing SystemC
如果使用gcc 4.x以上的版本編譯systemc 2.2.0或許會遇到
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/sysc/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
---------------------------------------------------------------------------------
please added the following headers in systemc-2.2.0/src/sysc/utils/sc_utils_ids.cpp
#include "string.h"
#include "cstdlib"
然後再重新編譯即可
資料參考來源:
http://blog.csdn.net/funeryoung/archive/2007/11/08/1874515.aspx
http://www.ht-lab.com/howto/vh2sc_tut/vh2sc_tut1.html
一週學會SystemC
安裝SystemC 2.2
4 則留言:
Greeting! I want to ask if there is possibility that i can run access noxim on systemc-2.3.1?
Thanks in Advance.
Hi syed abubakar:
Sure, you can run AccessNoxim with systemc-2.3.1.
The Access Noxim is based on systemc.
Have you encountered any problem on it?
您好,请问, run access noxim on systemc-2.3.1时,怎么样修改makefile.defs的environment variables?
Hi Rain:
我想你的問題應該不是bin/Makefile.deps檔案設定的問題, 因為這個檔案裏面是定義編譯那些原始檔.
你需要修改的檔案應該是bin/Makefile, 你需要在這個檔案裏, 將SYSTEMC及YAML這2個變數路徑依據您的環境進行修改即可.
張貼留言