简介
SystemC的意义,网上能查到,这里总结一下,System C是C++的library,类似UVM是systemverilog的library
下图是SystemC在整个项目中的角色
- 硬件架构探索,创建算法、性能模型;
- 验证工程师做为参考模型(经过DPI接口调用);
- 设计工程师将其做为design spec,设计RTL;
- 软件工程师做为软件开发的硬件模型;
- 使多种提早测试成为可能

一 按照
去官网下载tar包, SystemC
我下载的是SystemC 2.3.3 (Includes TLM), Core SystemC Language and Examples (tar.gz)
在linux上安装
1.放到linux 任意路径,tar -zxvf 解包
2.在systemc-2.3.3中有一个INSTALL的文件,安装步骤就可以了
2.1 mkdir objdir; 2.2 cd objdir; 2.3 export CXX=g++ or setenv CXX g++ 2.4 ../configure --prefix=/usr/local/systemc (重新指定安装路径) 2.5 make; 2.6 make check 2.7 make install 2.9 cleean
example 测试
在安装的文件下有 example, 进入make,
如果报错的话根据提示看一下就好,遇到了TARGET_ARCH, 使用的机器是linux64, default 这个变量是空的
二 Start with example
这里写了一个简单的hello world, 并自己写了一个makefile
example: hello world
例子没什么好说的,System C电子系统设计一开始就把code show出来了
#ifndef _HELLO_H
#define _HELLO_H
#include "systemc.h"
SC_MODULE(hello) {
SC_CTOR(hello) {
cout<<"Hello SystemC!"<<endl;
}
};
#endif
#include "hello.h"
int sc_main(int argc, char * argv[]) {
hello h("hello");
return 0;
}
makefile
g++ -O2 -Wall -Werror -Wno-unused-variable -Isrc -I/user/systemc/include -c main.cpp -o main.o
g++ -O2 -Wall -Werror -Wno-unused-variable -L/user/systemc/lib-linux64 -Wl,-rpath=/user/systemc/lib-linux64 -lsystemc -lm -o com main.o
这里可能会报找不到.so, 需要加入-Wl,-rpath=xxx, 把路径指过去,或者设置环境变量LD_LIBRARY_PATH
某些公司是module load systemc, 然后echo $SYSTEMC_HOME,试试
CXX := g++
GCCVERSION := $(shell expr `gcc -dumpversion`)
#FLAGS_STRICT = -pedantic -Wno-long-long
DEBUG = -g
CXXFLAGS= -O2 -Wall -Werror -Wno-unused-variable
SYSTEMC = /user/systemc
INCDIR = -Isrc -I$(SYSTEMC)/include
LIBDIR = -L$(SYSTEMC)/lib-linux64
LIBS = -lsystemc -lm
RPATH = $(SYSTEMC)/lib-linux64
SRCS := $(wildcard ./*.cpp)
OBJS = $(patsubst %cpp, %o, $(SRCS)) main.o
%.o: %.cpp
echo "Compile " $< " to " $@
$(CXX) $(CXXFLAGS) $(INCDIR) -c $< -o $@
all: $(OBJS)
$(CXX) $(CXXFLAGS) $(LIBDIR) -Wl,-rpath=$(RPATH) $(LIBS) -o $@ $^
./all
clean:
rm -rf *.o *.out ./com
example: nand2 with testbench
这个例子来自于System C电子系统设计,这里记录遇到的问题
1.sc_start(100, SC_NS); // 2.3.3版本需要把clock 单位加上
2.vcd 文档打开,simvision/verdi, open database 打开就行
三 基本概念
SC_MODULE
SC_MODULE(module)
实际上SC_MODULE的code如下: #define SC_MODULE(module_name) struct module_name : public sc_module, 所以也可以使用C++的方式定义module,class module : public sc_module; 两者区别是前者默认所有的成员是public的,而后者是private的
构造函数和析构函数
1. SC_CTOR
SC_CTOR(module_name) 中定义了SC_METHOD等3个进程所需要的一些定义
2.传统C++的方式
SC_AS_PROCESS(module_name);
module_name ( sc_module_name n): sc_module(n) {...}
析构函数: ~module_name(){...}
端口
sc_in<sc_uint< 8 >> din; // sc_in< sc_logic > a[32];
sc_out<sc_uint<8>>dout;
sc_inout<sc_uint<8>> dinout;
sc_in_clk clk;
sc_signal<bool> S1, S2, S3;
方法
read() // mem[addr.read()]wr_data.read();
write()
时钟
typedef sc_in<bool> sc_in_clk; 所以sc_in_clk 跟sc_in<bool>是等价的
sc_clock 类: 参数(name, period, 时间单位, 占空比, 开始时间, 第一个逻辑是低电平还是高电平)
eg: sc_clock clk("fclk", 20, SC_NS, 0.5, 5, true);
推荐写法: 1. sc_clock clk1("clk1", 20, SC_NS); 2. sc_clock clk2("clk2", 20, SC_NS, 0.5);
基本数据类型
操作符:
, : (a, b) 将a, b 串起来, 类似位拼接
range(left, range): 位选

本文详细介绍了SystemC在硬件架构探索、验证、设计和软件开发中的角色,包括如何安装和使用SystemC,以及其基本概念如SC_MODULE、进程、端口和通道。此外,还讨论了SystemC与UVM通过DPI的交互,以及TLM2接口。文章提供了一个简单的SystemC示例,并涵盖了SystemC与Verilog之间的接口和通信。
最低0.47元/天 解锁文章
1700





