| module tristate (en, i, io, o); | |
| input en; | |
| input [3:0] i; | |
| inout [3:0] io; | |
| output [1:0] o; | |
| wire [3:0] io; | |
| `ifndef BUG | |
| assign io[1:0] = (en)? i[1:0] : 1'bZ; | |
| assign io[3:2] = (i[1:0])? en : 1'bZ; | |
| assign o = io[2:1]; | |
| `else | |
| assign io[1:0] = (en)? ~i[1:0] : 1'bZ; | |
| assign io[3:2] = (i[1:0])? ~en : 1'bZ; | |
| assign o = ~io[2:1]; | |
| `endif | |
| endmodule | |
| module top ( | |
| input en, | |
| input [3:0] a, | |
| inout [3:0] b, | |
| output [1:0] c | |
| ); | |
| tristate u_tri ( | |
| .en (en ), | |
| .i (a ), | |
| .io (b ), | |
| .o (c ) | |
| ); | |
| endmodule |