1 | module w3_boot_io_mux ( |
---|
2 | inout iic_scl, |
---|
3 | inout iic_sda, |
---|
4 | |
---|
5 | output iic_scl_I_a, |
---|
6 | input iic_scl_O_a, |
---|
7 | input iic_scl_T_a, |
---|
8 | |
---|
9 | output iic_sda_I_a, |
---|
10 | input iic_sda_O_a, |
---|
11 | input iic_sda_T_a, |
---|
12 | |
---|
13 | output iic_scl_I_b, |
---|
14 | input iic_scl_O_b, |
---|
15 | input iic_scl_T_b, |
---|
16 | |
---|
17 | output iic_sda_I_b, |
---|
18 | input iic_sda_O_b, |
---|
19 | input iic_sda_T_b, |
---|
20 | |
---|
21 | input iic_sel_a, |
---|
22 | |
---|
23 | output uart_tx, |
---|
24 | |
---|
25 | input uart_tx_a, |
---|
26 | input uart_tx_b, |
---|
27 | |
---|
28 | input uart_sel_a |
---|
29 | ); |
---|
30 | |
---|
31 | parameter C_FAMILY = "virtex6"; |
---|
32 | |
---|
33 | wire iic_scl_I, iic_scl_O, iic_scl_T; |
---|
34 | wire iic_sda_I, iic_sda_O, iic_sda_T; |
---|
35 | |
---|
36 | //Hold unselected IIC IOB->logic signals high, matching idle level of actual IIC signals |
---|
37 | assign iic_scl_I_a = (iic_sel_a == 1'b1) ? iic_scl_I : 1'b1; |
---|
38 | assign iic_scl_I_b = (iic_sel_a == 1'b1) ? 1'b1 : iic_scl_I; |
---|
39 | |
---|
40 | assign iic_sda_I_a = (iic_sel_a == 1'b1) ? iic_sda_I : 1'b1; |
---|
41 | assign iic_sda_I_b = (iic_sel_a == 1'b1) ? 1'b1 : iic_sda_I; |
---|
42 | |
---|
43 | assign iic_scl_T = (iic_sel_a == 1'b1) ? iic_scl_T_a : iic_scl_T_b; |
---|
44 | assign iic_scl_O = (iic_sel_a == 1'b1) ? iic_scl_O_a : iic_scl_O_b; |
---|
45 | |
---|
46 | assign iic_sda_T = (iic_sel_a == 1'b1) ? iic_sda_T_a : iic_sda_T_b; |
---|
47 | assign iic_sda_O = (iic_sel_a == 1'b1) ? iic_sda_O_a : iic_sda_O_b; |
---|
48 | |
---|
49 | IOBUF IOBUF_scl ( |
---|
50 | .IO(iic_scl), //Connected to actual FPGA pin |
---|
51 | .I(iic_scl_O), //Logic-> Pad, input to OBUFT |
---|
52 | .O(iic_scl_I), //Pad-> Logic, output of IBUF |
---|
53 | .T(iic_scl_T) |
---|
54 | ); |
---|
55 | |
---|
56 | IOBUF IOBUF_sda ( |
---|
57 | .IO(iic_sda), //Connected to actual FPGA pin |
---|
58 | .I(iic_sda_O), //Logic-> Pad, input to OBUFT |
---|
59 | .O(iic_sda_I), //Pad-> Logic, output of IBUF |
---|
60 | .T(iic_sda_T) |
---|
61 | ); |
---|
62 | |
---|
63 | assign uart_tx = (uart_sel_a == 1'b1) ? uart_tx_a : uart_tx_b; |
---|
64 | |
---|
65 | endmodule |
---|