TpgNetwork¶
-
class TpgNetwork : public TpgBase¶
DRUID 用のネットワークを表すクラス
基本的には TpgNode のネットワーク(DAG)を表す.
参考
参考
参考
参考
ただし,フルスキャンの順序回路を扱うためにフリップフロップの 入出力をそれぞれ疑似出力,疑似入力としてあつかう.
本当の入力と疑似入力をあわせて PPI(Pseudo Primary Input) と呼ぶ.
本当の出力と疑似出力をあわせて PPO(Pseudo Primary Output) と呼ぶ.
フリップフロップのクロック系の回路は無視される. セット/リセット系の回路も無視される.
TpgNode は全て単純な型の論理ゲートを表す. もとのゲートが複合ゲートの場合には複数のノードに分解される. そこで,オリジナルのネットワーク中のゲートを「ゲート」,分解された TpgNode を「ノード」と呼んで区別することにする.
内容が設定されると同時に故障も定義される. 構造的に等価な故障の中で一つ代表故障を決めて代表故障のリストを作る. 代表故障はネットワーク全体,FFR,ノードごとにリスト化される.
TpgNetwork は値を変更するメソッド(メンバ関数)を持たない. そのため,初期化時にすべての情報を設定する必要がある. 現時点では BnModel から設定する方法と blif/iscas89 ファイルを 読み込む方法がある.
Public Functions
-
TpgNetwork() = default¶
空のコンストラクタ
不正な値となる.
@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¶
スキャン方式の擬似外部出力数を得る.
-
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() )
-
TpgMFFCList mffc_list() const¶
MFFC のリストを得る.
-
SizeType ffr_num() const¶
FFR 数を返す.
-
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¶
ゲートのリストを返す.
-
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] 故障の種類