What is SystemC - VLSI Signal Processing Lab, EE, NCTU

Download Report

Transcript What is SystemC - VLSI Signal Processing Lab, EE, NCTU

Chapter 1 : SystemC Overview
What is SystemC

Systemc is a modeling platform



A set C++ class library to add hardware
modeling constructs
Simulation kernel
Supports different levels of abstraction



Untimed Functional Model
Transaction Level Model
Bus Function Model
Why we need systemc

The increasingly shortened time to
market requirements


Verify the design in early time
The growing complexity

Integration of devise devices
SystemC Heritage
ref : SOCLab 03_SOC_Design_Flow.pdf, 2004 spring, NCTU
SystemC Design Flow
Using software to simulate
hardware behavior

Extensions




Parallel execution
Clock
Module concept
Interconnection
Example – half adder
#include “systemc.h”
SC_MODULE(half_adder) {
sc_in<bool>a, b;
sc_out<bool>sum, carry;
void proc_half_adder();
SC_CTOR(half_adder) {
SC_METHOD (proc_half_adder);
sensitive << a << b;
}
};
void half_adder::proc_half_adder() {
sum = a ^ b;
carry = a & b;
}
Module --- Basic Block

Verilog
module module_name(input/output declaration)
variable declaration
computation block
endmodule

SystemC
SC_MODULE (module_name) {
input/output declaration
internal variable
constructor (computation block)
};
Input/output Declaration

Verilog




Input : input var1, …;
Output : output var2, …;
Type
SystemC



input : sc_in<type> var1, …;
Output : sc_out<type>var2, …;
Type



C++ primitive type : int, float, char, ...
hardware type : sc_int, sc_uint, ...
user defined type
Computation Block

Verilog



Event trigger : always@(a or b or c)
Edge trigger : always@(posedge clk)
SystemC
SC_CTOR (module_name) {
SC_METHOD (function name);
sensitive << a << b << c;
…
}
C++ constructor
Computation function name
Sensitivity list
Describing Hierarchy
#include “half_adder.h”
SC_MODULE (full_adder) {
sc_in<bool>a, b, carry_in;
sc_out<bool>sum, carry_out;
sc_signal<bool>c1, s2, c2;
void proc_or();
half_adder ha1(“ha1”), ha2(“ha2”);
SC_CTOR(full_adder) {
ha1.a(a);
//by name connection
ha1.b(b);
ha1.sum(s1);
ha1.carry(c1);
h2(s1, carry_in, sum c2) //by position connection
SC_METHOD (proc_or);
seneitive << c1 << c2;
}
};
Main --- Top Module
#Include “full_adder.h”
#Include “pattern_gen.h”
#include “monitor.h”
int sc_main(int argc, char* argv[]) {
sc_signal<booL> t_a, t_b, t_cin, t_sum, t_cout;
full_adder f1(“Fulladder”);
sum
Full_adder
carry
a
//connect using positional association
f1 << t_a << t_b << t_cin << t_sum << t_cout;
pattern_gen pg_ptr = new pattern_gen(“Genartion”);
//connection using named association
pg_ptr->d_a(t_a);
pg_ptr->d_b(t_b);
(*pg_ptr->d_cin(t_cin);
monitor mol(“Monitor”);
mo1 << t_a << t_b << t_cin << t_sum << t_cout;
sc_start(100, SC_NS);
return 0;
Monitor
b
c_in
Pattern_gen
SystemC Installation

Download



Decompress data to /path/to/destination


C:\temp\ systemc-2.0.1\
Open project file


http://twins.ee.nctu.edu.tw/courses/soc_sys_overview_04f
all/lab/systemc-2.0.1.tgz
http://www.systemc.org
C:\temp\systemc-2.0.1\msvc60\systemc\systemc.dsw
Build

Build->Build systemclib (F7)
Project compilation

Example


Decompression


File->New->Project->win32 Console application -> empty project
Add existed files



C:\temp
Create new project


http://twins.ee.nctu.edu.tw/courses/soc_sys_overview_04fall/lab/
systemc_ex01.rar
Project->Add to Project -> Files
main.c module.c module.h
Building argument and dependency



C++ runtime type indentification
Include path
Link path and libaray