数字IC设计笔试题分析


1 FIFO设计

1.1 如何设计合理的FIFO宽度和深度

        异步FIFO的一个重要属性是它的深度,即FIFO最多可以存储的以位为单位的数据的个数,他决定了数据传输的延时和吞吐量,是影响系统性能的一个重要参数。

        给系统中的异步FIFO设定适当的深度,既可以满足系统的性能需求,又可以优化系统的面积和功耗,因此受到人们的关注。

        这样就需要一种通过分析异步FIFO动态参数,来确定其深度的方法。异步FIFO的动态参数包括FIFO的饱和度、读写速率和溢出情况等,它们反映了FIFO的运行状况并且对确定FIFO的深度有指导意义。设计者可以根据这些动态参数,分析FIFO深度对系统性能的影响,为异步FIFO确定适当的深度。

        假设在FIFO的写入端执行32个字节的burst写操作,相邻两次burst操作的时间间隔服从泊松分布

        FIFO之后的处理模块将FIFO中的数据读出,并通过总线存储到SRAM中供总线上其他模块处理。处理模块的的占用率由总线仲裁器控制控制,采用分时复用策略。

        深度太低时,容易发生写操作丢失;深度太高时,写入速率变化与深度正常时的写入速率变化完全一致,表面FIFO深度足够大时,其对写入速度就没有影响了。

例题:

        假设FIFO的写时钟为100MHz,读时钟为80Mhz。在FIFO输入侧,每100个写时钟,写入80个数据;读数据侧,假定每个时钟读走一个数据。请问FIFO的深度设置多少可以保证FIFO不会上溢出和下溢出?

解:

        假设写入时为最坏情况(背靠背),即在160×(1/100)微秒内写入160个数据。以下是写入160个burst数据的时间计算方法:

Time:burst_cycle × Twclk = (burst_cycle) / (Fwclk) = 160 / 100

        在这段时间内只能读出160×(1/100)×80个数据:

data_num = Time / Tr = Time × Fr = 160/100 × 80

        因此该FIFO的深度为:

depth = burst - data_num = 160 - 160/100 × 80 = 32

        将问题一般化:

        则FIFO的最小深度是多少?

depth = burst_length - (burst_length/WCLK) × (RCLK × (X/Y))

1.2 如何在2次幂和非2次幂深度下设计相应的读写指针

        为什么需要格雷码做读写指针?

        由于异步FIFO是工作在两个不同的时钟域中,如果读写地址在某一时刻从0111到1000转变,恰好写时钟要在这时刻采样读地址,那么得到的只有可能是0000至1111中的任一个值。这个不确定的读地址会导致空满状态判断错误,这就是亚稳态。

        亚稳态的出现是不可避免的,如果把二进制地址计数器转换成格雷码然后再采样,而不是直接采样二进制计数器出来的值,那么就能很好的减少亚稳态的发生。

        引用格雷码后,相邻数值只有1位发生翻转,1位翻转所引起的亚稳态的概率远远小于几位同时翻转所引起的概率。因此,格雷码能很好的降低亚稳态出现的概率。

数值 格雷码
0 000
1 001
2 011
3 010
4 110
5 111
6 101
7 100

例:

        假设FIFO深度为6,如果读写指针继续使用格雷码,那么当前首尾指针所有比特位都不相同。此时,如果从尾部返回首部,则无法实现消除亚稳态的目的。

        解决办法:可将地址为5的指针设定为100,此时其与首地址“000”相差一个bit位。与地址为4的指针“110”也相差一个bit位,满足消除亚稳态要求。


1.3 FIFO中亚稳态的消除

        亚稳态不能从根本上消除,但可以采取一定的措施使其对电路造成的影响降低。通常我们用故障间隔平均时间(MTBF,mean time between failures)来衡量亚稳态的影响。MTBF越大则说明亚稳态对电路产生的影响越小,反之亦然。 如当MTBF等于几十年或上百年时,我们就认为它对电路的影响基本上可以忽略。实验结果表明:对于输入为异步信号的电路,其MTBF与从亚稳态状态下恢复的时间长度有着指数的关系:

MTBF = ( e^(Tmet/C2) ) / (C1 × Fclk × Fdata)

        格雷码一次只有一位数据发生变化,这样在进行地址同步的时候,只有两种情况:地址同步正确和地址同步出错但只有一位出错。第一种正确情况不需要分析,关注一下第二种。假设写地址从000变为001,读时钟域同步出错,写地址为000到000,也就是没有跳变,但是用这个错误的写地址去做空判断不会出错,最多是让空标志在FIFO不是真正空的时候产生,而不会出现空读的情形。

        所以格雷码保证的是同步后的读写地址即使再出错的情况下依然能够保持FIFO功能的正确性,当然同步后的读写地址出错总是存在的。

        这里需要注意的是格雷码只在相邻两次跳变之间才会出现只有1位数据不一致的情况,超过两个周期则不一定,所有地址总线bus skew一定不能超过一个周期,否则可能出现格雷码多位数据跳变的情况,这个时候格雷码就失去了作用,因为这时候同步后的地质已经不能保证只有1位跳变了。


1.4 两拍同步或多拍同步的差异

        将地址总线打两拍,这是为了避免亚稳态传播,理论上将打两拍不能消除亚稳态现象,因为时钟异步,亚稳态不可避免,但是可以极大降低亚稳态传播的概率,低频情况下甚至STA不需要分析这里的异步时序,因为寄存器都可以在一拍内将亚稳态消除,恢复到正常的0/1态。而在高频情况下则不一定,尤其是在28nm工艺以下,需要检查两级触发器的延迟,保证延迟低,这样可以提高Tr,提高系统MTBF。

        多拍能够将亚稳态出现的概率进一步降低。


2 异步电路设计

2.1 复位电路的亚稳态

1

        如果异步复位信号的撤销时间在Trecovery(恢复时间)和Tremoval(移出时间)之内,那势必造成亚稳态的产生,输出在时钟边沿的Tco后会产生振荡,振荡时间为Tmet(决断时间),最终稳定到“0”或“1”,就会可能造成复位失败。

        这也就是为什么采用“异步复位,同步释放”的原因。

2.2 双锁存器法的优缺点和适用条件

        针对一个固定的设计,其他参数一般都是不可更改的,而能改变的只有Tdata。而这个Tdata是指两个寄存器之间的逻辑延时以及走线延时之和,要最大程度的减小它,只能是不在两个寄存器间添加任何逻辑而已,即为双锁存器法,这就是双锁存器可以降低亚稳态出现概率原理。

例:如果在两级同步器中插入若干buffer(不违反建立时间),对亚稳态的解决有好的影响还是坏的影响?

        双锁存器同步法如图:

2

        故常用于慢时钟域转到快时钟域

        对于典型的0.25μm工艺ASIC库中的一个触发器,MTBF=2.01(day),即触发器每两天可能出现一次亚稳态。如果将采样时间f和异步事件触发频率α都提高,亚稳态出现还要频繁。对于同样的参数,双锁存器法可将MTBF提升为9.57*10^9年,这个数值足够保证电子系统稳定运行。

        三级或者更多级虽然能将亚万台出现的概率降得更低,但影响电路效率,通常用于服务器芯片。


2.3 采样中“快到慢”与“慢到快”


2.4 结绳法的适用条件、特点和分类

        结绳就是将单脉冲延长,以方便采集到数据。

        另外的关键点就是什么时候结绳结束(采集到了数据就要让对方回到初始状态)。


2.5 多bit指示信号与数据流信号如何同步

        以2bit指示信号传递给下一个时钟域,如果这两个信号存在一定偏差,后端的时钟域信号恰好采集在这个偏差上,这两个信号在下一个时钟域就会差一个周期。

        所以解决这个问题的方法是只传递一个信号,然后在下一个时钟域里生成另外一个信号,就能保证时序不会改变。

        数据流和指示信号不同,数据流大多具有连续性,即背靠背传输;数据流要求信号具有较快的传输速度。

        解决方法:使用FIFO。


3 晶体管版图基础

3.1 基本逻辑单元的版图


3.2 CMOS器件结构


3.3 CMOS工艺流程

Back to Archive
WeChat QR Code

Scan to connect