SlideShare a Scribd company logo
1 of 56
Download to read offline
オレオレSystemC入門
@LSI設計雑記帳
※注意事項※
本資料は筆者が所属している団体や組織に関
係あるものではありません。

本資料内のソースコードを使って問題が起き
ても筆者は責任取りません。

楽しく見ていただければ幸いです。
自己紹介
Blog:LSI設計雑記帳

http:/
/lsifrontend.blog100.fc2.com/

Twitter:@kocha2012

https:/
/twitter.com/kocha2012

GitHub:Kocha

https:/
/github.com/Kocha
SystemC is 何
C++のクラスライブラリで
HLSの入力言語だったり、

仮想環境モデリング言語

だったりするのです!
※HLS(High Level Synthsis)
ようこそ!
SystemCの世界へ
Hello World
#include <systemc.h>

!

int sc_main(int argc, char *argv[]) {

!

printf("Hello World!!!n");

!

return 0;

}
Hello World

SystemCのヘッダーをinclude
#include <systemc.h>

!

int sc_main(int argc, char *argv[]) {

!
main関数は「sc_main」
printf("Hello World!!!n");

!

return 0;

}
Hello World
$> ./main 

!

SystemC 2.3.0-ASI --- Jul 13 2012 06:33:43

Copyright (c) 1996-2012 by all Contributors,

ALL RIGHTS RESERVED

!

Hello World!!!

\(^o^)/

できた∼
おわり
ってことはなく、

まだまだ続きます!
目次
理解する

設計する

検証する

次回予告
理解する
SystemCとは
SystemCは、プログラム言語であるC++のクラスライブラリ
として提供されており、それ自体言語として独立した文法
を持つものではない。ライブラリにはハードウェア記述の
為の機能、すなわち並列実行の概念やデータ型、それを扱
う各種関数が定義されている。それを使って書かれたプロ
グラムは通常のC++コンパイラでコンパイルすることがで
き、結果生成されたオブジェクトはハードウェアのシミュ
レータとして動作する。
※Wikipedia(http:/
/ja.wikipedia.org/wiki/SystemC)より
SystemCの適用場面
仮想環境:Virtual Platform

ソフトウェア開発環境

トランザクションベース(TLM2.0)

高位合成:High Level Synthsis

SystemC→Verilog HDL/VHDL

サイクルベース
知っておきたいC++基礎
※ポインタ:C言語
クラスとメンバ


オーバーロード


オブジェクト


オーバーライド


コンストラクタ


多態性       

継承

(インヘリタンス)


(ポリモフィズム)

テンプレート
※他にもありますが、入門編なので省略
SystemCのシステム構成
「モジュール」と呼ばれるデザイン内に

「プロセス」により関数内で機能を記述し

「チャネル」でモジュール間を接続する。

!

各プロセスは同時並列に実行

プロセス内は逐次実行
sc_main
sc_main()
モジュール

(SC_MODULE)

sc_main()
モジュール

モジュール

モジュール
プロセス

(SC_THREAD/SC_METHOD/SC_CTHREAD)

sc_main()
モジュール
プロセス

モジュール
プロセス

モジュール
プロセス

プロセス
チャネル

(sc_prim_channel)

sc_main()
モジュール
プロセス

モジュール
チャネル

チャネル
プロセス

プロセス

モジュール
プロセス

プロセス

ポート/インターフェース
設計する
モジュールを作る

プロセスを定義する

機能(処理)を記述する
SC_MODULE( hoge ) {

!

sc_in<int> in;

sc_out<int> out;

!

int x;

!

void process();

!

};

SC_CTOR( hoge )

{

SC_THREAD( process );

sensitive << in ;

x = 10;

}


void hoge::process() {

out = 0;

while(1) {

wait();

out = in * x;

}

};
SC_MODULE( hoge ) {


モジュール宣言

!

sc_in<int> in;

sc_out<int> out;

int x;

!

void process();


};

#define SC_MODULE(name) struct name : sc_module
※classで書く場合(sc_moduleを継承する)

!

!

※実装はマクロ(struct)

class hoge : public sc_module {

...

};
※Verilog HDL/SystemVerilogでの意味
module hoge(...);

:

endmodule

SC_CTOR( hoge )

{

SC_THREAD( process );

sensitive << in ;

x = 10;

}
SC_MODULE( hoge ) {


モジュール宣言

!

sc_in<int> in;

sc_out<int> out;

!

int x;


初期化処理を記述する部分

!

void process();

!

};

SC_CTOR( hoge )

 コンストラクタ宣言
{

SC_THREAD( process );

sensitive << in ;

x = 10;

}
SC_MODULE( hoge ) {

※実装はマクロ

!

sc_in<int> in;

sc_out<int> out;

!

int x;

!

void process();

!

};

#define SC_CTOR(name) implementation-defined;
name(sc_module_name)
※マクロを使わずで書く場合
SC_MODULE( hoge ) {

必ず必要
...

SC_HAS_PROCESS(hoge);

hoge( sc_module_name n) : sc_module_name(n) {

SC_THREAD( processs );

...

SC_CTOR( hoge )

 コンストラクタ宣言
{

SC_THREAD( process );

sensitive << in ;

※SystemVerilogだと new関数
class hoge;

x = 10;

function new();

}

:

endfunction
豆知識:初期化リスト
※サブモジュールのインスタンス時など

SC_MODULE( hoge ) {

!
sc_in<int> in;

sc_out<int> out;

!
int x;

!
void process();

!
SC_CTOR( hoge )

{

SC_THREAD( process );

sensitive << in ;

x = 10;

}

};

 書かないといけない場合もあります

書いておくと良いことあるかも!
SC_CTOR( hoge ):

in(“in”), out(“out”) 

{

http:/
/lsifrontend.blog100.fc2.com/blog-entry-432.html
SC_MODULE( hoge ) {

!

sc_in<int> in;

sc_out<int> out;

!

int x;

!

void process();

!

};

SC_CTOR( hoge )

{

SC_THREAD( process );

プロセスを定義
sensitive << in ;

x = 10;

}
SC_MODULE( hoge ) {

!

sc_in<int> in;

sc_out<int> out;

!

int x;

!

void process();

!

};

実際の機能(処理)

void hoge::process() {

out = 0;

while(1) {

wait();

out = in * x;

}

};

SC_CTOR( hoge )

機能(処理)が記述されている関数
{

SC_THREAD( process );

プロセスを定義
sensitive << in ;

x = 10;

}
SC_MODULE( hoge ) {

!

sc_in<int> in;

sc_out<int> out;

!

int x;

!

引数無しの関数

void process();

!

};

void hoge::process() {

out = 0;

while(1) {

wait();

 sensitiveに登録されている

動作待ち
out = in * x;

}

};

SC_CTOR( hoge )

{

SC_THREAD( process );

プロセスを定義
sensitive << in ;

x = 10;

 機能(処理)が動くきっかけを指定

}

(この例だと in の値が変化したら)
プロセス定義は3種類
SC_THREAD
SC_THREAD( process );

sensitive << in ;
void hoge::process() {

...

初期動作
...

wait(); / wait - in(value)

/
...

Simulation
...

wait(); / wait - in(value)

/
...

wait(); / wait - in(value)

/
...

}
再度呼び出しなし

・関数から抜けると再度呼び出されないため

while文や for文で無限ループを作る
プロセス定義は3種類
SC_METHOD
SC_METHOD( process );

sensitive << a << b ;
void hoge::process() {

wait - a,b(value)
...

...

...

...

...

}


!
!
!

初期動作 Simulation
終了まで繰り返す
・繰り返し実行されるプロセス

・waitは記述出来ない
プロセス定義は3種類
SC_CTHREAD
SC_CTHREAD( process, clock.pos() );

reset_signal_is(reset, true);
void hoge::process() {

...

初期動作
...

...

while(1) {

wait(); / wait - prosedge clock

/
...

wait(); / wait - posedge clock

/
...

}

reset_signal_isで

設定されていれば強制的に
}
・SC_THREADをクロックイベント用にしたもの

・関数から抜けると再度呼び出されないため

while文や for文で無限ループを作る
プロセス定義は3種類
SC_THREAD

SC_METHOD

SC_THREAD( process );

sensitive << in ;

SC_METHOD( process );

sensitive << a << b ;

void hoge::process() {

...

初期動作
...

wait(); / wait - in(value)

/
...

Simulation
...

wait(); / wait - in(value)

/
...

wait(); / wait - in(value)

/
...

}
再度呼び出しなし

void hoge::process() {

wait - a,b(value)
...

...

...

...

...

}


!
!
!

初期動作 Simulation
終了まで繰り返す

SC_CTHREAD
SC_CTHREAD( process, clock.pos() );

reset_signal_is(reset, true);
void hoge::process() {

...

初期動作
...

...

while(1) {

wait(); / wait - prosedge clock

/
...

wait(); / wait - posedge clock

/
...

}

reset_signal_isで

設定されていれば強制的に
}

初期動作は dont_initialize();で抑制可能

例)SC_THREAD( process );

sensitive << in ;

dont_initialize();
sensitive記述は様々
※for文で記述することも出来ます。
SC_THREAD( process );

sensitive << in ;
SC_THREAD( process );

sensitive << in1 << in2 ;
SC_THREAD( process );

sensitive << in1.pos() ;

sensitive << in2.neg() ;
SC_THREAD( process );

sensitive << in1.posedge() ;

sensitive << in2.negeage() ;
(async_)reset_signal_is
SystemC-2.3から追加

reset_signal_is

async_reset_signal_is

SC_THREAD( process );

reset_signal_is( reset, true);

SC_THREAD( process );

 信号名 極性
async_reset_signal_is( reset_n, false);

※clock立ち上がりエッジ(posedge)の場合
clock
reset
リセット期間
reset_n
リセット期間
SC_MODULE( hoge ) {

!

sc_in<int> in;

入出力ポート(Interface)宣言
sc_out<int> out;

※SystemVerilogでの意味

!

int x;

!

void process();

!

};

module hoge(

input bit[31:0] in,

output bit[31:0] out

);

:

endmodule

SC_CTOR( hoge )

{

SC_THREAD( process );

sensitive << in ;

x = 10;

}
SC_MODULE( hoge ) {

!

sc_in<int> in;

sc_out<int> out;

!

int x;

!

void process();

!

};

SC_CTOR( hoge )

{

SC_THREAD( process );

sensitive << in ;



out.initialize(0);
っと書くことも可能
}


void hoge::process() {

out = 0;

while(1) {

wait();

out = in * x;

}

};
このように動いてます。

out.write(0);

while(1) {

wait();

out.write( in.read() * x);

}
ポートとチャネル
port/interface

接続するchannel
sc_signal

sc_in/out/inout

sc_buffer
sc_clock

sc_fifo_in/out

sc_fifo

sc_mutex_if

sc_mutex

sc_semaphrore_if

sc_semaphore
チャネルはレジスタ(FF)
#include <systemc.h>

!
int sc_main(int argc, char *argv[]) {

int a;

sc_signal<int> b;

!
a = 10; b = 10;

std::cout << "a = " << a << ", b = " << b << std::endl;

!
sc_start(1, sc_core::SC_NS);

std::cout << "a = " << a << ", b = " << b << std::endl;

!
return 0;

}

実行結果

a = 10, b = 0

a = 10, b = 10

シミュレーション時刻の経過により値が更新される。

(代入はノンブロッキング代入)
チャネルはWire
sc_signal<int> x0y0;


!
laplacian_filter dut("dut");

testbench tb("tb");


!
dut.clk(clk);

dut.x0y0(x0y0); / input

/
:

dut.out(y);

接続(wire)


tb.clk(clk);

tb.x0y0(x0y0); / output

/
:

チャネルは用途において、regもしくはwireとなる。
SC_MODULE( hoge ) {

!

sc_in<int> in;

sc_out<int> out;

!

データ型
int x;


!

void process();

!

};

SC_CTOR( hoge )

{

SC_THREAD( process );

sensitive << in ;

x = 10;

}
SC_MODULE( hoge ) {

!

sc_in<int> in;

sc_out<int> out;

!

データ型
int x;


SystemCはC++なので、


!

void process();


C++のデータ型は全て使えます。
SC_CTOR( hoge )

!

{


};

}


SC_THREAD( process );

sensitive << in ;

x = 10;
SystemCで追加された型
データ型
sc_int<N>
sc_uint<N>
sc_bigint<N>
sc_biguint<N>
sc_bit
sc_logic
sc_bv<N>
sc_lv<N>
sc_fixed<NW, NI>
sc_ufixed<NW, NI>

説明

記述例

Nビット整数

sc_int<8> a = -123;

Nビット符号なし整数

sc_uint<8> a = 0xab;

64ビット以上のsc_int

sc_bigint<128> = “0xaaa...”;

64ビット以上のsc_uint

sc_biguint<128> = “0xaaa...”;

’0’, ’1’ の2値 (使用は非推奨) sc_bit a = ‘1’;
’0’, ’1’, ’x’, ’z’の4値

sc_logic a = ‘z’;

Nビットの sc_bit

sc_bv<8> a = “10101010”;

Nビットの sc_logic

sc_lv<8> a = “1x101z10”;

固定小数点

sc_fixed<8,4> a = -0.25;

符号なし固定小数点

sc_uifixed<8,4> a = -1.75;
独自のデータ型(MyType)
class/structに必ず実装するメンバ関数
比較演算子

bool operator == (const MyType & rhs) const {

代入演算子

MyType& operator = (const MyType& rhs) {

トレース関数

void sc_trace(sc_trace_file *tf, const MyType & v,

const std::string & NAME ) {

出力演算子

ostream& operator << ( ostream& os, MyType const & v ) {
検証する
sc_main

モジュールをインスタンスする

信号を生成する

変数の値を表示する

タイミング波形を取得する
sc_mainは必須
#include <systemc.h>

s_in = 0;


sc_start(10, SC_NS);
int sc_main(int argc, char *argv[]) { cout << "in = " << s_in
<< ", out = " << s_out << endl;

sc_signal<int> s_in, s_out;



hoge m_hoge(“m_hoge”);
s_in = 10;


m_hoge.in(s_in);
sc_start(10, SC_NS);
m_hoge.out(s_out);
cout << "in = " << s_in


<< ", out = " << s_out << endl;



return 0;


}
モジュールをインスタンス
#include <systemc.h>

s_in = 0;


sc_start(10, SC_NS);
cout << "in = " << s_in
<< ", out = " << s_out << endl;


int sc_main(int argc, char *argv[]) {
sc_signal<int> s_in, s_out;





hoge m_hoge(“m_hoge”);
m_hoge.in(s_in);
m_hoge.out(s_out);
※別の書き方
hoge *m_hoge;

m_hoge = new hoge(“m_hoge”);

m_hoge->in(s_in);

m_hoge->out(s_out);

}

s_in = 10;


sc_start(10, SC_NS);
cout << "in = " << s_in


<< ", out = " << s_out << endl;



return 0;
信号を生成
#include <systemc.h>

s_in = 0;


sc_start(10, SC_NS);
cout << "in = " << s_in
<< ", out = " << s_out << endl;


int sc_main(int argc, char *argv[]) {
※sc_in/outの接続は sc_signal

sc_signal<int> s_in, s_out;


※sc_startでシミュレーション開始

hoge m_hoge(“m_hoge”);
m_hoge.in(s_in);
m_hoge.out(s_out);

}




s_in = 10;


sc_start(10, SC_NS);
cout << "in = " << s_in


<< ", out = " << s_out << endl;



return 0;
変数の値を表示する
■cout

sc_signal - << operator

sc_intなど- a.to_string()関数が存在

s_in = 0;


■printf

sc_start(10, SC_NS);


sc_intなど- a.to_int()関数が存在

 cout << "in = " << s_in


<< ", out = " << s_out << endl;
■sc_report



SystemC定義の表示形式関数

s_in = 10;


sc_start(10, SC_NS);


!
cout << "in = " << s_in


★ sc_time_stamp() で

<< ", out = " << s_out << endl;

時刻も表示!


return 0;


}
タイミング波形を取得
#include <systemc.h>

s_in = 0;
sc_start(10, SC_NS);
cout << "in = " << s_in
<< ", out = " << s_out << endl;


int sc_main(int argc, char *argv[]) {








sc_signal<int> s_in, s_out;



sc_trace_file *tf;

s_in = 10;




tf = sc_create_vcd_trace_file("waves"); sc_start(10, SC_NS);
sc_trace(tf, s_in, "in");
sc_trace(tf, s_out, "out");
hoge m_hoge(“m_hoge”);
m_hoge.in(s_in);
m_hoge.out(s_out);




cout << "in = " << s_in




<< ", out = " << s_out << endl; 



sc_close_vcd_trace_file(tf);
return 0;


※閉じることを忘れずに
}
余談
SystemCのシミュレータは無償なので、

いつでもシミュレーションできます。

Webでも → http:/
/www.edaplayground.com

仮想環境(Virtual Platform/TLM2.0)について
は別スライドを作成する予定です。

最近、SystemC流行ってます!(ステマ)

この機会に是⾮非トライしてみてください!
おわり

More Related Content

What's hot

メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろう
Kota Mizushima
 
ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術
ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術
ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術
Masahiro Nagano
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
Norishige Fukushima
 

What's hot (20)

[Container Runtime Meetup] runc & User Namespaces
[Container Runtime Meetup] runc & User Namespaces[Container Runtime Meetup] runc & User Namespaces
[Container Runtime Meetup] runc & User Namespaces
 
LLVM最適化のこつ
LLVM最適化のこつLLVM最適化のこつ
LLVM最適化のこつ
 
UEFIによるELFバイナリの起動
UEFIによるELFバイナリの起動UEFIによるELFバイナリの起動
UEFIによるELFバイナリの起動
 
高負荷に耐えうるWebApplication Serverの作り方
高負荷に耐えうるWebApplication Serverの作り方高負荷に耐えうるWebApplication Serverの作り方
高負荷に耐えうるWebApplication Serverの作り方
 
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgenIntel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
 
きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回
 
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
 
Golangにおける端末制御 リッチなターミナルUIの実現方法
Golangにおける端末制御 リッチなターミナルUIの実現方法Golangにおける端末制御 リッチなターミナルUIの実現方法
Golangにおける端末制御 リッチなターミナルUIの実現方法
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろう
 
Rust で RTOS を考える
Rust で RTOS を考えるRust で RTOS を考える
Rust で RTOS を考える
 
ARM LinuxのMMUはわかりにくい
ARM LinuxのMMUはわかりにくいARM LinuxのMMUはわかりにくい
ARM LinuxのMMUはわかりにくい
 
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミングC++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
 
自動でバグを見つける!プログラム解析と動的バイナリ計装
自動でバグを見つける!プログラム解析と動的バイナリ計装自動でバグを見つける!プログラム解析と動的バイナリ計装
自動でバグを見つける!プログラム解析と動的バイナリ計装
 
JavaでCPUを使い倒す! ~Java 9 以降の CPU 最適化を覗いてみる~(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...
JavaでCPUを使い倒す! ~Java 9 以降の CPU 最適化を覗いてみる~(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...JavaでCPUを使い倒す! ~Java 9 以降の CPU 最適化を覗いてみる~(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...
JavaでCPUを使い倒す! ~Java 9 以降の CPU 最適化を覗いてみる~(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...
 
ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術
ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術
ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術
 
Vivado hls勉強会1(基礎編)
Vivado hls勉強会1(基礎編)Vivado hls勉強会1(基礎編)
Vivado hls勉強会1(基礎編)
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
 
llvm入門
llvm入門llvm入門
llvm入門
 
ACRiウェビナー:小野様ご講演資料
ACRiウェビナー:小野様ご講演資料ACRiウェビナー:小野様ご講演資料
ACRiウェビナー:小野様ご講演資料
 
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 とPHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
 

Viewers also liked

SystemC Verification Methodology
SystemC Verification MethodologySystemC Verification Methodology
SystemC Verification Methodology
kocha2012
 
Design Verification Using SystemC
Design Verification Using SystemCDesign Verification Using SystemC
Design Verification Using SystemC
DVClub
 
高速で無駄のない開発をするチームのための"7つ道具"(2014/03/08 - Websig)
高速で無駄のない開発をするチームのための"7つ道具"(2014/03/08 - Websig)高速で無駄のない開発をするチームのための"7つ道具"(2014/03/08 - Websig)
高速で無駄のない開発をするチームのための"7つ道具"(2014/03/08 - Websig)
Yoshihito Kuranuki
 
A practical introduction to hardware software codesign 2e
A practical introduction to hardware software codesign  2eA practical introduction to hardware software codesign  2e
A practical introduction to hardware software codesign 2e
Springer
 
Hardware Software Codesign
Hardware Software CodesignHardware Software Codesign
Hardware Software Codesign
destruck
 
System On Chip
System On ChipSystem On Chip
System On Chip
anishgoel
 
Design of embedded systems
Design of embedded systemsDesign of embedded systems
Design of embedded systems
Pradeep Kumar TS
 

Viewers also liked (12)

SystemC Verification Methodology
SystemC Verification MethodologySystemC Verification Methodology
SystemC Verification Methodology
 
Design Verification Using SystemC
Design Verification Using SystemCDesign Verification Using SystemC
Design Verification Using SystemC
 
SystemC
SystemCSystemC
SystemC
 
高速で無駄のない開発をするチームのための"7つ道具"(2014/03/08 - Websig)
高速で無駄のない開発をするチームのための"7つ道具"(2014/03/08 - Websig)高速で無駄のない開発をするチームのための"7つ道具"(2014/03/08 - Websig)
高速で無駄のない開発をするチームのための"7つ道具"(2014/03/08 - Websig)
 
A practical introduction to hardware software codesign 2e
A practical introduction to hardware software codesign  2eA practical introduction to hardware software codesign  2e
A practical introduction to hardware software codesign 2e
 
Pythonによる高位設計フレームワークPyCoRAMでFPGAシステムを開発してみよう
Pythonによる高位設計フレームワークPyCoRAMでFPGAシステムを開発してみようPythonによる高位設計フレームワークPyCoRAMでFPGAシステムを開発してみよう
Pythonによる高位設計フレームワークPyCoRAMでFPGAシステムを開発してみよう
 
並列データベースシステムの概念と原理
並列データベースシステムの概念と原理並列データベースシステムの概念と原理
並列データベースシステムの概念と原理
 
Hardware Software Codesign
Hardware Software CodesignHardware Software Codesign
Hardware Software Codesign
 
System on Chip (SoC)
System on Chip (SoC)System on Chip (SoC)
System on Chip (SoC)
 
System On Chip
System On ChipSystem On Chip
System On Chip
 
Design of embedded systems
Design of embedded systemsDesign of embedded systems
Design of embedded systems
 
TDD のこころ @ OSH2014
TDD のこころ @ OSH2014TDD のこころ @ OSH2014
TDD のこころ @ OSH2014
 

Similar to SystemC Tutorial

Continuation with Boost.Context
Continuation with Boost.ContextContinuation with Boost.Context
Continuation with Boost.Context
Akira Takahashi
 
Boost9 session
Boost9 sessionBoost9 session
Boost9 session
freedom404
 
Dive into RTS - another side
Dive into RTS - another sideDive into RTS - another side
Dive into RTS - another side
Kiwamu Okabe
 
みんな大好き! Hello, World
みんな大好き! Hello, Worldみんな大好き! Hello, World
みんな大好き! Hello, World
Naohiro Aota
 
for JSDeferred Code Reading
for JSDeferred Code Readingfor JSDeferred Code Reading
for JSDeferred Code Reading
Kenichirou Oyama
 
ぱっと見でわかるC++11
ぱっと見でわかるC++11ぱっと見でわかるC++11
ぱっと見でわかるC++11
えぴ 福田
 
Wavelet matrix implementation
Wavelet matrix implementationWavelet matrix implementation
Wavelet matrix implementation
MITSUNARI Shigeo
 

Similar to SystemC Tutorial (20)

Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7
 
VerilatorとSystemC
VerilatorとSystemCVerilatorとSystemC
VerilatorとSystemC
 
Continuation with Boost.Context
Continuation with Boost.ContextContinuation with Boost.Context
Continuation with Boost.Context
 
Boost Tour 1_58_0 merge
Boost Tour 1_58_0 mergeBoost Tour 1_58_0 merge
Boost Tour 1_58_0 merge
 
Objc lambda
Objc lambdaObjc lambda
Objc lambda
 
Boost Tour 1.50.0
Boost Tour 1.50.0Boost Tour 1.50.0
Boost Tour 1.50.0
 
Boost Tour 1.50.0 All
Boost Tour 1.50.0 AllBoost Tour 1.50.0 All
Boost Tour 1.50.0 All
 
Boost9 session
Boost9 sessionBoost9 session
Boost9 session
 
x86とコンテキストスイッチ
x86とコンテキストスイッチx86とコンテキストスイッチ
x86とコンテキストスイッチ
 
Prosym2012
Prosym2012Prosym2012
Prosym2012
 
Dive into RTS - another side
Dive into RTS - another sideDive into RTS - another side
Dive into RTS - another side
 
みんな大好き! Hello, World
みんな大好き! Hello, Worldみんな大好き! Hello, World
みんな大好き! Hello, World
 
for JSDeferred Code Reading
for JSDeferred Code Readingfor JSDeferred Code Reading
for JSDeferred Code Reading
 
Flutterを体験してみませんか
Flutterを体験してみませんかFlutterを体験してみませんか
Flutterを体験してみませんか
 
規格書で読むC++11のスレッド
規格書で読むC++11のスレッド規格書で読むC++11のスレッド
規格書で読むC++11のスレッド
 
ぱっと見でわかるC++11
ぱっと見でわかるC++11ぱっと見でわかるC++11
ぱっと見でわかるC++11
 
Siv3Dで楽しむゲームとメディアアート開発
Siv3Dで楽しむゲームとメディアアート開発Siv3Dで楽しむゲームとメディアアート開発
Siv3Dで楽しむゲームとメディアアート開発
 
初めてのSTL
初めてのSTL初めてのSTL
初めてのSTL
 
Boost tour 1_40_0
Boost tour 1_40_0Boost tour 1_40_0
Boost tour 1_40_0
 
Wavelet matrix implementation
Wavelet matrix implementationWavelet matrix implementation
Wavelet matrix implementation
 

Recently uploaded

Recently uploaded (11)

論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 

SystemC Tutorial