第1章:数字前端架构——整体架构图、主要模块、数据通路与时序分析

各位同学好,我是老张。做数字芯片设计十几年了,今天咱们聊聊数字前端架构。说实话,很多新人一上来就盯着RTL代码写,忽略了整体架构,结果后面集成时各种返工。我当年也吃过这个亏,所以第一节课,咱们先把架构理清楚。

1.1 数字前端整体架构图

先看一张我手绘的架构图。这张图我用了很多年,每次带新人都会拿出来讲。

蜂窝芯片数字前端架构图 天线 ADC(模数转换器) 采样率:122.88MHz ADC接口模块 数据对齐 | 格式转换 | 直流偏置校正 数字下变频(DDC) NCO混频 | CIC滤波 | 抽取 滤波 + AGC FIR滤波 | 增益控制 | 功率检测 基带处理 时钟域1:122.88MHz 时钟域2:122.88MHz 时钟域3:30.72MHz 时钟域4:7.68MHz

这张图里,信号从天线进来,经过ADC变成数字信号,然后依次经过ADC接口、数字下变频、滤波和AGC,最后送到基带。每个模块都有自己的时钟域,这也是设计中最容易出问题的地方。

核心要点:数字前端本质上是一个多速率信号处理系统。从ADC的高采样率一路降下来,每一步都在做频率变换和速率匹配。

1.2 主要模块详解

1.2.1 ADC接口模块

ADC接口是数字前端的第一道关卡。ADC送出来的数据通常是LVDS或JESD204B接口,我们需要把它转成芯片内部能用的并行数据。

我个人习惯在ADC接口里做三件事:

  • 数据对齐:ADC的采样时钟和数字逻辑时钟可能有相位差,需要用FIFO或延迟链对齐
  • 格式转换:ADC输出可能是二进制补码、偏移二进制或格雷码,要统一转成补码
  • 直流偏置校正:ADC本身会有直流偏移,用高通滤波器或累加平均法去掉

经验之谈:我在一个项目中遇到过ADC数据偶尔跳变的问题。查了三天,最后发现是LVDS接收端的端接电阻没焊好。嗯,硬件问题有时候比逻辑问题更难排查。

1.2.2 数字下变频(DDC)

DDC是数字前端的核心。它的任务是把射频信号搬移到基带。说白了,就是用数字方式实现混频和抽取。

典型的DDC结构包含:

  1. NCO(数控振荡器):产生正弦和余弦信号,频率可编程
  2. 混频器:把输入信号和NCO信号相乘,得到I/Q两路
  3. CIC滤波器:第一级抽取滤波,效率高但通带不平坦
  4. 补偿滤波器:补偿CIC的通带衰减

你想想看,ADC采样率如果是122.88MHz,而基带只需要7.68MHz,中间差了16倍。这16倍的抽取不能一次做完,否则抗混叠滤波器会很难设计。所以一般分两级:CIC做4倍抽取,FIR再做4倍抽取。

注意:CIC滤波器的增益会随抽取率变化。我曾经见过一个设计,CIC输出直接截位,结果信号幅度忽大忽小。正确的做法是:根据抽取率计算增益,做动态截位或自动增益控制。

1.2.3 滤波模块

滤波模块通常用FIR滤波器实现。为什么不用IIR?因为FIR是线性相位的,不会造成群延迟失真。在通信系统里,相位线性度很重要。

设计FIR滤波器时,我一般关注三个参数:

参数 典型值 说明
通带纹波 ≤0.1dB 太大会影响信号幅度一致性
阻带衰减 ≥60dB 太小会残留邻道干扰
阶数 32~128阶 阶数越高,资源消耗越大

这里有个技巧:如果滤波器阶数太高,可以用多相分解结构,把一个大滤波器拆成几个小滤波器并行处理。这样时钟频率可以降下来,功耗也低。

1.2.4 AGC(自动增益控制)

AGC的作用是让信号幅度保持在一个合适的范围。信号太大会饱和,太小会浪费ADC的动态范围。

AGC的实现思路很简单:

  • 检测信号功率(通常用平方和累加)
  • 和参考功率比较
  • 调整增益值

但实际做起来坑很多。我记得有一次,AGC的响应时间设得太快,结果信号稍微波动一下,增益就来回跳,反而引入了额外的幅度调制。后来把环路滤波器的带宽调窄,问题就解决了。

AGC设计要点:

  • 攻击时间(Attack Time):信号变大时,增益下降的速度——要快,防止饱和
  • 释放时间(Release Time):信号变小时,增益上升的速度——要慢,防止振荡
  • 增益步长:每次调整的dB数——步长太大,会引入可闻的增益跳变

1.3 数据通路与时序分析

数据通路是数字前端的血管。信号从ADC进来,一路流到基带,每一步都有延迟和时序要求。

咱们以LTE 20MHz带宽为例,看看数据通路的关键参数:

模块 输入速率 输出速率 数据位宽 延迟(时钟周期)
ADC接口 122.88MSPS 122.88MSPS 16bit 2~4
DDC(CIC+补偿) 122.88MSPS 30.72MSPS 20bit 10~20
FIR滤波 30.72MSPS 30.72MSPS 20bit 16~64
AGC 30.72MSPS 30.72MSPS 20bit 8~16

时序分析要关注两个维度:

第一,跨时钟域同步。每个模块的时钟频率不同,数据跨时钟域时要用异步FIFO或握手信号。我习惯用两级触发器同步控制信号,数据信号则用FIFO。千万别用单级触发器去同步多bit数据,会出亚稳态问题。

第二,流水线延迟。整个数字前端的延迟加起来可能有几十个时钟周期。对于TDD系统来说,这个延迟会影响收发切换的时间预算。所以设计时要算清楚每一级的延迟,必要时可以去掉一些不必要的流水线级数。

一个小技巧:在数据通路的关键节点插入观察点(观察寄存器),把中间数据通过调试接口读出来。这样在芯片调试时,可以一级一级地检查数据是否正确。我每次流片都会留几个这样的观察点,省了很多调试时间。

1.4 总结

数字前端架构说白了就是三件事:降速率、滤干扰、控幅度。ADC接口负责把模拟信号接进来,DDC负责把高频信号搬下来,滤波负责把杂散滤掉,AGC负责把幅度稳住。

设计时记住一句话:时钟域要清晰,数据通路要流畅,延迟要可控。做到这三点,数字前端的基本盘就稳了。

好了,这一章就到这里。下一章咱们会深入讲ADC接口的详细设计,包括JESD204B协议和LVDS接收端的电路实现。


公众号:蓝海资料掘金营,微信deep3321