always @ (posedge sysclk) //
if(reset==1'b0)
begin
SCL_reg <= 8'd255;
SDA_reg <= 8'd255;
end
else
begin
SCL_reg <= {SCL_reg[6],(((SCL_reg[5:0] == 6'd63) | (SCL_reg[5:0] == 5'd0)) ? SCL_reg[5] : SCL_reg[6]),SCL_reg[4:0],I2C_SCL};
SDA_reg <= {SDA_reg[6],(((SDA_reg[5:0] == 6'd63) | (SDA_reg[5:0] == 5'd0)) ? SDA_reg[5] : SDA_reg[6]),SDA_reg[4:0],SDA_in};
end
/* begin
SCL_reg <= {SCL_reg[6],SCL_reg[5],SCL_reg[4:0],I2C_SCL};
SDA_reg <= {SDA_reg[6],SDA_reg[5],SDA_reg[4:0],SDA_in};
end
*/
手算第一则代码,如下图。与第二则代码无异。signtap2实测亦一致也。奈何为之?小弟观手算图,猜测繁之,加判断句,更确保程序精准。避数据传输有乱矣!