1055 lines
35 KiB
Verilog
Executable File
1055 lines
35 KiB
Verilog
Executable File
// 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
|
|
|
|
|
|
|