SystemC学习(1)— SystemC安装与HelloWorld

SystemC学习(1)— SystemC安装与HelloWorld

一、前言

参考文档:
1、ubuntu系统安装systemc-2.3.4流程
2、SystemC语言学习笔记
3、SystemC资料2.ppt
4、SystemC入门笔记

二、安装包下载与安装

我们可以直接从官网下载SystemC的库安装包,SystemC官网地址:https://www.eda.org/downloads/standards/systemc
由于较高版本安装有些问题,所以我们选择systemc-2.3.3版本,如下所示选择下载:
在这里插入图片描述
下载好后解压:
在这里插入图片描述
然后我们需要新建一个安装目录:

mkdir /home/softs/systemc

然后进入解压后的目录,新建一个文件夹并进入:

cd systemc-2.3.3/
mkdir build && cd build

然后配置安装信息,指定安装目录:

../configure --prefix=/home/softs/systemc

如果要指定 C++11 标准,使用如下命令

../configure CXXFLAGS="-std=c++11" --prefix=/home/softs/systemc

如果要指定gcc工具的路径,使用如下命令

../configure --prefix=/home/softs/systemc/2.3.2 CC=/usr/local/gcc9/bin/gcc CXX=/usr/local/gcc9/bin/g++

然后使用如下命令进行编译和安装:

make -j 8
make install

然后在~/.bashrc添加如下内容设置环境变量

export SYSTEMC_HOME=/home/softs/systemc
export LD_LIBRARY_PATH=${SYSTEMC_HOME}/lib-linux64/:$LD_LIBRARY_PATH

如果是tcsh则添加如下内容设置设置环境变量

setenv SYSTEMC_HOME /home/softs/systemc
setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:${SYSTEMC_HOME}/lib-linux64

三、Hello测试

编写一个测试文件hello.cpp如下所示:

#ifndef _HELLO_H
#define _HELLO_H
#include "systemc.h"
SC_MODULE(hello)
{
    SC_CTOR(hello)
    {
        cout<<"Hello, SystemC!"<<endl;
    }
};
#endif
 
//main.cpp
int sc_main(int i, char* a[])
{
    hello h("hello");
    return 0;
}

使用如下命令进行编译:

g++ hello.cpp -I${SYSTEMC_HOME}/include/ -L${SYSTEMC_HOME}/lib-linux64 -o hello -lsystemc

然后使用如下命令执行:

./hello

然后可以成功看到打印:
在这里插入图片描述

四、逻辑实例

如下所示,编写一个2输入与非门的组合逻辑实例:

 
SC_MODULE(nand2) {
    sc_in<bool> A,B;
    sc_out<bool> F;

    void do_nand(){
        F = !(A&B);    
    }

    SC_CTOR(nand2){
        SC_METHOD(do_nand);
        sensitive<<A<<B;
    }
};

编写对应的testbench


SC_MODULE(tb) {
    sc_out<bool> a,b;
    sc_in<bool> f;
    sc_in_clk clk;

    void gen_input(){
        wait(); a=0; b=0;
        wait(); a=0; b=1;
        wait(); a=1; b=0;
        wait(); a=1; b=1;
        wait(); a=0; b=0;
        wait(); a=0; b=0;
    }
    void display_variable(){
        cout<<"a="<<a<<",b="<<b<<",f="<<f<<endl;    
    }

    SC_CTOR(tb) {
        SC_CTHREAD(gen_input, clk.pos());
        SC_METHOD(display_variable);
        sensitive<<f<<a<<b;
        dont_initialize();        
    }
    
};

在sc_main中将其实例化并创建波形记录文件;

int sc_main(int i, char* argv[])
{
    sc_signal<bool> signal_a;
    sc_signal<bool> signal_b;
    sc_signal<bool> signal_f;
    sc_clock clk("Clk", 20, SC_NS);
    
    nand2 N2("Nand2");
    N2.A(signal_a);
    N2.B(signal_b);
    N2.F(signal_f);

    tb tb1("tb");
    tb1.clk(clk);
    tb1.a(signal_a);
    tb1.b(signal_b);
    tb1.f(signal_f);

    // waveform trace file creation
    sc_trace_file *tf = sc_create_vcd_trace_file("Nand2");
    sc_trace(tf, N2.A, "A");
    sc_trace(tf, N2.B, "B");
    sc_trace(tf, N2.F, "F");

    sc_start(200, SC_NS);

    sc_close_vcd_trace_file(tf);

    return 0;
}

使用如下命令进行编译:

g++ hello.cpp -I${SYSTEMC_HOME}/include/ -L${SYSTEMC_HOME}/lib-linux64 -o hello -lsystemc

然后使用如下命令执行:

./hello

然后可以成功看到打印:
在这里插入图片描述
然后可以看到生成了对应的波形文件
在这里插入图片描述
将其打开可以看到信号的变化
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值