核心内容摘要
监控Linux系统性能的常用命令!
pll电荷泵锁相环 cppll已流片仿真环境搭建好了 电路到版图都已流片验证另外送PLL书籍电子版和对应工艺库。
另加50就可以得到完整版图 三阶二型锁相环 参考频率
MHz 分频比可调 锁定频率600M-2GHz 锁定时间4us 环形振荡器 ring vco 鉴频鉴相器PFD模块 分频器DIV模块 ps counter 电荷泵CP模块最近刚完成一颗三阶二型电荷泵锁相环CPPLL的流片验证参考频率覆盖
MHz输出频率直接干到2GHz实测锁定时间4us。
今天不聊公式直接上干货说说实际工程里的那些代码和电路细节。
先看架构环形VCO是灵魂环形振荡器Ring VCO是高频锁相环的性价比之选。
核心就是5级反相器链通过控制电流源调频率。
Verilog代码看着简单但实际版图里走线对称性直接决定相位噪声module ring_oscillator ( input ctrl_v, // 控制电压 output clk_out ); wire [4:0] stage; assign clk_out stage[4]; // 每级反相器带电流控制 inv_ctl #(.WIDTH(
) inv0 (.in(stage[4]), .out(stage[0]), .ctrl(ctrl_v)); inv_ctl #(.WIDTH(
) inv1 (.in(stage[0]), .out(stage[1]), .ctrl(ctrl_v)); // ... 省略3级 endmodule重点是inv_ctl模块里的电流镜设计——控制电压转电流的线性度决定了VCO增益曲线是否平滑。
实测用cascode结构比普通电流镜线性区宽了30%。
分频器可调分频比的骚操作分频比可调范围大N12~40直接用PS计数器吞脉冲结构。
Verilog代码里最坑的是避免分频时钟毛刺module div_n ( input clk_in, input [5:0] N, output clk_out ); reg [5:0] cnt; always (posedge clk_in) begin if (cnt N-
cnt 0; else cnt cnt 1; end assign clk_out (cnt N/
? 1b1 : 1b0; // 占空比50% endmodule但实际流片发现当N为奇数时占空比会崩。
后来改成了双计数器结构一个计上升沿一个计下降沿用MUX切换这才搞定全范围占空比。
鉴频鉴相器PFD别小看复位延迟PFD的核心是避免死区。
代码简单但门级仿真时复位路径的延迟必须严格匹配module pfd ( input ref_clk, input fb_clk, output up, output down ); reg ff1, ff2; always (posedge ref_clk) ff1 1b1; always (posedge fb_clk) ff2 1b1; assign up ff1 ~(ff1 ff
; assign down ff2 ~(ff1 ff
; // 复位信号必须比时钟快 and reset ~(up | down); always (reset) if(reset) {ff1, ff2} 0; endmodule在版图阶段把复位路径的走线长度做得比时钟路径短了10%实测死区时间从15ps压到5ps以下。
电荷泵CP电流失配才是老大难电荷泵的电流失配直接导致参考杂散。
电路上用了对称式开关但真正解决问题的是版图技巧——把NMOS和PMOS的dummy管子做成环形布局抵消工艺梯度。
SPICE仿真对比Icp_mismatch_before:
2uA
8V Icp_mismatch_after:
15uA
8V
锁定时间4us的秘诀三阶滤波器的零极点配置是关键但工程上有个骚操作锁定前切高频路径锁定后切低频路径。
Matlab建模时发现动态切环路带宽能让锁定时间从6us缩短到
8us。
代码里加了个状态机检测锁定标志if (lock_detect
R_filter R_low; // 切到低带宽模式 else R_filter R_high; // 高带宽快速锁定最后说点实在的整套设计在Cadence里跑完PEX后相位噪声-110dBc/Hz1MHz2GHz输出够用了。
想要完整版图GDS的朋友私信我发暗号“VCO666”50块奶茶钱带走附赠某大厂PLL设计手册和工艺库文档。
pll电荷泵锁相环 cppll已流片仿真环境搭建好了 电路到版图都已流片验证另外送PLL书籍电子版和对应工艺库。
另加50就可以得到完整版图 三阶二型锁相环 参考频率