added upstream URL http://www.kinetic.co.uk/Trilby.php
[trilby-hat-fpga] / i2c_bridge.v
1 `default_nettype none
2 module i2c_bridge
3 (
4     input  wire       clk,    // any
5     input  wire       clk_en, // 1-clk pulse, repeats 1.5-6 MHz
6     input  wire [1:0] i,      // inputs
7     output wire [1:0] t       // tristate 0->0 1->Z
8 );
9   reg [1:0] state, next_state;
10
11   always @(posedge clk)
12     case(state)
13       2'd0: begin
14         if(i[0])
15           next_state <= 3;
16         else
17           next_state <= 0;
18       end
19
20       2'd1: begin
21         if(i[1])
22           next_state <= 3;
23         else
24           next_state <= 1;
25       end
26
27       default: begin
28         if(i[0]==0 && i[1]==1)
29           next_state <= 0;
30         else if(i[1]==0 && i[0]==1)
31           next_state <= 1;
32         else
33           next_state <= 3;
34       end
35     endcase
36
37   always @(posedge clk)
38     if(clk_en)
39       state <= next_state;
40
41   assign t[1] = state == 2'd0 ? 0:1;
42   assign t[0] = state == 2'd1 ? 0:1;
43
44 endmodule