|
第二届华为杯创芯大赛题目浅析及模拟均衡器(AEQ)基础理论推导
引言:
在高速串行接口中(典型如SERDES),高频信号的0-1切换可能会由于传输线阻抗等因素无法切换完全,进而出现ISI码间干扰。这种方式的典型解决方法有两种:发射端预增强和接收端均衡。两种方式的目的都是要补偿高频信号的衰减,而均衡器的主要实现有两种,一种是模拟均衡器,一种是数字均衡器。后者可能是通过射频ADC采样后进行DSP,前者的目的是通过模拟电路直接实现下图所示的信号传递曲线:
在较高频率处增益变高,类似于一个带通滤波器。值得一提的是,这是2019年华为杯创芯大赛机试题目:原题为实现这样的幅频特性,fboost~=70MHz,Gain_dc=6dB,Gain_boost=12dB;且slope_p和slope_n都约为20dB/dec。
提纲:
- 固定均衡器的结构
- 反馈式结构实现类似幅频特性
- 五管单元的零点能否利用?
正文:
一、固定均衡器实现
固定均衡器(相对于自适应均衡器的一个概念,后者往往将固定均衡器代入一个环路来实现自适应)的一般实现电路为:
将开环的差动对尾管分离,并加入一个阻容对,其小信号等效电路为:
这里和五管单元的小信号推导类似,不能用半边等效电路而要用电流恒定(KCL)来推导,过程略起,结论为Gx实现了一个零点和一个极点,Gl实现了一个极点。当负载电容较大时,主极点由负载电容决定,零点由Gx决定,次极点由gm和Cx决定。
为了简便起见,直接将两个极点放到同一位置。此系统通过手算来使得最高点恰好为(70MHz,12dB)是有难度的,所以直接通过MATLAB确定零极点位置,代码如下。
- close all;%关闭所有图
- syms s;
- coeff=70/92;
- z0=26e6*coeff;
- p0=100e6*coeff;
- p1=100e6*coeff;
- fs0=(1+s/z0)/(1+s/p0)/(1+s/p1) *2;
- fs0=expand(fs0);
- fs0_2=expand(fs0_2);
- [N1,D1]=numden(fs0);
- res1=double(fliplr(coeffs(N1,s)));
- res2=double(fliplr(coeffs(D1,s)));%提取开环传递函数的系数
- hs0=tf(res1,res2);
- figure;
- margin(hs0);
- w0=logspace(0,9,1000);%从10^0~10^9,取1000点波特图
- [mag0,phase0]=bode(hs0,w0);
- mag1=zeros(1,max(size(mag0)));
- for i=1:max(size(mag0))
- mag1(i)=mag0(1,1,i);
- end
- [peaky,peakx]=max(mag1);
- peakx=w0(peakx);
先随意给出一个z0,调节p0和p1使得最大值为12dB。求出此时的频率点,将z0,p0,p1缩放即可。最后得到z0=1.98MHz,p0=p1=76.1MHz。
二、反馈结构的尝试
传统的模拟电路中往往将放大器闭环使用,设计一个增益较高的放大器,然后通过反馈实现一个较为精准的放大倍数。机试过程中我一直在尝试闭环结构...
直接上代码:
- close all;%关闭所有图
- syms s;
- coeff=3.857;
- w0=7e5/coeff;
- gain=1000;
- % beta=-0.5/(1+s/60e3);%反馈系数
- % fs0=1000/(1+s/20e3)/(1+s/700e9);
- % beta=-0.5/(1+s/200e5);%反馈系数
- % fs0=1000/(1+s/50e4);
- % beta=-0.7/(1+s/(11666666));%反馈系数
- % fs0=1000/(1+s/(167264));
- beta=-0.5/(1+s/(w0*gain*0.35));%反馈系数为负
- fs0=-1*gain/(1+s/w0);%开环传递函数默认180度相移
- fs0_2=fs0/(1+fs0*beta);%闭环传递函数
- fs0=fs0*beta;%环路传递函数
- % coeff=70/92;
- % z0=26e6*coeff;
- % p0=100e6*coeff;
- % p1=100e6*coeff;
- % fs0=(1+s/z0)/(1+s/p0)/(1+s/p1) *2;
- fs0=expand(fs0);
- fs0_2=expand(fs0_2);
- [N1,D1]=numden(fs0);
- [N2,D2]=numden(fs0_2);
- res1=double(fliplr(coeffs(N1,s)));
- res2=double(fliplr(coeffs(D1,s)));%提取开环传递函数的系数
- ses1=double(fliplr(coeffs(N2,s)));
- ses2=double(fliplr(coeffs(D2,s)));%提取闭环传递函数系数
- hs0=tf(res1,res2);
- hs0_2=tf(ses1,ses2);
- figure;
- margin(hs0);%计算loop TF的相位裕度
- wx=logspace(0,9,1000);%1000点波特图截止到1G
- [mag0,phase0]=bode(hs0_2,wx);
- mag1=zeros(1,max(size(mag0)));
- for i=1:max(size(mag0))
- mag1(i)=mag0(1,1,i);
- end
- [peaky,peakx]=max(mag1);
- peakx=wx(peakx);
- figure;
- bode(hs0_2);%可以看闭环的波特图,闭环的相位裕度没有意义
- % figure;
- % step(hs0_2);
- % figure;
- % pzmap(hs0_2);
由于是在反馈路径上引入了一个极点,所以最后的闭环hs0_2会有一个零点,迭代计算得到零点位置为63MHz。
这个结构比较难以满足要求,
一是因为相位裕度和Gain_boost的矛盾:相位裕度越高,尖峰越小。在相位裕度=45度的极限情况下,gain_dc=11.8。
二是因为闭环传递函数得到一个零点和一对共轭极点,而且位置相近,所以很难实现指定的slope。
三是反馈路径上如何实现极点?假设采用大电阻反馈,单端运放和差分运放产生带极点的负反馈路径的方法如下图:
三、五管单元的零点分析五管单元中产生的零点固定为第二极点的两倍,所以无法实现要求波特图中先升后降的效果。
|
|