pattern ql_dsp_macc state add_ba state mux_ab state mul_nusers state add_nusers state mux_nusers state ff_d_nusers state ff_q_nusers match mul select mul->type.in($mul) select nusers(port(mul, \Y)) <= 3 set mul_nusers nusers(port(mul, \Y)) endmatch match add select add->type.in($add, $sub) choice AB {\A, \B} define BA (AB == \A ? \B : \A) index port(add, AB) === port(mul, \Y) select nusers(port(add, \Y)) <= 3 set add_nusers nusers(port(add, \Y)) set add_ba BA endmatch match mux select mux->type.in($mux) choice AB {\A, \B} define BA (AB == \A ? \B : \A) index port(mux, AB) === port(mul, \Y) index port(mux, BA) === port(add, \Y) select nusers(port(mux, \Y)) <= 3 set mux_nusers nusers(port(mux, \Y)) set mux_ab AB optional endmatch match ff select ff->type.in($dff, $adff, $dffe, $adffe) index port(ff, \D) === (mux == nullptr ? port(add, \Y) : port(mux, \Y)) index port(ff, \Q) === port(add, add_ba) set ff_d_nusers nusers(port(ff, \D)) set ff_q_nusers nusers(port(ff, \Q)) endmatch code accept; endcode