まずはYosysに簡単なPassを作ってみる。Pass
に対してモジュールの名前をリストアップするPassを作ってみよう。
デザインに登録されているModuleの名前を取得する。
yosys/passes/tests/mypass.cc
void execute(std::vector<std::string> args, RTLIL::Design* design) override { log ("Hello!\n"); auto modules = design->modules(); for (auto iter = modules.begin(); iter != modules.end(); iter++) { log("Module Name = %s\n", (*iter)->name.c_str()); } }
テストしてみる。以下のデザインを読み込ませる。
module adder ( input logic [31:0] in0, input logic [31:0] in1, output logic [31: 0] out ); assign out = in0 + in1; endmodule // adder module adder2 ( input logic [31:0] in0, input logic [31:0] in1, input logic [31:0] in2, output logic [31: 0] out ); assign out = in0 + in1 + in2; endmodule // adder2
結果は以下のようになった。それぞれのモジュールに対して名前を取得できた。
Successfully finished Verilog frontend. Hello! Module Name = $abstract\adder2 Module Name = $abstract\adder