write_xaiger: add support and test for (* keep *) on wires
[yosys.git] / tests / techmap / iopadmap.ys
1 read_verilog << EOT
2 module ibuf ((* iopad_external_pin *) input i, output o); endmodule
3 module obuf (input i, (* iopad_external_pin *) output o); endmodule
4 module obuft (input i, input oe, (* iopad_external_pin *) output o); endmodule
5 module iobuf (input i, input oe, output o, (* iopad_external_pin *) inout io); endmodule
6
7 module a(input i, output o);
8 assign o = i;
9 endmodule
10
11 module b(input i, output o);
12 assign o = i;
13 ibuf b (.i(i), .o(o));
14 endmodule
15
16 module c(input i, output o);
17 obuf b (.i(i), .o(o));
18 endmodule
19
20 module d(input i, oe, output o, o2, o3);
21 assign o = oe ? i : 1'bz;
22 assign o2 = o;
23 assign o3 = ~o;
24 endmodule
25
26 module e(input i, oe, inout io, output o2, o3);
27 assign io = oe ? i : 1'bz;
28 assign o2 = io;
29 assign o3 = ~io;
30 endmodule
31
32 module f(output o, o2);
33 assign o = 1'bz;
34 endmodule
35
36 module g(inout io, output o);
37 assign o = io;
38 endmodule
39
40 module h(inout io, output o, input i);
41 assign io = i;
42 assign o = io;
43 endmodule
44
45 EOT
46
47 opt_clean
48 tribuf
49 simplemap
50 iopadmap -bits -inpad ibuf o:i -outpad obuf i:o -toutpad obuft oe:i:o -tinoutpad iobuf oe:o:i:io
51 opt_clean
52
53 select -assert-count 1 a/t:ibuf
54 select -assert-count 1 a/t:obuf
55 select -set ib w:i %a %co a/t:ibuf %i
56 select -set ob w:o %a %ci a/t:obuf %i
57 select -assert-count 1 @ib
58 select -assert-count 1 @ob
59 select -assert-count 1 @ib %co %co @ob %i
60
61 select -assert-count 1 b/t:ibuf
62 select -assert-count 1 b/t:obuf
63 select -set ib w:i %a %co b/t:ibuf %i
64 select -set ob w:o %a %ci b/t:obuf %i
65 select -assert-count 1 @ib
66 select -assert-count 1 @ob
67 select -assert-count 1 @ib %co %co @ob %i
68
69 select -assert-count 1 c/t:ibuf
70 select -assert-count 1 c/t:obuf
71 select -set ib w:i %a %co c/t:ibuf %i
72 select -set ob w:o %a %ci c/t:obuf %i
73 select -assert-count 1 @ib
74 select -assert-count 1 @ob
75 select -assert-count 1 @ib %co %co @ob %i
76
77 select -assert-count 2 d/t:ibuf
78 select -assert-count 2 d/t:obuf
79 select -assert-count 1 d/t:obuft
80 select -set ib w:i %a %co d/t:ibuf %i
81 select -set oeb w:oe %a %co d/t:ibuf %i
82 select -set ob w:o %a %ci d/t:obuft %i
83 select -set o2b w:o2 %a %ci d/t:obuf %i
84 select -set o3b w:o3 %a %ci d/t:obuf %i
85 select -assert-count 1 @ib
86 select -assert-count 1 @oeb
87 select -assert-count 1 @ob
88 select -assert-count 1 @o2b
89 select -assert-count 1 @o3b
90 select -assert-count 1 @ib %co %co @ob %i
91 select -assert-count 1 @oeb %co %co @ob %i
92 select -assert-count 1 @ib %co %co @o2b %i
93 select -assert-count 1 @ib %co %co t:$_NOT_ %i
94 select -assert-count 1 @o3b %ci %ci t:$_NOT_ %i
95
96 select -assert-count 2 e/t:ibuf
97 select -assert-count 2 e/t:obuf
98 select -assert-count 1 e/t:iobuf
99 select -set ib w:i %a %co e/t:ibuf %i
100 select -set oeb w:oe %a %co e/t:ibuf %i
101 select -set iob w:io %a %ci e/t:iobuf %i
102 select -set o2b w:o2 %a %ci e/t:obuf %i
103 select -set o3b w:o3 %a %ci e/t:obuf %i
104 select -assert-count 1 @ib
105 select -assert-count 1 @oeb
106 select -assert-count 1 @iob
107 select -assert-count 1 @o2b
108 select -assert-count 1 @o3b
109 select -assert-count 1 @ib %co %co @iob %i
110 select -assert-count 1 @oeb %co %co @iob %i
111 select -assert-count 1 @iob %co %co @o2b %i
112 select -assert-count 1 @iob %co %co t:$_NOT_ %i
113 select -assert-count 1 @o3b %ci %ci t:$_NOT_ %i
114
115 select -assert-count 2 f/t:obuft
116
117 select -assert-count 1 g/t:obuf
118 select -assert-count 1 g/t:iobuf
119
120 select -assert-count 1 h/t:ibuf
121 select -assert-count 1 h/t:iobuf
122 select -assert-count 1 h/t:obuf