|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
×
i2c 协议规定, 在SCL为高期间,SDA的下降沿认为是start信号,
所以设计检测start 的code用:
always (negedge SDA or negedge SCL) (假定这里只有SCL=0做start的reset)
if (!SCL) start <= 0;
else start <= 1;
另外内部的一个ff,需要用这个start信号做reset(假定这里只有start做reset信号)
always (negedge SCL or posedge start)
if (start) ff1 <= 0;
else ff1 <= a; ...
现在的问题是,ff1的reset信号start是在scl的下降沿被清0的,而ff1本身也是在scl的下降沿改变的,所有对ff1来说,需要保证他的reset 信号start的removal时间没有问题。那么pt里面应该如何约束,以及如何检查removal没有问题呢?
这里应该如何约束。
1.是否需要分别针对SDA SCL各创建一个时钟,假定SCL的频率在5m, 在SCL=1期间,SDA 从1->0 后起码50ns后,SCL才会从1->0. 如果需要创建的话,应该怎么写。
如果需要分别创建时钟,应该怎么约束这两时钟间的关系? 假定以SDA做clock的时钟域,总共就2个register: 1个是这里说的start,另外一个就是和start很类似的stop信号(在scl为高期间,SDA的上升沿认为是stop信号,且SDA起码上升50ns后,SCL才会从1->0),
是否需要设置 false_path?
先谢谢大家了。 |
|