系统级电路 10/100Mbps 10BASE-T ETHERENT-PHY以太网 cadence官方教程和文件,足够专业 有电路,有工艺库,有版图 有两个版本,一份是工艺是Gpdk90nm(主要),一份是Gpdk180nm,都是有版图(TOP,cell都有),Cadence自己家的电路 如图,保姆级操作教程,从导入库启动cadence开始的那种 内容: 有两个锁相环,模拟均衡器eq pi相位差值 flash ADC,带triming bg LDO,比较器 电平移位,译码电路 数字电路,偏置电流源 运放,trans DAC,滤波器 有很多仿真tb,非常的详细 两个子模块PLL仿真,ADC仿真,bg ldo 模块仿真,TOP整体ams仿真,有版图,没流片,不是反向电路。 有几份RAK讲解文件,有讲top的,然后有几份pdf是讲里面的子模块的。
凌晨三点半的实验室咖啡机还在冒热气,我盯着显示器上密密麻麻的金属走线突然笑出声——这年头用180nm工艺调以太网PHY,简直像开着蒸汽火车玩漂移。不过当看到眼图测试结果在0.18um工艺下居然飙到97Mbps时,手里的速溶咖啡突然有了手冲的质感。
打开virtuoso的瞬间永远像拆盲盒,这次项目的库文件结构绝对能逼死强迫症:7层文件夹嵌套着23个子模块,每个模块至少带着三种仿真配置。先看PLL这个磨人的小妖精,在90nm工艺下VCO的varactor调谐曲线活像心电图,手写了个verilogA模型暴力校准:
`include "constants.vams" module varactor_model (vin, vout); electrical vin, vout; parameter real C0=50e-15, Cmax=200e-15, Vmid=0.6; analog begin V(vout) <+ 0.5*(C0 + (Cmax-C0)/(1 + exp((V(vin)-Vmid)/0.1)))*ddt(V(vin)); end endmodule这坨代码的指数函数在spectre里跑了三个小时才收敛,后来发现把0.1改成0.12能省45%仿真时间,果然是玄学调参。不过当看到VCO的相位噪声在1MHz偏移时-112dBc/Hz,值了。
ADC模块的布局才叫刺激,8位Flash结构在180nm下占着0.2mm²的硅片面积。电阻梯的mismatch补偿脚本写得像八爪鱼:
set resList [dbGet top.insts.name R_ladder*] foreach res $resList { dbAdjustParam $res "W" [expr [dbGet $res.W] * [lindex $PVT_correction 0]] dbAddGuardRing $res -layer M3 -width 0.5 }这段Tcl魔法硬是把INL从1.8LSB压到0.7LSB,代价是版图看起来像俄罗斯方块叠满了shield ring。最爽的还是看瞬态仿真时thermometer code像流水灯一样跳动,虽然前二十次仿真都卡在met1的antenna error。
LDO的过冲保护电路设计得相当暴力,当检测到输出电压超过1.2V时直接让功率管的三级衬底切换:
simulator lang=spice Mprotect 10 20 30 40 nmos l=0.18u w=50u + body=1.2V_trigger ! 这个写法其实不合法,但Calibre居然放行了结果流片前的后仿显示开启延迟比预期快3ns,差点引发振荡。最后在guard ring里埋了六个背对背二极管才搞定,版图层截图活像在画抽象派油画。
当整个AMS仿真终于跑通时,混合信号波形窗口同时显示着时钟恢复电路的jitter和数字均衡器的FFT,这种模拟与数字的冰火两重天让人想起火锅配冰淇淋的奇妙搭配。突然发现transient仿真文件夹占了137GB空间——很好,今晚的服务器散热风扇又能练肺活量了。
临走前看了眼日历,从建库到完成TOP层dummy fill正好99天。保存设计时手抖点了"Save All"按钮,望着进度条突然明白:原来真正的"PHY"是physical(物理)和philosophy(哲学)的混合体啊。