查看: 3346|回复: 0

【往届解析】第二届华为杯创芯大赛题目浅析及模拟均.....

[复制链接]

该用户从未签到

发表于 2021-4-21 11:26:52 | 显示全部楼层 |阅读模式
分享到:
第二届华为杯创芯大赛题目浅析及模拟均衡器(AEQ)基础理论推导


引言:

在高速串行接口中(典型如SERDES),高频信号的0-1切换可能会由于传输线阻抗等因素无法切换完全,进而出现ISI码间干扰。这种方式的典型解决方法有两种:发射端预增强和接收端均衡。两种方式的目的都是要补偿高频信号的衰减,而均衡器的主要实现有两种,一种是模拟均衡器,一种是数字均衡器。后者可能是通过射频ADC采样后进行DSP,前者的目的是通过模拟电路直接实现下图所示的信号传递曲线:

1.jpg



在较高频率处增益变高,类似于一个带通滤波器。值得一提的是,这是2019年华为杯创芯大赛机试题目:原题为实现这样的幅频特性,fboost~=70MHz,Gain_dc=6dB,Gain_boost=12dB;且slope_p和slope_n都约为20dB/dec。

提纲:
  • 固定均衡器的结构
  • 反馈式结构实现类似幅频特性
  • 五管单元的零点能否利用?

正文:


一、固定均衡器实现

固定均衡器(相对于自适应均衡器的一个概念,后者往往将固定均衡器代入一个环路来实现自适应)的一般实现电路为:


2.jpg

将开环的差动对尾管分离,并加入一个阻容对,其小信号等效电路为:

3.jpg

这里和五管单元的小信号推导类似,不能用半边等效电路而要用电流恒定(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。

三是反馈路径上如何实现极点?假设采用大电阻反馈,单端运放和差分运放产生带极点的负反馈路径的方法如下图:


4.jpg


三、五管单元的零点分析

五管单元中产生的零点固定为第二极点的两倍,所以无法实现要求波特图中先升后降的效果。


回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /5 下一条



手机版|小黑屋|与非网

GMT+8, 2024-12-24 00:58 , Processed in 0.113689 second(s), 16 queries , MemCache On.

ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

苏公网安备 32059002001037号

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.