sub s(.i(i), .o(o));
endmodule
-module b(input i, oe, output o);
-(* init=1'b1 *) wire w;
-sub s(.i(i), .o(w));
-assign o = oe ? w : 1'bz;
+module b(input [1:0] i, oe, (* init=2'b1x *) output [1:0] o);
+wire [1:0] w;
+sub s1(.i(i[0]), .o(w[0]));
+sub s2(.i(i[1]), .o(w[1]));
+assign o = oe ? w : 2'bz;
endmodule
-module c(input i, oe, inout io);
-(* init=1'b1 *) wire w;
-sub s(.i(i), .o(w));
-assign io = oe ? w : 1'bz;
+module c(input i, oe, (* init=2'b00 *) inout io, output o1, o2);
+assign io = oe ? i : 1'bz;
+assign {o1,o2} = {io,io};
endmodule
EOT
opt_clean
tribuf
simplemap
iopadmap -bits -outpad obuf i:o -toutpad obuft oe:i:o -tinoutpad iobuf oe:o:i:io
-select -assert-count 1 a/c:s %co a/a:init=1'1 %i
-select -assert-count 1 a/a:init=1'1
-select -assert-count 1 b/c:s %co b/a:init=1'1 %i
-select -assert-count 1 b/a:init=1'1
-select -assert-count 1 c/c:s %co c/a:init=1'1 %i
-select -assert-count 1 c/a:init=1'1
+select -assert-count 1 a/c:s %co a/a:init=1'b1 %i
+select -assert-count 1 a/a:init
+select -assert-count 1 b/c:s* %co %a b/a:init=2'b1x %i
+select -assert-count 1 b/a:init
+select -assert-count 1 c/t:iobuf %co c/a:init=2'b00 %i
+select -assert-count 1 c/a:init