在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2788|回复: 0

[原创] 源同步接口设计1|master篇

[复制链接]
发表于 2020-4-10 23:49:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
大家好,我是七点班车。欢迎关注我的公众号"IC小迷弟"。

记得之前跟朋友说自己撸的SPI NAND FLASH主控能够跑133MHz,朋友很诧异说:“SPI怎么可能跑这么高?”我也很愤怒——事实就摆在这,怎么可能跑不了?到底是哪里来的勇气,让他“口出狂言”,怀疑我的设计?。。。
接下来就用两篇文章来捋一捋鄙人对“源同步接口设计”的一些思考与见解。今天先上Master篇。

   247b833a3a13834a371c7cadbaa359d2-sz_6802.jpg   
源同步接口在设计中十分常见,例如SPI接口,async NAND FLASH接口。这类接口的时钟由master生成,并经过IO发送到slave中。对master的第一级寄存器来说,有着一段非常长的launch path(如图1.1所示):时钟源S点到IO clk_o -> clk_o到reg1/clk ->reg1/clk到IO data_i -> data_i到reg0/D,如红色曲线,而capture path(时钟源S点到reg0/clk)相对比较短,如蓝色曲线。
   6cc47b3fc14e3adcf7727ac3a60a2f4b-sz_33313.jpg   
图1.1

对于launch比较长,capture path比较短的路径,hold一般都不会有什么问题。但是setup就不一样了,launch path太长,则有可能导致下面公式不满足,从而带来setup违例。因此,接下来,我们就基于setup来讨论下这种源同步接口的设计问题。

为了能够更直观地分析,我们先来看看图1.2的波形图,其中最下面的黑色双向箭头为reg0的setuphold窗口(因为没搞懂怎么用timegen怎么画这窗口,所以智能凑合凑合了)。那么为了保证reg0能够正确地采样,D0必须在setuphold窗口之前保持稳定。用数学式来表示就是,reg0要能正确采样,必须要满足公式(1)。
tlaunch < T + tcapture - tsetup,其中tlaunch= ts2clk_o+tclk_o2clk + tclk2data_i + tdata_i2D,tcapture = ts2clk      ——公式(1)
   9d6f7e62bdfd78e7c18fa236d0ed822f-sz_20035.jpg   
图1.2

我们将图1.1中的数值代入到公式中,可得:2+3+5+4<T+1- tsetup。由于tsetup比较小,这里暂且忽略不计。故可退出T>15ns,即接口的最大频率Freq_max=76.9MHz。天。。。。。。瓶颈在这!

   aea0f13618ce0f00d274f0190ce70093-sz_9959.jpg   
如果要提高频率,要怎么办?我想答案已经很明显了,要么削短tlaunch,要么做长 tcapture。
1.     在PCB layout中,将layout线延时tclk_o2clk和tclk2data_i做短。(由于兼容性等客观问题,这个往往不受我们控制)
2.     选用延时比较小的PAD(但是,在穷逼的公司,PAD不是说有就有的——骄傲的工程师可以天马行空,但是有时候又不得不接受骨干的现实)。
3.     在SDC中,将ts2clk_o 和tdata_i2D做短,具体做法是,将clk_o的output delay和data_i的input delay设大,即留给chip内部的delay变小。在STA中,需要格外关注,并把它做短,表1.1是鄙人在项目中统计的tdata_i2D真实值。
   304fddb90984e1c9008188b430e39272-sz_17780.jpg   
表1.1

4.     在PR或者STA fix timing的过程中,将ts2clk做长。但是这样子的做法,有可能会给后面的寄存器带来新的setup问题,如图1.3的reg2。所以一般不会这么干。
   4d4af060efbbdc9070099d9a18f5a41a-sz_34352.jpg   
​图1.3

然而,在某种程度上,IC设计上的问题就跟戴绿帽一样,发现得越晚,就越难!所以如果把问题推到STA再去解决的话,可能就是“好吃不过饺子。。。”的梗了。因此,能在设计上动刀,就动吧。

   960f136346781ce9cbdec8b442aeebda-sz_10530.jpg   
咱再来回顾下公式(1),tsetup 是寄存器的特有属性,改不了;除了上面提到的tlaunch和 tcapture,公式中还有一个“T”,我们能否在设计上将它“搞大”?

对于同源接口来说,slave就像个机器,它会严格按照协议规定来进行工作。就拿图1.4的SPI NAND FLASH(截图来自复旦微的手册)来说,在接收到命令后,经过一个dummy byte,也就是在第15个时钟下降沿,slave就必须把ID送出来。
   7808241e284d57bb8fe7dfa07dd51b52-sz_49457.jpg   
图1.4

而Master占据了所有的主动权,毕竟它才是生成时钟的主。如果数据在第16个时钟上升沿到达不了,而是在第17个上升沿才到达,那Master也是可以在第17个上升沿才对数据进行采样的。因此,我们在设计Master的时候,可以适当增加一些采样点,每个采样点的间隔是半个周期,如图1.5粉色标号1/2/3/4所示。当D0在采样点1上出现违例时,可以把使用采样点2的数据,而对于采样点2来说,就增加了T/2。依次类推。。
   3ed8858190177f2e82ebc5415aa1f42e-sz_21257.jpg   
图1.5

图1.6亮出了部分参考代码,自己慢慢体会吧。
   c3e4c2669489e81dad12c1cc28a6a249-sz_63047.jpg   
图1.6

   6f8c78da77a3e4b6c6349f9015fd4337-sz_9425.jpg   
谈到接口,就多少会涉及bus;涉及bus,就得关注对齐问题。如图1.7,假设reg0/D和reg3/D是数据bus,且这两个信号在电路上会出现重聚。从图中可以看出,无论是在采样点2,还是在采样点3中,就只能采到reg0/D和reg3/D中的一个。显然,两者重聚后,注定是个悲剧。因此,我们在STA中需要格外关注bus skew,不能让它超过半个周期。
   a45cb95e4825d0337f14445dbbe8c438-sz_25624.jpg   
图1.7

以上就是今天要分享的内容。谢谢大家!

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-23 16:15 , Processed in 0.014919 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表