本来2天的任务,4天才弄完,总算是调出来了,但是任然很粗糙,有太多的需要修改,总结IIC过程:
1.时序要十分明白(有时间可以增加现在的scl频率,看能不能达到100KHz)
2.IIC的sda为双向口,即sda=sda_link?sda_r:1'bz;为输出时:sda_link=1;sda_r=XX;为输入时:XX=sda;第一次没搞懂,
出现很多错误,且在顶层模块中仍然要定义为inout端口,但是在tb文件中要定义为wire端口。
3.IIC的数据始终是在scl高电平稳定,scl低电平改变,无论是读还是写,所以,主机在读写时,采样的电平不一样,写数据时是低电平,读数据时是高电平。
4.对于这种有scl的时序情况下,scl要单独驱动,第一次自己就是随意拉高拉低,scl不是规则的波形,而且也不好处理,看了网上的资料,
http://www.cnblogs.com/gianttank/archive/2010/11/20/1882575.html觉得很好,这样做能够很好的扑捉到高低电平,和上升沿下降沿等,处理起来更
方便。
5.每一个stop和start之间必须要有大于5ms的延时,一直没调出来,也这个有关。
6.对于黑金的仿顺序法,开始觉得很好用,但是现在觉得有点死板,而且很浪费资源,很多时候完全可以用状态机实现的。(虽然他那个也算是一个死板的状态机)