top.v 650 Bytes
Newer Older
1 2 3 4 5
module tristate (en, i, io, o);
    input en;
    input i;
    inout [1:0] io;    
    output [1:0] o;
6 7 8 9

    reg [1:0] io_buf;
    assign io = io_buf;

10
`ifndef BUG 
11
    always @(en or i)
12
		io_buf[0] <= (en)? i : 1'bZ;
13 14
		
    always @(en or i)
15
		io_buf[1] <= (i)? en : 1'bZ;
16 17
		
    assign o = (en)? io : 2'bZZ;
18 19
`else
	always @(en or i)
20
		io_buf[0] <= (en)? ~i : 1'bZ;
21 22
		
    always @(en or i)
23
		io_buf[1] <= (i)? ~en : 1'bZ;
24 25 26
		
    assign o = (en)? ~io : 2'bZZ;
`endif
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
endmodule


module top (
input en,
input a,
inout [1:0] b,
output [1:0] c
);

tristate u_tri (
        .en (en ),
        .i (a ),
        .io (b ),
        .o (c )
    );

endmodule