2024-01-01から1年間の記事一覧

Learn gem5 #4 (Event-driven programming)

だいぶ空いてしまった。 Event-driven programming ソースを編集。 --- ../backup/1/src/learning_gem5/part2/hello_object.hh 2024-04-03 22:02:25.385861133 +0900 +++ src/learning_gem5/part2/hello_object.hh 2024-04-03 22:04:29.235837762 +0900 @@ -…

Learn gem5 #3 (Creating a very simple SimObject, Debugging gem5)

Creating a very simple SimObject https://www.gem5.org/documentation/learning_gem5/part2/helloobject/とりあえず書いてあるとおりに作業を進める。 バックアップしてスクラッチから書いていく。 $ git checkout -b hello-simobject $ mkdir -p backup/s…

Learn gem5 #2 (Creating a simple configuration script~Extending gem5 for ARM)

Creating a simple configuration script https://www.gem5.org/documentation/learning_gem5/part1/simple_config/まずは動かしてみる。 $ mkdir -p configs/tutorial/part1/ $ cp configs/learning_gem5/part1/simple.py configs/tutorial/part1/ $ build/…

Learn gem5 #1 (Introduction~Building gem5)

今日からは gem5 を触ってみる。 https://en.wikipedia.org/wiki/Gem5 www.gem5.orgWikipedia によると、gem5 は m5 (CPUシミュレーションフレームワーク)と GEMS (メモリタイミングシミュレータ) が合体したものであり、複数の実行モードを持つイベント駆動…

Getting Started with TLM-2.0 (Tutorial 3 - Routing Methods through Interconnect Components)

www.doulos.com Introduction ここではインターコネクトコンポーネントを通じてトランザクションが伝搬していくのを見ていく。すなわち、ルーターがイニシエータといくつかのターゲットメモリの間に配置される。 ルーターはトランザクション、DMI、デバッグ…

Getting Started with TLM-2.0 (Tutorial 2 - Response Status, DMI, and Debug Transport)

www.doulos.com2つ目のチュートリアルでは汎用ペイロードの返答ステータス、デバッグメモリ、デバッグ転送インタフェースを見ていく。 The Response Status of the Generic Payload Example 1ではターゲットがトランザクションを実行できなかった場合、単純…

Getting Started with TLM-2.0 (Tutorial 1 - Sockets, Generic Payload, Blocking Transport)

今日からはGetting Started with TLM-2.0を見ていく。www.doulos.com長いので重要なところだけ訳していく。 Modeling Concepts TLMはプロセス間通信にフォーカスしている。 OSCI TLM-2.0では特に、オンチップのメモリマップドバスのモデリングにフォーカスし…

Learn SystemC with Examples #9 (Clock~Interrupt a thread while busy, template class)

Clock https://www.learnsystemc.com/basic/clocksc_clockはsc_signalから派生したプリミティブチャネルで、クロックのモデリングに使われる。 クロックの値やイベントはsc_signal_in_if<bool>インタフェース経由でアクセスできる。 コンストラクタの各引数の意味</bool>…

Learn SystemC with Examples #8 (Primitive Channel~Customized Data Type)

Primitive Channel https://www.learnsystemc.com/basic/primitive_channelsc_prim_channelとは すべてのプリミティブチャネルの基底クラス updateフェーズへの固有のアクセスを提供する 階層、ポート、プロセスを含まない 階層チャネルと同様、プリミティブ…

Learn SystemC with Examples #7 (Communication: port~Communication: port array)

Communication: port https://www.learnsystemc.com/basic/port通信にはキーとなる概念が3つある。 インタフェース sc_interface から派生した抽象クラス。sc_objectからは派生していない。 純粋仮想関数を持ち、それらはインタフェースを継承したチャネル内…

Learn SystemC with Examples #6 (Signal: read and write~Buffer)

Signal: read and write https://www.learnsystemc.com/basic/signal_readwritesc_signalとは プリミティブチャネルであり、電気信号を運ぶワイヤーをモデリングするために使う evaluate-update方式を使う。これにより、同時read/writeのふるまいが一意にな…

Learn SystemC with Examples #5 (Mutex~FIFO)

Mutex https://www.learnsystemc.com/basic/channel_mutexMutexとは チャネルの一種であり、排他制御ロックをモデリングするためのもの。 lockedとunlockedの2つのステートがある Mutexをロックできるプロセスは同時に1つまで。 Mutexはロックされたプロセス…

Learn SystemC with Examples #4 (Initialization~Combined Event Queue)

Initialization https://www.learnsystemc.com/basic/initialization初期化は実行ステージの一部で、sc_start()の後に行われる。初期化中は以下の3ステップが順に行われる。 updateフェーズの実行。ただし、delta notificationフェーズには移らない。 全メソ…

Learn SystemC with Examples #3 (Event~Sensitivity)

Event https://www.learnsystemc.com/basic/eventイベントとはsc_event型のオブジェクトであり、プロセス間の同期に使われる。 イベント通知が起こると、プロセスインスタンスはトリガーもしくはレジュームされる。sc_eventは以下のメソッドを持つ。 void no…

Learn SystemC with Examples #2 (Simulation Process~Concurrency)

Simulation Process https://www.learnsystemc.com/basic/simu_processシミュレーションプロセスとは sc_moduleクラスのメンバー関数であり 引数がなく戻り値もなく シミュレーションカーネルにより登録されるものである。 シミュレーションプロセスを登録す…

Learn SystemC with Examples #1 (Hello World~SC_HAS_PROCESS)

www.learnsystemc.com を試していく。まずはHello Worldから。 Hello World https://www.learnsystemc.com/basic/hello_worldこのページのサンプルコードをhello.ccとして保存する。Makefileを用意する。 include Makefile.config PROJECT = hello OBJS = $(…

SystemCのインストール

SystemCはGithubに公開されている。 github.comTagsを見ると、2.3.4の安定版と3.0.0の開発版がある。 Tags · accellera-official/systemc · GitHubせっかくなので3.0.0開発版をインストールしてみよう。まずはcloneする。 $ cd $HOME/work $ git clone https…