本帖最后由 andyany 于 2010-11-5 15:10 编辑
module i2c(
input clk,
input rst_n,
input enable,
output reg[3:0] state,
output reg[2:0] cmd,
output reg[4:0] i_state,
output reg[4:0] i_next_state,
output reg r_w,
output reg next,
output reg[3:0] bit_num
);
reg ack_data;
reg bit_num_check;
reg bit_false;
reg [19:0] delay_num;
reg [ 3:0] next_state;
parameter idle = 4'd0; parameter start_1 = 4'd1;
parameter sla_w = 4'd2; parameter sla_w_ack = 4'd3;
parameter sec_addr = 4'd4; parameter sec_addr_ack = 4'd5;
parameter start_2 = 4'd6; parameter sla_r = 4'd7;
parameter sla_r_ack = 4'd8; parameter sec_data = 4'd9;
parameter sec_data_ack = 4'd10; parameter stop = 4'd11;
parameter delay = 4'd12;
parameter i_idle = 5'd0; parameter start_a = 5'd1;
parameter start_b = 5'd2; parameter start_c = 5'd3;
parameter bit_a = 5'd4; parameter bit_b = 5'd5;
parameter bit_c = 5'd6; parameter ack_a = 5'd7;
parameter ack_b = 5'd8; parameter ack_c = 5'd9;
parameter stop_a = 5'd10; parameter stop_b = 5'd11;
parameter stop_c = 5'd12; parameter stop_d = 5'd13;
parameter stop_e = 5'd14; parameter stop_f = 5'd15;
parameter i_delay = 5'd16;
parameter cmd_start = 3'd0;
parameter cmd_byte = 3'd1;
parameter cmd_ack = 3'd2;
parameter cmd_stop = 3'd3;
parameter cmd_delay = 3'd4;
待续 |