1.slave的同步设计
SPI NAND FLASH就是典型的同源接口中的slave。时钟从接口进来,就好比时钟从晶振进来一样。设计时,只需要像个收了钱的乙方,协议叫你躺,你就躺;叫你跪,你就跪。打拍,锁存,一系列的同步操作猛如虎。图2.1代码就是使用移位寄存器对数据进行锁存,其中i_cpm_spi_sclk为master发送过来的时钟,i_padctrl_spi_d0为master发送过来的数据。
图2.1
然而,使用Master发送过来的时钟做同步设计,也是有局限的。如图2.2,所有的时钟都用在传输命令和数据上。如果你想用CS#去做复位相关寄存器,只能做异步复位,但没有多余的时钟给你去做同步释放。。。
图2.2
为了解决复位的问题,协议上可能会将图2.3中的tSHCH和tCHSL设的大点,以保证复位的recovery和removal time能够达到满足。
图2.3
2.slave的异步设计
为了提高兼容性,有些人也会放弃同步设计的思路,去采用异步设计——使用一个更高频的时钟对数据和接口的时钟进行采样。这时,接口时钟就好比多bit跨时钟域处理中的load信号了。先用采样时钟对接口时钟同步,然后再去对接口数据进行采样。多bit跨时钟域处理的方式如图2.4所示。
图2.4
最后上两段代码,如图2.5图2.6所示,先用更高的时钟i_cpm_spi_sclk对master发送过来的时钟i_padctrl_spi_clk_in进行同步,然后再用同步后的上升下降沿去采样数据。看不懂也没关系,有个概念就好。。。。
图2.5
图2.6
3.STA需要关注的问题
若采用的是同步设计,则按照图2.3中的input timing的规定来设置input delay,output delay也是如此;如采用异步设计,STA中尽量将bus做齐,同时将load与数据bus做齐,这样能够更好的提高兼容性。
以上就是今天要分享的内容,谢谢!
END
作者:七点班车
原文链接:https://mp.weixin.qq.com/s/J3nIqtXIxOjpkNV2kKaJtQ
微信公众号:
推荐阅读
更多IC设计技术干货请关注IC设计技术专栏