Clock
https://www.learnsystemc.com/basic/clock
sc_clockはsc_signalから派生したプリミティブチャネルで、クロックのモデリングに使われる。
クロックの値やイベントはsc_signal_in_if<bool>インタフェース経由でアクセスできる。
コンストラクタの各引数の意味は上のリンク参照。
Process: CTHREAD
https://www.learnsystemc.com/basic/cthread
SC_CTHREAD:
- SystemC 2.0 では deprecated. 2つ目の引数がイベントファインダーの場合はまだサポートされる。
- プロセス登録時にクロックを必要とする。
- SC_METHODやSC_THREADのようなセンシティビティリストを持たない
- 指定したクロックエッジが起こった時に起動される。
Handle trigger while busy
https://www.learnsystemc.com/pattern/trigger_when_busy
スレッドがBusy状態の時、来ているトリガーをlistenしていない。ありうるデザインパターンとして以下がある。
- 2つのスレッドを作る。トリガーハンドラーとタスクプロセッサ。
- トリガーハンドラーでのアクション
- トリガーを受信したとき、タスクプロセッサがBusyかどうか確認し、Busyでなければタスクをディスパッチする。
- そうでなければ、トリガーをバッファする。
- タスクプロセッサでのアクション
- トリガーハンドラによってディスパッチされたタスクの実行
- 完了後、トリガーバッファをチェックする
- 空ならreturn。そうでなければバッファからトリガーをpopし、タスクを実行
この方式はFIFOチャネルと似ている。しかし、オリジナルのトリガー型を修正する必要がない。
Handle trigger while busy, template class
https://www.learnsystemc.com/pattern/trigger_when_busy2
前チャプターと同様の機構をテンプレートクラスによって実現している。
Interrupt a thread while busy
https://www.learnsystemc.com/pattern/interrupt_when_busy
スレッドが割り込みを受けるには以下が必要
- スレッド実行中に割り込みをモニタ
- 割り込み処理をする
- abort もしくは
- pause してあとで resume
Interrupt a thread while busy, template class
https://www.learnsystemc.com/pattern/interrupt_when_busy2
前チャプターと同様の機構をテンプレートクラスによって実現している。