| // originally created by Marcus van Ierssel |
| // modified by Ahmad Darabiha, Feb. 2002 |
| // this circuit receives the rgbvideo signal |
| // from video input and send it to chip #2 |
| // for buffring and processing. |
| module sv_chip3_hierarchy_no_mem (tm3_clk_v0, tm3_clk_v2, tm3_vidin_llc, tm3_vidin_vs, tm3_vidin_href, tm3_vidin_cref, tm3_vidin_rts0, tm3_vidin_vpo, tm3_vidin_sda, tm3_vidin_scl, vidin_new_data, vidin_rgb_reg, vidin_addr_reg); |
| |
| input tm3_clk_v0; |
| input tm3_clk_v2; |
| input tm3_vidin_llc; |
| input tm3_vidin_vs; |
| input tm3_vidin_href; |
| input tm3_vidin_cref; |
| input tm3_vidin_rts0; |
| input[15:0] tm3_vidin_vpo; |
| output tm3_vidin_sda; |
| wire tm3_vidin_sda; |
| reg tm3_vidin_sda_xhdl0; |
| output tm3_vidin_scl; |
| reg tm3_vidin_scl; |
| output vidin_new_data; |
| reg vidin_new_data; |
| output[7:0] vidin_rgb_reg; |
| reg[7:0] vidin_rgb_reg; |
| output[18:0] vidin_addr_reg; |
| reg[18:0] vidin_addr_reg; |
| |
| reg temp_reg1; |
| reg temp_reg2; |
| reg[9:0] horiz; |
| reg[7:0] vert; |
| reg creg1; |
| reg creg2; |
| reg creg3; |
| reg[18:0] vidin_addr_reg1; |
| reg[23:0] vidin_rgb_reg1; |
| reg[23:0] vidin_rgb_reg2; |
| parameter[4:0] reg_prog1 = 5'b00001; |
| parameter[4:0] reg_prog2 = 5'b00010; |
| parameter[4:0] reg_prog3 = 5'b00011; |
| parameter[4:0] reg_prog4 = 5'b00100; |
| parameter[4:0] reg_prog5 = 5'b00101; |
| parameter[4:0] reg_prog6 = 5'b00110; |
| parameter[4:0] reg_prog7 = 5'b00111; |
| parameter[4:0] reg_prog8 = 5'b01000; |
| parameter[4:0] reg_prog9 = 5'b01001; |
| parameter[4:0] reg_prog10 = 5'b01010; |
| parameter[4:0] reg_prog11 = 5'b01011; |
| parameter[4:0] reg_prog12 = 5'b01100; |
| parameter[4:0] reg_prog13 = 5'b01101; |
| parameter[4:0] reg_prog14 = 5'b01110; |
| parameter[4:0] reg_prog15 = 5'b01111; |
| parameter[4:0] reg_prog16 = 5'b10000; |
| parameter[4:0] reg_prog17 = 5'b10001; |
| parameter[4:0] reg_prog18 = 5'b10010; |
| parameter[4:0] reg_prog19 = 5'b10011; |
| parameter[4:0] reg_prog20 = 5'b10100; |
| parameter[4:0] reg_prog21 = 5'b10101; |
| parameter[4:0] reg_prog22 = 5'b10110; |
| parameter[4:0] reg_prog23 = 5'b10111; |
| parameter[4:0] reg_prog24 = 5'b11000; |
| parameter[4:0] reg_prog25 = 5'b11001; |
| parameter[4:0] reg_prog26 = 5'b11010; |
| parameter[4:0] reg_prog_end = 5'b11011; |
| reg rst; |
| reg rst_done; |
| reg[7:0] iicaddr; |
| reg[7:0] iicdata; |
| // wire vidin_llc; |
| // wire vidin_llc_int; |
| reg[6:0] iic_state; |
| reg iic_stop; |
| reg iic_start; |
| reg[4:0] reg_prog_state; |
| reg[4:0] reg_prog_nextstate; |
| |
| assign tm3_vidin_sda = tm3_vidin_sda_xhdl0; |
| |
| // ibuf ibuf_inst (tm3_vidin_llc, vidin_llc_int); |
| // bufg bufg_inst (vidin_llc_int, vidin_llc); |
| |
| // PAJ double clock is trouble...always @(vidin_llc) |
| always @(posedge tm3_clk_v0) |
| begin |
| if (tm3_vidin_href == 1'b0) |
| begin |
| horiz <= 10'b0000000000 ; |
| end |
| else |
| begin |
| if (tm3_vidin_cref == 1'b0) |
| begin |
| horiz <= horiz + 1 ; |
| end |
| end |
| if (tm3_vidin_vs == 1'b1) |
| begin |
| vert <= 8'b00000000 ; |
| end |
| else |
| begin |
| if ((tm3_vidin_href == 1'b0) & (horiz != 10'b0000000000)) |
| begin |
| vert <= vert + 1 ; |
| end |
| end |
| if (tm3_vidin_cref == 1'b1) |
| begin |
| vidin_rgb_reg1[23:19] <= tm3_vidin_vpo[15:11] ; |
| vidin_rgb_reg1[15:13] <= tm3_vidin_vpo[10:8] ; |
| vidin_rgb_reg1[18:16] <= tm3_vidin_vpo[7:5] ; |
| vidin_rgb_reg1[9:8] <= tm3_vidin_vpo[4:3] ; |
| vidin_rgb_reg1[2:0] <= tm3_vidin_vpo[2:0] ; |
| vidin_rgb_reg2 <= vidin_rgb_reg1 ; |
| end |
| else |
| begin |
| vidin_rgb_reg1[12:10] <= tm3_vidin_vpo[7:5] ; |
| vidin_rgb_reg1[7:3] <= tm3_vidin_vpo[4:0] ; |
| vidin_addr_reg1 <= {vert, tm3_vidin_rts0, horiz} ; |
| end |
| end |
| |
| always @(posedge tm3_clk_v0) |
| begin |
| creg1 <= tm3_vidin_cref ; |
| creg2 <= creg1 ; |
| creg3 <= creg2 ; |
| if ((creg2 == 1'b0) & (creg3 == 1'b1) & ((vidin_addr_reg1[10]) == 1'b0) & ((vidin_addr_reg1[0]) == 1'b0)) |
| begin |
| vidin_new_data <= 1'b1 ; |
| vidin_rgb_reg <= vidin_rgb_reg2[7:0] ; |
| vidin_addr_reg <= {({2'b00, vidin_addr_reg1[18:11]}), vidin_addr_reg1[9:1]} ; |
| end |
| else |
| begin |
| vidin_new_data <= 1'b0 ; |
| end |
| end |
| |
| always @(posedge tm3_clk_v2) |
| begin |
| // A: Worked around scope issue by moving iic_stop into every case. |
| case (iic_state) |
| 7'b0000000 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= 1'b0 ; |
| tm3_vidin_scl <= 1'b1 ; |
| end |
| 7'b0000001 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= 1'b1 ; |
| tm3_vidin_scl <= 1'b1 ; |
| end |
| 7'b0000010 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= 1'b0 ; |
| tm3_vidin_scl <= 1'b1 ; |
| end |
| 7'b0000011 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= 1'b0 ; |
| tm3_vidin_scl <= 1'b0 ; |
| end |
| 7'b0000100 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= 1'b0 ; |
| tm3_vidin_scl <= 1'b1 ; |
| end |
| 7'b0000101 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= 1'b0 ; |
| tm3_vidin_scl <= 1'b0 ; |
| end |
| 7'b0000110 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= 1'b1 ; |
| tm3_vidin_scl <= 1'b0 ; |
| end |
| 7'b0000111 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= 1'b1 ; |
| tm3_vidin_scl <= 1'b1 ; |
| end |
| 7'b0001000 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= 1'b1 ; |
| tm3_vidin_scl <= 1'b0 ; |
| end |
| 7'b0001001 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= 1'b0 ; |
| tm3_vidin_scl <= 1'b0 ; |
| end |
| 7'b0001010 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= 1'b0 ; |
| tm3_vidin_scl <= 1'b1 ; |
| end |
| 7'b0001011 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= 1'b0 ; |
| tm3_vidin_scl <= 1'b0 ; |
| end |
| 7'b0001100 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= 1'b0 ; |
| tm3_vidin_scl <= 1'b1 ; |
| end |
| 7'b0001101 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= 1'b0 ; |
| tm3_vidin_scl <= 1'b0 ; |
| end |
| 7'b0001110 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= 1'b1 ; |
| tm3_vidin_scl <= 1'b0 ; |
| end |
| 7'b0001111 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= 1'b1 ; |
| tm3_vidin_scl <= 1'b1 ; |
| end |
| 7'b0010000 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= 1'b1 ; |
| tm3_vidin_scl <= 1'b0 ; |
| end |
| 7'b0010001 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= 1'b0 ; |
| tm3_vidin_scl <= 1'b0 ; |
| end |
| 7'b0010010 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= 1'b0 ; |
| tm3_vidin_scl <= 1'b1 ; |
| end |
| 7'b0010011 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= 1'b0 ; |
| tm3_vidin_scl <= 1'b0 ; |
| end |
| 7'b0010101 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= 1'b0 ; |
| tm3_vidin_scl <= 1'b0 ; |
| end |
| 7'b0010110 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= 1'b0 ; |
| tm3_vidin_scl <= 1'b1 ; |
| end |
| 7'b0010111 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= 1'b0 ; |
| tm3_vidin_scl <= 1'b0 ; |
| end |
| 7'b0011000 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= 1'b0 ; |
| tm3_vidin_scl <= 1'b1 ; |
| end |
| 7'b0011001 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= 1'b0 ; |
| tm3_vidin_scl <= 1'b0 ; |
| end |
| 7'b0011010 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= iicaddr[7] ; |
| tm3_vidin_scl <= 1'b0 ; |
| end |
| 7'b0011011 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= iicaddr[7] ; |
| tm3_vidin_scl <= 1'b1 ; |
| end |
| 7'b0011100 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= iicaddr[7] ; |
| tm3_vidin_scl <= 1'b0 ; |
| end |
| 7'b0011101 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= iicaddr[6] ; |
| tm3_vidin_scl <= 1'b0 ; |
| end |
| 7'b0011110 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= iicaddr[6] ; |
| tm3_vidin_scl <= 1'b1 ; |
| end |
| 7'b0011111 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= iicaddr[6] ; |
| tm3_vidin_scl <= 1'b0 ; |
| end |
| 7'b0100000 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= iicaddr[5] ; |
| tm3_vidin_scl <= 1'b0 ; |
| end |
| 7'b0100001 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= iicaddr[5] ; |
| tm3_vidin_scl <= 1'b1 ; |
| end |
| 7'b0100010 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= iicaddr[5] ; |
| tm3_vidin_scl <= 1'b0 ; |
| end |
| 7'b0100011 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= iicaddr[4] ; |
| tm3_vidin_scl <= 1'b0 ; |
| end |
| 7'b0100100 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= iicaddr[4] ; |
| tm3_vidin_scl <= 1'b1 ; |
| end |
| 7'b0100101 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= iicaddr[4] ; |
| tm3_vidin_scl <= 1'b0 ; |
| end |
| 7'b0100110 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= iicaddr[3] ; |
| tm3_vidin_scl <= 1'b0 ; |
| end |
| 7'b0100111 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= iicaddr[3] ; |
| tm3_vidin_scl <= 1'b1 ; |
| end |
| 7'b0101000 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= iicaddr[3] ; |
| tm3_vidin_scl <= 1'b0 ; |
| end |
| 7'b0101001 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= iicaddr[2] ; |
| tm3_vidin_scl <= 1'b0 ; |
| end |
| 7'b0101010 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= iicaddr[2] ; |
| tm3_vidin_scl <= 1'b1 ; |
| end |
| 7'b0101011 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= iicaddr[2] ; |
| tm3_vidin_scl <= 1'b0 ; |
| end |
| 7'b0101100 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= iicaddr[1] ; |
| tm3_vidin_scl <= 1'b0 ; |
| end |
| 7'b0101101 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= iicaddr[1] ; |
| tm3_vidin_scl <= 1'b1 ; |
| end |
| 7'b0101110 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= iicaddr[1] ; |
| tm3_vidin_scl <= 1'b0 ; |
| end |
| 7'b0101111 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= iicaddr[0] ; |
| tm3_vidin_scl <= 1'b0 ; |
| end |
| 7'b0110000 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= iicaddr[0] ; |
| tm3_vidin_scl <= 1'b1 ; |
| end |
| 7'b0110001 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= iicaddr[0] ; |
| tm3_vidin_scl <= 1'b0 ; |
| end |
| 7'b0110010 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= 1'b0 ; |
| tm3_vidin_scl <= 1'b0 ; |
| end |
| 7'b0110011 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= 1'b0 ; |
| tm3_vidin_scl <= 1'b1 ; |
| end |
| 7'b0110100 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= 1'b0 ; |
| tm3_vidin_scl <= 1'b0 ; |
| end |
| 7'b0110101 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= iicdata[7] ; |
| tm3_vidin_scl <= 1'b0 ; |
| end |
| 7'b0110110 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= iicdata[7] ; |
| tm3_vidin_scl <= 1'b1 ; |
| end |
| 7'b0110111 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= iicdata[7] ; |
| tm3_vidin_scl <= 1'b0 ; |
| end |
| 7'b0111000 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= iicdata[6] ; |
| tm3_vidin_scl <= 1'b0 ; |
| end |
| 7'b0111001 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= iicdata[6] ; |
| tm3_vidin_scl <= 1'b1 ; |
| end |
| 7'b0111010 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= iicdata[6] ; |
| tm3_vidin_scl <= 1'b0 ; |
| end |
| 7'b0111011 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= iicdata[5] ; |
| tm3_vidin_scl <= 1'b0 ; |
| end |
| 7'b0111100 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= iicdata[5] ; |
| tm3_vidin_scl <= 1'b1 ; |
| end |
| 7'b0111101 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= iicdata[5] ; |
| tm3_vidin_scl <= 1'b0 ; |
| end |
| 7'b0111110 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= iicdata[4] ; |
| tm3_vidin_scl <= 1'b0 ; |
| end |
| 7'b0111111 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= iicdata[4] ; |
| tm3_vidin_scl <= 1'b1 ; |
| end |
| 7'b1000000 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= iicdata[4] ; |
| tm3_vidin_scl <= 1'b0 ; |
| end |
| 7'b1000001 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= iicdata[3] ; |
| tm3_vidin_scl <= 1'b0 ; |
| end |
| 7'b1000010 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= iicdata[3] ; |
| tm3_vidin_scl <= 1'b1 ; |
| end |
| 7'b1000011 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= iicdata[3] ; |
| tm3_vidin_scl <= 1'b0 ; |
| end |
| 7'b1000100 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= iicdata[2] ; |
| tm3_vidin_scl <= 1'b0 ; |
| end |
| 7'b1000101 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= iicdata[2] ; |
| tm3_vidin_scl <= 1'b1 ; |
| end |
| 7'b1000110 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= iicdata[2] ; |
| tm3_vidin_scl <= 1'b0 ; |
| end |
| 7'b1000111 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= iicdata[1] ; |
| tm3_vidin_scl <= 1'b0 ; |
| end |
| 7'b1001000 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= iicdata[1] ; |
| tm3_vidin_scl <= 1'b1 ; |
| end |
| 7'b1001001 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= iicdata[1] ; |
| tm3_vidin_scl <= 1'b0 ; |
| end |
| 7'b1001010 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= iicdata[0] ; |
| tm3_vidin_scl <= 1'b0 ; |
| end |
| 7'b1001011 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= iicdata[0] ; |
| tm3_vidin_scl <= 1'b1 ; |
| end |
| 7'b1001100 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= iicdata[0] ; |
| tm3_vidin_scl <= 1'b0 ; |
| end |
| 7'b1001101 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= 1'b0 ; |
| tm3_vidin_scl <= 1'b0 ; |
| end |
| 7'b1001110 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= 1'b0 ; |
| tm3_vidin_scl <= 1'b1 ; |
| end |
| 7'b1001111 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= 1'b0 ; |
| tm3_vidin_scl <= 1'b0 ; |
| end |
| 7'b1010000 : |
| begin |
| iic_stop <= 1'b0 ; |
| tm3_vidin_sda_xhdl0 <= 1'b0 ; |
| tm3_vidin_scl <= 1'b1 ; |
| end |
| 7'b1010001 : |
| begin |
| iic_stop <= 1'b1 ; |
| tm3_vidin_sda_xhdl0 <= 1'b1 ; |
| tm3_vidin_scl <= 1'b1 ; |
| end |
| default : |
| begin |
| iic_stop <= 1'b1 ; |
| tm3_vidin_sda_xhdl0 <= 1'b1 ; |
| tm3_vidin_scl <= 1'b1 ; |
| end |
| endcase |
| end |
| |
| always @(reg_prog_state or iic_stop) |
| begin |
| case (reg_prog_state) |
| reg_prog1 : |
| begin |
| rst_done = 1'b1 ; |
| iicaddr = 8'b00000000 ; |
| iicdata = 8'b00000000 ; |
| iic_start = 1'b1 ; |
| if (iic_stop == 1'b0) |
| begin |
| reg_prog_nextstate = reg_prog2 ; |
| end |
| else |
| begin |
| reg_prog_nextstate = reg_prog1 ; |
| end |
| |
| end |
| reg_prog2 : |
| begin |
| iicaddr = 8'b00000010 ; |
| iicdata = {5'b11000, 3'b000} ; |
| iic_start = 1'b0 ; |
| if (iic_stop == 1'b1) |
| begin |
| reg_prog_nextstate = reg_prog3 ; |
| end |
| else |
| begin |
| reg_prog_nextstate = reg_prog2 ; |
| end |
| end |
| reg_prog3 : |
| begin |
| iicaddr = 8'b00000000 ; |
| iicdata = 8'b00000000 ; |
| iic_start = 1'b1 ; |
| if (iic_stop == 1'b0) |
| begin |
| reg_prog_nextstate = reg_prog4 ; |
| end |
| else |
| begin |
| reg_prog_nextstate = reg_prog3 ; |
| end |
| end |
| reg_prog4 : |
| begin |
| iicaddr = 8'b00000011 ; |
| iicdata = 8'b00100011 ; |
| iic_start = 1'b0 ; |
| if (iic_stop == 1'b1) |
| begin |
| reg_prog_nextstate = reg_prog5 ; |
| end |
| else |
| begin |
| reg_prog_nextstate = reg_prog4 ; |
| end |
| end |
| reg_prog5 : |
| begin |
| iicaddr = 8'b00000000 ; |
| iicdata = 8'b00000000 ; |
| iic_start = 1'b1 ; |
| if (iic_stop == 1'b0) |
| begin |
| reg_prog_nextstate = reg_prog6 ; |
| end |
| else |
| begin |
| reg_prog_nextstate = reg_prog5 ; |
| end |
| end |
| reg_prog6 : |
| begin |
| iicaddr = 8'b00000110 ; |
| iicdata = 8'b11101011 ; |
| iic_start = 1'b0 ; |
| if (iic_stop == 1'b1) |
| begin |
| reg_prog_nextstate = reg_prog7 ; |
| end |
| else |
| begin |
| |
| reg_prog_nextstate = reg_prog6 ; |
| end |
| end |
| reg_prog7 : |
| begin |
| iicaddr = 8'b00000000 ; |
| iicdata = 8'b00000000 ; |
| iic_start = 1'b1 ; |
| if (iic_stop == 1'b0) |
| begin |
| reg_prog_nextstate = reg_prog8 ; |
| end |
| else |
| begin |
| reg_prog_nextstate = reg_prog7 ; |
| end |
| end |
| reg_prog8 : |
| begin |
| iicaddr = 8'b00000111 ; |
| iicdata = 8'b11100000 ; |
| iic_start = 1'b0 ; |
| if (iic_stop == 1'b1) |
| begin |
| reg_prog_nextstate = reg_prog9 ; |
| end |
| else |
| begin |
| reg_prog_nextstate = reg_prog8 ; |
| end |
| end |
| reg_prog9 : |
| begin |
| iicaddr = 8'b00000000 ; |
| iicdata = 8'b00000000 ; |
| iic_start = 1'b1 ; |
| if (iic_stop == 1'b0) |
| begin |
| reg_prog_nextstate = reg_prog10 ; |
| end |
| else |
| begin |
| reg_prog_nextstate = reg_prog9 ; |
| end |
| end |
| reg_prog10 : |
| begin |
| iicaddr = 8'b00001000 ; |
| iicdata = 8'b10000000 ; |
| iic_start = 1'b0 ; |
| if (iic_stop == 1'b1) |
| begin |
| reg_prog_nextstate = reg_prog11 ; |
| end |
| else |
| begin |
| reg_prog_nextstate = reg_prog10 ; |
| end |
| end |
| reg_prog11 : |
| begin |
| iicaddr = 8'b00000000 ; |
| iicdata = 8'b00000000 ; |
| iic_start = 1'b1 ; |
| if (iic_stop == 1'b0) |
| begin |
| reg_prog_nextstate = reg_prog12 ; |
| end |
| |
| else |
| begin |
| reg_prog_nextstate = reg_prog11 ; |
| end |
| end |
| reg_prog12 : |
| begin |
| iicaddr = 8'b00001001 ; |
| iicdata = 8'b00000001 ; |
| iic_start = 1'b0 ; |
| if (iic_stop == 1'b1) |
| begin |
| reg_prog_nextstate = reg_prog13 ; |
| end |
| else |
| begin |
| reg_prog_nextstate = reg_prog12 ; |
| end |
| end |
| reg_prog13 : |
| begin |
| iicaddr = 8'b00000000 ; |
| iicdata = 8'b00000000 ; |
| iic_start = 1'b1 ; |
| if (iic_stop == 1'b0) |
| begin |
| reg_prog_nextstate = reg_prog14 ; |
| end |
| else |
| begin |
| reg_prog_nextstate = reg_prog13 ; |
| end |
| end |
| reg_prog14 : |
| begin |
| iicaddr = 8'b00001010 ; |
| iicdata = 8'b10000000 ; |
| iic_start = 1'b0 ; |
| if (iic_stop == 1'b1) |
| begin |
| reg_prog_nextstate = reg_prog15 ; |
| end |
| else |
| begin |
| reg_prog_nextstate = reg_prog14 ; |
| end |
| end |
| reg_prog15 : |
| begin |
| iicaddr = 8'b00000000 ; |
| iicdata = 8'b00000000 ; |
| iic_start = 1'b1 ; |
| if (iic_stop == 1'b0) |
| begin |
| reg_prog_nextstate = reg_prog16 ; |
| end |
| else |
| begin |
| reg_prog_nextstate = reg_prog15 ; |
| end |
| end |
| reg_prog16 : |
| begin |
| iicaddr = 8'b00001011 ; |
| iicdata = 8'b01000111 ; |
| iic_start = 1'b0 ; |
| if (iic_stop == 1'b1) |
| |
| begin |
| reg_prog_nextstate = reg_prog17 ; |
| end |
| else |
| begin |
| reg_prog_nextstate = reg_prog16 ; |
| end |
| end |
| reg_prog17 : |
| begin |
| iicaddr = 8'b00000000 ; |
| iicdata = 8'b00000000 ; |
| iic_start = 1'b1 ; |
| if (iic_stop == 1'b0) |
| begin |
| reg_prog_nextstate = reg_prog18 ; |
| end |
| else |
| begin |
| reg_prog_nextstate = reg_prog17 ; |
| end |
| end |
| reg_prog18 : |
| begin |
| iicaddr = 8'b00001100 ; |
| iicdata = 8'b01000000 ; |
| iic_start = 1'b0 ; |
| if (iic_stop == 1'b1) |
| begin |
| reg_prog_nextstate = reg_prog19 ; |
| end |
| else |
| begin |
| reg_prog_nextstate = reg_prog18 ; |
| end |
| end |
| reg_prog19 : |
| begin |
| iicaddr = 8'b00000000 ; |
| iicdata = 8'b00000000 ; |
| iic_start = 1'b1 ; |
| if (iic_stop == 1'b0) |
| begin |
| reg_prog_nextstate = reg_prog20 ; |
| end |
| else |
| begin |
| reg_prog_nextstate = reg_prog19 ; |
| end |
| end |
| reg_prog20 : |
| begin |
| iicaddr = 8'b00001110 ; |
| iicdata = 8'b00000001 ; |
| iic_start = 1'b0 ; |
| if (iic_stop == 1'b1) |
| begin |
| reg_prog_nextstate = reg_prog21 ; |
| end |
| else |
| begin |
| reg_prog_nextstate = reg_prog20 ; |
| end |
| end |
| reg_prog21 : |
| begin |
| iicaddr = 8'b00000000 ; |
| iicdata = 8'b00000000 ; |
| iic_start = 1'b1 ; |
| if (iic_stop == 1'b0) |
| begin |
| reg_prog_nextstate = reg_prog22 ; |
| end |
| else |
| begin |
| reg_prog_nextstate = reg_prog21 ; |
| end |
| end |
| reg_prog22 : |
| begin |
| iicaddr = 8'b00010000 ; |
| iicdata = 8'b00000000 ; |
| iic_start = 1'b0 ; |
| if (iic_stop == 1'b1) |
| begin |
| reg_prog_nextstate = reg_prog23 ; |
| end |
| else |
| begin |
| reg_prog_nextstate = reg_prog22 ; |
| end |
| end |
| reg_prog23 : |
| begin |
| iicaddr = 8'b00000000 ; |
| iicdata = 8'b00000000 ; |
| iic_start = 1'b1 ; |
| if (iic_stop == 1'b0) |
| begin |
| reg_prog_nextstate = reg_prog24 ; |
| end |
| else |
| begin |
| reg_prog_nextstate = reg_prog23 ; |
| end |
| end |
| reg_prog24 : |
| begin |
| iicaddr = 8'b00010001 ; |
| iicdata = 8'b00011100 ; |
| iic_start = 1'b0 ; |
| if (iic_stop == 1'b1) |
| begin |
| reg_prog_nextstate = reg_prog25 ; |
| end |
| else |
| begin |
| reg_prog_nextstate = reg_prog24 ; |
| end |
| end |
| reg_prog25 : |
| begin |
| iicaddr = 8'b00000000 ; |
| iicdata = 8'b00000000 ; |
| iic_start = 1'b1 ; |
| if (iic_stop == 1'b0) |
| begin |
| reg_prog_nextstate = reg_prog26 ; |
| end |
| else |
| begin |
| reg_prog_nextstate = reg_prog25 ; |
| end |
| end |
| reg_prog26 : |
| begin |
| iicaddr = 8'b00010010 ; |
| iicdata = 8'b00001001 ; |
| iic_start = 1'b0 ; |
| if (iic_stop == 1'b1) |
| begin |
| reg_prog_nextstate = reg_prog_end ; |
| end |
| else |
| begin |
| reg_prog_nextstate = reg_prog26 ; |
| end |
| end |
| reg_prog_end : |
| begin |
| iicaddr = 8'b00000000 ; |
| iicdata = 8'b00000000 ; |
| iic_start = 1'b0 ; |
| reg_prog_nextstate = reg_prog_end ; |
| end |
| endcase |
| end |
| |
| always @(posedge tm3_clk_v2) |
| begin |
| if (rst_done == 1'b1) |
| begin |
| rst <= 1'b1 ; |
| end |
| temp_reg1 <= tm3_vidin_rts0 ; |
| temp_reg2 <= temp_reg1 ; |
| if (rst == 1'b0) |
| begin |
| reg_prog_state <= reg_prog1 ; |
| end |
| else if ((temp_reg1 == 1'b0) & (temp_reg2 == 1'b1)) |
| begin |
| reg_prog_state <= reg_prog1 ; |
| end |
| else |
| begin |
| reg_prog_state <= reg_prog_nextstate ; |
| end |
| if (iic_stop == 1'b0) |
| begin |
| iic_state <= iic_state + 1 ; |
| end |
| else if (iic_start == 1'b1) |
| begin |
| iic_state <= 7'b0000001 ; |
| end |
| end |
| endmodule |
| |
| |
| |