always @(negedge sda)
if(scl==1)
begin
state <= state +1;
if(state == 2'b11)
disable write_to_eeprom;
end
//always@(posedge sda)
always@(posedge sda) //这里是因为写入的第一位数是1(器件地址状态字为10100010)
if(scl == 1)
begin
stop_w_r; //每写完一个字节的数据都产生停止,清零
//n = n + 1;
end
else //if(n <= 32'd19)
begin
casex(state)
2'b01:
begin
read_in;
if(ctrl_byte == 8'b1010_0010)
begin
state = 2'b10;
write_to_eeprom;
end
else
state = 2'b00;
end
2'b11:
read_from_eeprom;
default:
state = 2'b00;
endcase
end
task stop_w_r;
begin
state = 2'b00;
addr_byte = 0;
ctrl_byte = 0;
out_flag = 0;
sda_buf = 0;
end
endtask
if(scl==1)
begin
state <= state +1;
if(state == 2'b11)
disable write_to_eeprom;
end
//always@(posedge sda)
always@(posedge sda) //这里是因为写入的第一位数是1(器件地址状态字为10100010)
if(scl == 1)
begin
stop_w_r; //每写完一个字节的数据都产生停止,清零
//n = n + 1;
end
else //if(n <= 32'd19)
begin
casex(state)
2'b01:
begin
read_in;
if(ctrl_byte == 8'b1010_0010)
begin
state = 2'b10;
write_to_eeprom;
end
else
state = 2'b00;
end
2'b11:
read_from_eeprom;
default:
state = 2'b00;
endcase
end
task stop_w_r;
begin
state = 2'b00;
addr_byte = 0;
ctrl_byte = 0;
out_flag = 0;
sda_buf = 0;
end
endtask
一周热门 更多>