複数のクラスからトランザクションを受け取るときの問題
uvm_analysis_port.connect() により接続された uvm_analysis_port_imp へ write() が発行されると,uvm_analysis_imp インスタンスを持つクラスの write() が呼び出される仕組みになっている.
ということは,複数の uvm_analysis_imp を一つのクラスで持っていたとしたらどうなるのだろうか.
試してみたところ,どの uvm_analysis_imp に対して通信しても,同じ write() が呼び出された.どちらに向けてから発行された write() なのかを区別できないのだ.
#解決策
google で 「 UVM multiple analysis ports 」などと検索すると解決策が見つかった.
このサイトによれば,imp 側を持つクラスの宣言の前に `uvm_analysis_imp_decl(_2) などと記述すると,新しいクラス uvm_analysis_imp_2 が使えるようになるので,これをメンバに持たせればよい.uvm_analysis_port 側では特に意識せずに write() すれば,uvm_analysis_imp_2 を持つクラスの write_2 が呼び出されるようになる.