热度 78| ||
虽然大家都在设计电路,但是真正会精确设计一个电路的人很少。在系统层面,真正知道系统关键参数的上下限及其原因的人很少;在电路层面,真正做到最优化设计,即设计的PPA指标(如FoM值)最优,且在PVT的中心的人很少。
当我们在某个工艺下开始设计电路时,应该做哪些工作呢?我以最近常用的22nm和12nm下设计sar adc和sdm adc为例来说明。
1. 做指标的可行性分析,选择系统架构;
比如,对于某个sar adc的功耗指标,从fs和sndr可仿真试出比较器和vref buffer的功耗,加上逻辑单元的C*V*F,如果明显大于指标,则指标不可行。
再比如,对于某个sdm adc的性能指标,从osr、sndr,选取合理的OBG,用理想模型分析,如果模型仿真的SNDR小于spec,则不可行。
上述描述忽略了一些技术细节,如sar adc的冗余选择;sdm adc的阶数选择,还有校准和DWA这样的技术选择。(因此,要对该方向的技术都熟悉,才能分析可行性)
在做可行性分析的过程中,已经对各种adc架构和每种架构的实现技术做了遍历,因此也完成了系统架构的选择。
2. 对子模块关键指标(指很可能成为系统瓶颈的指标)做预算。
对于sar,就是预算比较器的噪声、功耗;vref buffer的功耗;cdac的Cu选择;DLL的延迟可调范围;
动态比较器是非线性器件,其噪声只能通过仿真来试。调整动态比较器的cload、输入管尺寸和共模电压都会改变噪声,牺牲代价不同,要看系统的瓶颈。
对于sdm,就是预算各积分器opamp的带宽、摆率,确定dac子单元 (vs thd)。如何确定运放的带宽?以DT-SDM为例,带宽的选择取决于积分器电荷的转移精度,一般Ts/2的时间,一半为小信号过程,一半为摆率受限过程。可以从T/4=ln(A)*tao,来计算tao,即gbw。
那么电荷转移精度如何确定呢?这个我是试出来的,在理想模型中,用非理想opamp替代来试。gbw的经验值为>3*fs。
3. 开始子模块的调试;
对于模拟电路,首先要去整理三套用于gm-id查表的表格。根据瓶颈参数去调整gm-id取值大小。
对于逻辑电路,要明确FT和延迟;
设计运放时,首先明确管子的L,根据速度查表出L;然后明确管子gm,根据gm和L查表出id,然后根据Id/W查表出W;
注意vds的影响;(需要多次迭代)
注意不同瓶颈下gm/id的取舍,如果功耗是瓶颈则gm/id需要增大(意味着速度变慢);如果速度是瓶颈则gm/id需要减小(意味着功耗增加);
常见的gm/id范围是5mS/mA~20mS/mA。
对于高速逻辑电路,一定注意clk buffer和data buffer的负载,追求电容负载最小化。
4. 开始整体电路的调试,解决模块接口的一些bug;
常见的debug方法是理想替代;
调试电路时,要考虑走线寄生和后级电路的负载作用。
5. 开始整体电路性能仿真,并解决性能瓶颈问题。
遇到性能问题,首先是定位问题,然后解决。
注意tran-noise验证噪声,mc验证thd。
检查系统指标,计算FoM值,评估自己的工作水平。
6. layout布局,布线考虑。
整体布局-子模块布局-调整整体布局
模拟、数字信号线的隔离和分层,线宽和线间距 vs 寄生RC
7. 后仿,解决版图问题或电路问题。
ps:工艺切换时,需对比mos管的cgg,ron,各种方块电容和方块电阻,要了解finfet和planar工艺的特点。
ps2:在子模块设计过程中,模块参数的选取远比调试模块重要,难度也高,想要精确的设计,就必须精确选取spec。
设计中必然需要迭代,第一次计算或仿真评估出来的spec的精度,决定了迭代的次数。虽然调试电路占了绝大多数时间,但是计算或评估子ip的spec,却最重要。
ps3:在实现过程中经常发现,某一个系统指标过于宽松(甚至没有限制),这时需要找制定者商议策略,往往提升另外一项关键参数的指标更有意义。
风止于水: 怎么把芯片的指标分解到各个block呢