在郁闷了将近半个月,每次笔试每次头疼的异步FIFO的题目,总算有点头绪了。仔细整理下:
分类:
1、USBHUB中的Elasticity Buffer。具体如下,输入时钟transmit clock由bus提供,而输出时钟receive clock由系统内部提供,时钟允许的抖动jitter为500ppm。如果向最坏的方向来看,输入时钟和输出时钟相差1000ppm,如下图:
发送一笔最大的length为9644bit,也就是说,在时钟的控制下,每次发送9644bit数据到E-Buffer中,每个时钟上升沿都要错开1000ppm,那么9644个bit传完,时钟沿错开的为9644*1000*10(-6)=9.644个bit,即,一笔传完,发送端发过来的数据比输出端输出的数据要多9.644个bit(从另一个角度说,就是发送端比输出端多9.664个上升沿。),因此E-Buffer中的一半容量为9.644个bit,为了裕度取12个bit。
2、via面试时出的题目
一个8bit宽的AFIFO,输入时钟为100MHz,输出时钟为95MHz,设一个package为4Kbit,且两个package之间的发送间距足够大。问AFIFO的深度。
此题目中,每次输入时钟上升沿来时,输入一个8bit,因此4Kbit需要(4000/8=500)个上升沿来发送,两个时钟,100MHz和95MHz,每个上升沿之间的产生的差为(1/95-1/100)*10(-6)=Xs,即两个时钟的周期之差。输入每个package时,需要500个上升沿,因此两路信号在500个上升沿后,会产生500*[X]=(5/19)*10(-6)s,那么就需要知道这Ys是多少个上升沿,Hz的意思是每秒的变化次数,因此1s有100MHz个上升沿,因此Ys有[Y*100(106)]=Z(26--27)个上升沿。这就是FIFO的深度,再绕一点,差出Z个上升沿,而每个上升沿传8个bit,因此就能输入Z*8bit的数据,AFIFO的宽度为8bit,因此深度为Z=27。
用户377235 2013-3-19 22:36
请问楼主,你最后的公式当中既有Y又有Z,你是怎么计算出深度的啊。求解释,还有你这个怎么和计算深度的经典公式fifo_depth = burst_length - burst_length * (X/Y) * (r_clk/w_clk)对应起来啊。求解释