TpgNetwork

class TpgNetwork : public TpgBase

DRUID 用のネットワークを表すクラス

基本的には TpgNode のネットワーク(DAG)を表す.

参考

TpgFFR, TpgFFRList

ただし,フルスキャンの順序回路を扱うためにフリップフロップの 入出力をそれぞれ疑似出力,疑似入力としてあつかう.

  • 本当の入力と疑似入力をあわせて PPI(Pseudo Primary Input) と呼ぶ.

  • 本当の出力と疑似出力をあわせて PPO(Pseudo Primary Output) と呼ぶ.

フリップフロップのクロック系の回路は無視される. セット/リセット系の回路も無視される.

TpgNode は全て単純な型の論理ゲートを表す. もとのゲートが複合ゲートの場合には複数のノードに分解される. そこで,オリジナルのネットワーク中のゲートを「ゲート」,分解された TpgNode を「ノード」と呼んで区別することにする.

内容が設定されると同時に故障も定義される. 構造的に等価な故障の中で一つ代表故障を決めて代表故障のリストを作る. 代表故障はネットワーク全体,FFR,ノードごとにリスト化される.

TpgNetwork は値を変更するメソッド(メンバ関数)を持たない. そのため,初期化時にすべての情報を設定する必要がある. 現時点では BnModel から設定する方法と blif/iscas89 ファイルを 読み込む方法がある.

Public Functions

TpgNetwork() = default

空のコンストラクタ

不正な値となる.

inline TpgNetwork(std::shared_ptr<NetworkRep> &network)

@biref NetworkRep を指定したコンストラクタ

パラメータ:

network -- [in] 本体

~TpgNetwork() = default

デストラクタ

SizeType node_num() const

ノード数を得る.

TpgNode node(SizeType id) const

ノードを得る.

node = network.node(node.id())
の関係が成り立つ.

パラメータ:

id -- [in] ID番号 ( 0 <= id < node_num() )

TpgNodeList node_list() const

全ノードのリストを得る.

SizeType input_num() const

外部入力数を得る.

TpgNode input(SizeType pos) const

外部入力ノードを得る.

node = network.input(node.input_id())
の関係が成り立つ.

パラメータ:

pos -- [in] 位置番号 ( 0 <= pos < input_num() )

TpgNodeList input_list() const

外部入力ノードのリストを得る.

SizeType output_num() const

外部出力数を得る.

TpgNode output(SizeType pos) const

外部出力ノードを得る.

node = network.output(node.output_id())
の関係が成り立つ.

パラメータ:

pos -- [in] 位置番号 ( 0 <= pos < output_num() )

TpgNodeList output_list() const

外部出力ノードのリストを得る.

TpgNode output2(SizeType pos) const

TFIサイズの降順で整列した順番で外部出力ノードを取り出す.

node = network.output2(node.output_id2())
の関係が成り立つ.

パラメータ:

pos -- [in] 位置番号 ( 0 <= pos < output_num() )

SizeType ppi_num() const

スキャン方式の擬似外部入力数を得る.

= input_num() + dff_num()

TpgNode ppi(SizeType pos) const

スキャン方式の擬似外部入力を得る.

node = network.ppi(node.input_id())
の関係が成り立つ.

パラメータ:

pos -- [in] 位置番号 ( 0 <= pos < ppi_num() )

std::string ppi_name(SizeType input_id) const

PPI の名前を返す.

パラメータ:

input_id -- [in] 入力番号

TpgNodeList ppi_list() const

擬似外部入力のリストを得る.

SizeType ppo_num() const

スキャン方式の擬似外部出力数を得る.

= output_num() + dff_num()

TpgNode ppo(SizeType pos) const

スキャン方式の擬似外部出力を得る.

node = network.ppo(node.output_id())
の関係が成り立つ.

パラメータ:

pos -- [in] 位置番号 ( 0 <= pos < ppo_num() )

std::string ppo_name(SizeType output_id) const

PPO の名前を返す.

パラメータ:

output_id -- [in] 出力番号

TpgNodeList ppo_list() const

擬似外部出力のリストを得る.

SizeType mffc_num() const

MFFC 数を返す.

TpgMFFC mffc(SizeType mffc_id) const

MFFC を返す.

パラメータ:

mffc_id -- [in] MFFC番号 ( 0 <= mffc_id < mffc_num() )

TpgMFFC mffc(const TpgNode &node) const

node の属している MFFC を返す.

パラメータ:

node -- [in] 対象のノード

TpgMFFC mffc(const TpgFault &fault) const

fault の属している FFR を返す.

パラメータ:

fault -- [in] 対象の故障

TpgMFFCList mffc_list() const

MFFC のリストを得る.

SizeType ffr_num() const

FFR 数を返す.

TpgFFR ffr(SizeType pos) const

FFR を返す.

パラメータ:

pos -- [in] 位置番号 ( 0 <= pos < ffr_num() )

TpgFFR ffr(const TpgNode &node) const

node の属している FFR を返す.

パラメータ:

node -- [in] 対象のノード

TpgFFR ffr(const TpgFault &fault) const

fault の属している FFR を返す.

パラメータ:

fault -- [in] 対象の故障

TpgFFRList ffr_list() const

FFR のリストを得る.

SizeType dff_num() const

DFF数を得る.

TpgNode dff_input(SizeType dff_id) const

DFFの入力ノードを得る.

network.dff_input(dff_id).dff_id() == dff_id
の関係が成り立つ.

パラメータ:

dff_id -- [in] DFF番号 ( 0 <= dff_id < dff_num() )

TpgNode dff_output(SizeType dff_id) const

DFFの出力ノードを得る.

network.dff_output(dff_id).dff_id() == dff_id
の関係が成り立つ.

パラメータ:

dff_id -- [in] 位置番号 ( 0 <= dff_id < dff_num() )

TpgNodeList get_tfo_list(const TpgNode &root, const TpgNode &block = TpgNode{}) const

TFO のノードを求める.

パラメータ:
  • root -- [in] 起点となるノード

  • block -- [in] ブロックノード

TpgNodeList get_tfo_list(const TpgNode &root, std::function<void(const TpgNode&)> op) const

TFO のノードを求める.

パラメータ:
  • root -- [in] 起点となるノード

  • op -- [in] ノードに対するファンクタ

inline TpgNodeList get_tfo_list(const TpgNodeList &root_list, std::function<void(const TpgNode&)> op) const

TFO のノードを求める.

パラメータ:
  • root_list -- [in] 起点となるノードのリスト

  • op -- [in] ノードに対するファンクタ

TpgNodeList get_tfo_list(const TpgNodeList &root_list, const TpgNode &block, std::function<void(const TpgNode&)> op) const

TFO のノードを求める.

パラメータ:
  • root_list -- [in] 起点となるノードのリスト

  • block -- [in] ブロックノード

  • op -- [in] ノードに対するファンクタ

inline TpgNodeList get_tfi_list(const TpgNodeList &root_list) const

TFI のノードを求める.

パラメータ:

root_list -- [in] 起点となるノード

TpgNodeList get_tfi_list(const TpgNodeList &root_list, std::function<void(const TpgNode&)> op) const

TFI のノードを求める.

パラメータ:
  • root_list -- [in] 起点となるノード

  • op -- [in] ノードに対するファンクタ

void dfs(const TpgNodeList &root_list, std::function<void(const TpgNode&)> pre_func, std::function<void(const TpgNode&)> post_func) const

出力からの DFS を行う.

パラメータ:
  • root_list -- [in] 起点となるノード

  • pre_func -- [in] pre-order の処理関数

  • post_func -- [in] post-order の処理関数

inline void dfs_pre(const TpgNodeList &root_list, std::function<void(const TpgNode&)> pre_func) const

出力からの DFS を行う.

パラメータ:
  • root_list -- [in] 起点となるノード

  • pre_func -- [in] pre-order の処理関数

inline void dfs_post(const TpgNodeList &root_list, std::function<void(const TpgNode&)> post_func) const

出力からの DFS を行う.

パラメータ:
  • root_list -- [in] 起点となるノード

  • post_func -- [in] post-order の処理関数

SizeType gate_num() const

ゲート数を返す.

TpgGate gate(SizeType gid) const

ゲート情報を得る.

パラメータ:

gid -- [in] ゲート番号 ( 0 <= gid < gate_num() )

TpgGateList gate_list() const

ゲートのリストを返す.

FaultType fault_type() const

故障の種類を返す.

bool has_prev_state() const

1時刻前の状態を持つ時 true を返す.

TpgFaultList rep_fault_list() const

代表故障のリストを得る.

SizeType max_fault_id() const

故障番号の最大値を返す.

TpgFault fault(SizeType fault_id) const

故障を得る.

パラメータ:

fault_id -- [in] 故障番号 ( 0 <= fault_id < max_fault_id() )

void print(std::ostream &s) const

TpgNetwork の内容を出力する関数(デバッグ用)

パラメータ:

s -- [in] 出力先のストリーム

Public Static Functions

static TpgNetwork from_bn(const BnModel &src, FaultType fault_type)

BnModel から変換する.

パラメータ:
  • src -- [in] 設定元のネットワーク

  • fault_type -- [in] 故障の種類

static TpgNetwork read_blif(const std::string &filename, FaultType fault_type)

blif ファイルを読み込む.

エラーが起こったら std::invalid_argument 例外を送出する.

パラメータ:
  • filename -- [in] ファイル名

  • fault_type -- [in] 故障の種類

static TpgNetwork read_iscas89(const std::string &filename, FaultType fault_type)

iscas89 形式のファイルを読み込む.

エラーが起こったら std::invalid_argument 例外を送出する.

パラメータ:
  • filename -- [in] ファイル名

  • fault_type -- [in] 故障の種類

static TpgNetwork read_network(const std::string &filename, const std::string &format, FaultType fault_type)

ファイルを読み込む

パラメータ:
  • filename -- [in] ファイル名

  • format -- [in] ファイルの形式を表す文字列

  • fault_type -- [in] 故障の種類