SystemC和Skyeye的集成

长平狐 发布于 2013/03/04 19:30
阅读 153
收藏 0

一、systemC介绍

 

二、集成的步骤

 

1. 编译 systemc

下载systemc-2.2.0,解压缩,并配置编译

./configure --prefix=/home/ksh/systemc_install/ ;make              

 

2. TLM-2009-07-15

下载TLM,并解压缩

 

 

3. 下载SkyEye软件包编译并安装。

 

4. 编写Systemc的模块

 

4.1 Makefile.am 

 # Should be set in the environment:
DEFAULT_TARGET_ARCH  = linux
DEFAULT_SYSTEMC_HOME = /Users/charleswilson/Documents/OSCI/SystemC/2.2-gcc4.0
DEFAULT_TLM_HOME     = /Users/charleswilson/Documents/ESLX/projects/tlm_2
DEFAULT_BOOST_HOME   = /Users/charleswilson/Documents/boost_1_35_0

 TARGET_ARCH         = linux64
  SYSTEMC_HOME        = $(HOME)/systemc_install
  TLM_HOME            = $(HOME)/spsim/TLM-2009-07-15/
  BOOST_HOME          = $(HOME)/spsim/boost-1_33_1/

#ifndef BOOST_HOME
# BOOST_HOME          = $(DEFAULT_BOOST_HOME)
#endif

SYSTEMC_INC_DIR      = $(SYSTEMC_HOME)/include
SYSTEMC_LIB_DIR      = $(SYSTEMC_HOME)/lib-$(TARGET_ARCH)
TLM_INC_DIR          = $(TLM_HOME)/include/tlm

# use null version for SystemC-2.1v1 / boost / gcc-3.4.4
#FLAG_WERROR          = -Werror
#FLAG_WERROR         =

GXX                  = g++
GCC                  = gcc
LD                   = g++

FLAGS                = -g -Wall -pedantic -Wno-long-long $(FLAG_WERROR) /
                       -D SC_INCLUDE_DYNAMIC_PROCESSES /
                       -I$(SYSTEMC_INC_DIR) -I$(TLM_INC_DIR)
AM_LDFLAGS              = -L$(SYSTEMC_LIB_DIR) -lsystemc
#VALGRIND             = valgrind --log-file-exactly=valgrind.log

spsim = spsim_module.c simple_test.cpp simple_top.cpp

libspsim_la_SOURCES = $(spsim)
libspsim_la_LDFLAGS = -module -L$(SYSTEMC_LIB_DIR) -lsystemc

pkglib_LTLIBRARIES = libspsim.la

DEFS = -g -Wall -pedantic -Wno-long-long $(FLAG_WERROR) -D SC_INCLUDE_DYNAMIC_PROCESSES
INCLUDES =  -I. @COMMON_INCLUDES@ -I$(SYSTEMC_INC_DIR) -I$(TLM_INC_DIR)
  
4.2 编写模块注册文件spsim_module.c

#include <stdlib.h>
#include "skyeye_module.h"
#include "skyeye_mach.h"
#include "simple_top.h"
const char* skyeye_module = "spsim";

void module_init(){
        test_main();
}

void module_fini(){
}

 

4.3 simple_test.cpp

#include "simple_test.h"

SIMPLE_TEST::SIMPLE_TEST (
                                       sc_core::sc_module_name name
                                   ):
                                       sc_core::sc_module(name)
{
    // ===================================
    // TODO : init local variables
    // ===================================


    // ===================================
    // End TODO
    // ===================================

    SC_THREAD(Hello);

} // end of SIMPLE_INITIATOR


SIMPLE_TEST::~SIMPLE_TEST()
{

}

void
SIMPLE_TEST::Hello(void)
{
    while (1)
    {
        printf("Hello world/n");
        wait(15,sc_core::SC_NS);
    }
}

 

4.4 simple_top.cpp

#include "simple_test.h"

#ifdef __cplusplus
 extern "C" {
#endif

int test_main(){

    SIMPLE_TEST *test = new SIMPLE_TEST("SimpleTest");
#if 1
    int index = 0;
    while (index < 30)
    {
        sc_start(10,sc_core::SC_NS);
        index++;
    }
    return 0;
#endif
}

#ifdef __cplusplus
}
#endif

 

4.5 simple_test.h

#ifndef  __SIMPLE_TEST_H
#define  __SIMPLE_TEST_H
// base requirment of TLM 2.0
#include "type_def.h"
class SIMPLE_TEST : public sc_core::sc_module
{
  public:
    SC_HAS_PROCESS (SIMPLE_TEST);
    SIMPLE_TEST(
                       sc_core::sc_module_name name
                    );
    ~SIMPLE_TEST();
    void Hello (void);
  private:

}; // end definiation of class SIMPLET_TEST

#endif //__SIMPLE_TEST_H

 

4.6 simple_top.h

#ifndef __SIMPLE_TOP_H__
#define __SIMPLE_TOP_H__

#ifdef __cplusplus
 extern "C" {
#endif

int sc_main();

#ifdef __cplusplus
}
#endif

#endif

三、编译运行


原文链接:http://blog.csdn.net/michael_kang/article/details/5864168
加载中
返回顶部
顶部