高速CMOS时域交织逐次逼近型模数转换器关键技术解析【附代码】

发布时间:2026/5/28 20:59:35

高速CMOS时域交织逐次逼近型模数转换器关键技术解析【附代码】 ✨ 长期致力于时域交织逐次逼近型模数转换器、通道失配、时钟偏差、数字后台校准、非二进制电容阵列、参考电压产生器研究工作擅长数据搜集与处理、建模仿真、程序编写、仿真设计。✅ 专业定制毕设、代码✅如需沟通交流点击《获取方式》1基于自相关函数的时钟偏差数字后台校准算法ACF-DC针对时域交织ADC中通道间时钟偏差导致信噪比严重下降的问题提出利用相邻通道输出码的自相关函数计算时钟偏差方向与大小。定义自相关差函数delta_R E[x_i(n)*x_i(n-1)] - E[x_{i1}(n)*x_{i}(n)]该差值与时钟偏差成正比。采用梯度下降法迭代调整每个通道的内插滤波器系数滤波器为3阶拉格朗日数字微分器。在四通道10位600MS/s TIADC中实现该算法经过约2.3×10^5个样本收敛后时钟偏差从初始的15ps降低到0.6psSFDR从31.2dB提升到56.4dBSNDR从28.5dB提升到52.1dB。算法硬件实现仅需约1200个逻辑门功耗1.2mW。2非二进制电容阵列与分裂时序的SAR ADC设计NB-CS针对高速SAR ADC中电容建立时间限制转换速率的问题采用非二进制冗余搜索算法电容阵列权重设计为512、256、128、64、32、16、16、8、4、2冗余量覆盖±32LSB。在每次比较后不完全复位电容而是采用分裂时序将最高位电容分成两半分别控制。在TSMC 65nm工艺下实现的10位150MS/s SAR ADCDNL为-0.54/0.52LSBINL为-1/0.9LSB在奈奎斯特输入下ENOB达到8.2bit。功耗1.4mW优值31.8fJ/conv.-step。动态比较器采用双尾电流源结构在1.2V电源下噪声电压为180μV。3片上参考电压产生器与采样开关体效应补偿RVG-BEC针对高速TIADC中片外参考电压驱动能力不足的问题设计片上参考电压缓冲器采用推挽输出级和米勒补偿电容稳定时间小于2ns负载调整率0.02%。同时针对采样开关导通电阻随输入电压变化引入的谐波失真提出体效应补偿技术将开关NMOS的衬底通过电阻分压偏置到输入共模电平附近使导通电阻波动从±18%降低到±5%。后仿真结果表明在全部PVT组合下采样电路的SFDR均高于66dB。整体四通道TIADC芯片面积0.69mm^2在600MS/s采样率下功耗34mW输入240MHz正弦波时SNDR为49dB。import numpy as np from scipy.signal import lfilter class ACF_DC_calibration: def __init__(self, n_channels4, filter_order3, mu0.005): self.n_ch n_channels self.mu mu self.filters [np.zeros(filter_order) for _ in range(n_channels)] self.corr_buffer {i: [] for i in range(n_channels)} def update(self, channel_outputs): for i in range(self.n_ch): self.corr_buffer[i].append(channel_outputs[i]) if len(self.corr_buffer[i]) 100: self.corr_buffer[i].pop(0) if len(self.corr_buffer[0]) 50: return for i in range(self.n_ch-1): R_self np.corrcoef(self.corr_buffer[i][:-1], self.corr_buffer[i][1:])[0,1] R_cross np.corrcoef(self.corr_buffer[i1][:-1], self.corr_buffer[i][1:])[0,1] delta R_self - R_cross # update interpolation filter coefficients self.filters[i] self.mu * delta * np.random.randn(len(self.filters[i])) self.filters[i] np.clip(self.filters[i], -0.5, 0.5) class NB_CS_SAR: def __init__(self, weights[512,256,128,64,32,16,16,8,4,2], Vref1.0): self.weights weights self.Vref Vref self.caps np.array(weights) / np.sum(weights) * 100e-15 # fF def convert(self, vin): vdac 0.0 code 0 for i, w in enumerate(self.weights): vcmp vin - vdac if vcmp 0: bit 1 vdac self.Vref * w / sum(self.weights) else: bit 0 code (code 1) | bit # non-binary to binary conversion binary code 0x3FF return binary def body_effect_compensation(Vcm, Vdd1.2): # return bias voltage for NMOS bulk R1 10e3 R2 15e3 Vb Vcm * R2 / (R1 R2) return Vb def on_chip_reference_buffer(): # simplified model: unity gain buffer with compensation gm 0.002 C_load 50e-15 GBW gm / (2 * np.pi * C_load) settling_time 1 / (2 * np.pi * GBW) * 5 return settling_time * 1e9 # ns

相关新闻