)
转换层级物理概念单位核心决定因素下层映射关系射频频谱层信道带宽 (Bandwidth)MHz国家无线电管控空域资源宽度通过时频采样映射 (RE Grid)符号速率层波特率 (Baud Rate)Msps子载波间隔IFFT 点数决定通过空间映射 (MIMO) 与星座映射 (QAM)基带硬比特层原始物理层速率Gbps调制方式 (16/64/256QAM)、天线并发流数通过信道纠错 (LDPC/Polar) 与层级协议包头用户应用层有用吞吐量 (Throughput)Gbps有效码率Coding Rate与系统开销无最终应用层3GPP 协议把 Sub-6GHzFR1 频段的单载波最大带宽死死限制在 100MHz是由于物理世界残酷的硬件和数学限制。1. 原因一无线电频谱就像“切蛋糕”没有完整的 200M 连片空地电磁波频谱是极其稀缺的国家资源。在 Sub-6GHz比如主流的 3.5GHz 频段空中早就挤满了卫星通信、雷达、军用无线电、残存的 4G 信号等。政府比如工信部在划分频谱时能给每个运营商移动、电信、联通好不容易切出一段连续的 100MHz 已经是极限了。如果协议把单载波定成 200MHz绝大多数国家的运营商根本找不到这么宽的“连片处女地”这个标准就废了。2. 原因二ADC模数转换器的“功耗与精度”天花板这是最卡硬件的地方。物理带宽越宽前端 ADC 的采样率就必须成倍飙升。100MHz 带宽数字域采样率一般要达到 122.88 MHz。如果直接做 200MHz 带宽采样率就要飙到 245.76 MHz 甚至更高。代价超高速 ADC 的功耗呈指数级上升发热量大得能烧毁基站同时采样太快会导致 ADC 的有效位数ENOB严重下降原本 12-bit 的精度可能跌到 8-bit这就导致高阶调制如 256QAM根本解不出来。3. 原因三射频功率放大器PA的“非线性噩梦”功率放大器在把信号喷射到空中时带宽越宽它的非线性失真比如记忆效应就越恐怖。你们日常调测中头疼的 DPD数字预失真 模块如果面对 200MHz 的超宽信号FPGA 内部的反馈路径和乘法器资源可能要翻好几倍才能压得住邻道泄漏比ACLR。那如何从最初的带宽到最终的FPGA实现呢假设现在需要100M带宽的一个系统需要怎么最后到FPGA的实现的一些考虑需要考虑哪些因素下面是一个例子。步骤 ①确定极限物理场景要想推导硬件的极限位宽必须代入协议允许的最高规格参数查 3GPP MCS 表单载波带宽 (B) 100 MHz。子载波间隔 (SCS) 30 kHz5G Sub-6G 黄金频段。调制方式 256QAM每个符号携带 bit。最大空间流数 (NLayers) 4 层4x4 MIMO。LDPC 目标码率 (R) 0.92。步骤 ②套用协议公式计算极限系统吞吐量根据 3GPP TS 38.306 标准5G 的理论峰值吞吐量公式为其中22.08是估算出来的香农工程综合系数。在 100MHz 带宽、30kHz 间隔下协议规定最大可用资源块为273 。OH协议开销Overhead物理层往上PDCP/RLC/MAC 层还要加各种包头还要传信令这部分大约占 10% ~14%。NLayerMIMO 空间流数/层数公路设计成了几层立交桥天线并发。 比如 4x4 MIMO 就是 4 层立交桥吞吐量直接乘以 4。第一条死线FPGA 的纯比特级物理层必须具备每秒喂饱 个硬比特 的处理能力。步骤 ③引入核心时钟计算“每拍硬比特需求”由于外围光口硬件晶振卡死FPGA 的骨干工作时钟必须跑在 Fclk312.5MHz或者Fclk250MHz。现在我们把一秒钟的总任务量平摊到每一个时钟周期拍里这意味着为了不爆仓你的 FPGA 纯比特总线如加扰、CRC理论上每拍至少要能吐出 7.04 个比特。如果是250M则为9bit 。步骤 ④演进到软信息层LLR 精度量化数据流经过无线信道到达接收端变成了复数 IQ 信号。解调器Demodulator把信号解调吐出软信息 LLR。根据 MATLAB 链路仿真压榨出的“高能效比奇点”单个 LLR 的黄金量化精度为 6 bit。那么为了运送这 7.04 个硬比特对应的软信息总线容量需要放大如果按照250M则需要54bit/拍。步骤 ⑤对接商业 IP 核定型物理总线位宽终点在真实的 FPGA 设计中我们不可能让总线跑 42.24 这种带小数的位宽。我们需要去对齐后级商业 LDPC 译码器硬核SD-FEC IP的物理结构。5G 的 SD-FEC 核内部为了实现极其恐怖的矩阵并行乘法底层的硬件计算单元PE并行度通常焊死为 即一拍必须强制喂入 32 个数据不支持挤牙膏式的挤入。架构师决定为了迎合译码 IP 的胃口前级的解速率匹配模块在输出时必须用“乒乓 RAM”把零散的数据攒起来然后以 32路并行 的规格一口气喷进译码器位宽闭环验证192-bit 的总线一拍能运送 32 个 LLR。而我们步骤③算出来极限状态下每拍只需要 7.04 个 LLR。这意味着在 100M 带宽下这根 192-bit 的总线根本不需要每拍都拉高有效信号valid。状态机只需要每 4 拍里面拉高 1 拍 22%的总线利用率就能轻轻松松喂饱和满足 2.2Gbps 的极限吞吐量。这也解释了为什么同样的 192-bit 总线可以一动不动地直接复用到 200MHz 双载波聚合 44%利用率甚至更高规格的架构中。FPGA实现中的一些考虑1、是不是 LDPC 译码这里决定了最终的最大吞吐量是的在整个 5G 物理层接收端Rx的 FPGA 实现中LDPC 译码器就是那个公认的、绝对的“算力瓶颈与吞吐量终结者”。解调、解扰、解速率匹配这些模块在硬件上属于“时钟驱动型逻辑”结构相对简单只要有数据硬件电路一拍就能吐出一个结果。它们天然具有超高的吞吐量上限。LDPC 译码器它属于“迭代纠错型逻辑”。数据进去了不能马上出来硬件在内部必须根据 H 矩阵左手算校验节点右手算变量节点像揉面团一样反复迭代比如跑 4 次、6 次甚至 10 次迭代。结论前级模块一拍就能处理完的数据LDPC 译码器要在肚子里憋好几十个时钟周期。 只要 LDPC 译码器的物理计算速度被卡住整个前级总线就会立刻通过ready信号拉低反压让全机减速。所以说是 LDPC 译码器的硬件极限直接决定了整颗物理层芯片的吞吐量天花板。2、为什么LDPC的延迟会成为影响吞吐量的一个很大的原因一是致命的“停等”死锁HARQ 进程空转5G 引入了 “8或16个独立 HARQ 进程”其实是在硬件缓冲区里开辟了 8 或 16 个独立的货运流水线编号。它的真实工作流程是像转轮手枪一样把完全不同的新包连续打出去第 1 毫秒基站通过 进程 #1向手机发射 “新数据包 A”。发完不等反馈第 2 毫秒基站通过 进程 #2向手机发射 “新数据包 B”。第 3 毫秒基站通过 进程 #3向手机发射 “新数据包 C”。……第 5 毫秒此时手机终于把 “数据包 A”进程 #1 的译码做完了。手机发现错了向上发送 NACK #1。第 6 毫秒基站收到了 NACK #1。哦原来进程 #1 的货翻车了。于是基站立刻抽出进程 #1 的缓冲区重新打包并重传“数据包 A”。大局观这就叫 HARQ 进程。它们是 16 个并行独立运转的停等机制。如果你的 LDPC 译码太慢比如超过了 16 毫秒都没解完进程 #1基站把 16 个进程发完一轮后手里没有空闲的进程号可用了系统就会瞬间被反压堵死彻底停工打摆子。二是内存爆仓与反压Backpressure如果后级 LDPC 译码器因为延迟大而堵塞它的 ready 信号就会无情地拉低相当于告诉前级我还没算完别给我塞数了。这一拉低会导致前级的 解速率匹配乒乓 RAM 瞬间写满。乒乓 RAM 满了就会向上级解调模块反压。一路反压上去最终导致 PCIe 总线或者光口直接丢包。3、怎么确定需要多少个LDPC的IP核呢在真实的 5G 加速卡项目立项时架构师既要看手册静态计算做底线防御又要跑高级仿真做压力测试。这是一个“两步走”的严密工程过程第一步看 IP 核手册进行“理论静态确定”算绝对下限通常手册会告诉你“在 312.5MHz 工作时钟下单核支持 5G 极限 Basegraph 1 矩阵跑最大 8 次迭代时单个核所能提供的理论硬核吞吐量用带宽算出来的物理层极限吞吐量需求比如双载波拉满需要 4.4 Gbps。结论一通过看手册静态计算你确定了绝对不能少于 4 个核。如果只放 3 个核纯数学上就注定了在好信道满载时一定会爆仓。第二步跑多核动态链路仿真算“乱序重组”和“极端噪声”的代价静态计算非常理想化默认每个块都整整齐齐地进来但现实中由于我们前面聊过的“乱序吐出”和“Early Termination提前终止”数据流在时间轴上是极度无序且具有突发性Burst的。 这时候算法工程师需要在 MATLAB 或 C 的系统级仿真平台Simulink 或 SystemC 架构仿真中搭建一个“多核分发调度仿真模型”4、一般HARQ进程设为多少实际项目中设置的数目考虑的因素是什么在目前的 5GSub-6GHz实际商用网络中几乎全行业统一默认设置为 16 个 HARQ 进程。虽然 3GPP 协议允许更少的进程如 4 或 8但为了压榨速率主流基站和手机卡死在 16。考虑的核心因素只有四个字“往返时延RTTRound Trip Time预算”。基站把进程 #0 发出去之后这个数据要经历以下漫长的硬件物理旅程空中传输时延信号在空气里飞过去。手机 Low-PHY 处理解调、FFT 变换、解速率匹配。手机 High-PHY 译码LDPC 译码这就是最大的耗时点。上行反馈准备手机打包 ACK/NACK在下一个上行时隙通过天线喷向基站。基站接收处理基站解调出 ACK/NACK并通知 MAC 层 CPU 调度器。这一整圈跑下来在 5G 30kHz 子载波一个时隙 的硬性规定下全链路的总往返时间大约需要 。也就是相当于折合 个时隙Slots。如果你只设 8 个进程基站发完 8 个包耗时 4 毫秒后由于第 1 个包的 ACK 还在空中飞需要 6 毫秒才到基站手里已经没有空闲的进程号了只能被迫原地刹车等反馈造成吞吐量暴跌。如果设 16 个进程基站一口气发了 16 个包耗时 8 毫秒。当它正准备发第 17 个包时第 1 个包的 ACK 刚好在第 7 毫秒热乎乎地送到了基站手里进程 #0 瞬间解锁基站可以无缝连接继续发新货。所以HARQ 进程数必须刚好大于“全链路硬件处理时延的总和”。只要你的 LDPC 译码器设计得太慢导致总时延超过了 16 个时隙这 16 个进程就会不够用系统就会发生死锁空转。5、一般 LDPC 译码的迭代次数是多少呢在 5G 实际硬件落地中最大迭代次数通常限制在 $6 \sim 8$ 次而在信道环境完美时平均迭代次数往往只有 1~2次。这是一个在“误码率性能BER”与“硬件时延/功耗”之间做出的标准工程折中Trade-off迭代 1~2只能纠正极少量的随机噪声。如果信道环境极好比如手机就在基站底下1次迭代 CRC 就能全绿通过立刻触发提前终止Early Termination数据直接出港。迭代 4~6瀑布效应Waterfall Region最明显的阶段。绝大多数中等噪声砸坏的比特在这个阶段会被硬生生纠正回来这是硬件工作最密集的区间。迭代 8 次以上Diminishing Returns进入了严重的边际效益递减状态。数学理论上迭代 20 次确实比 8 次误码率更好。但是从第 8 次迭代到第 20 次为了换取微乎其微的 0.1dB增益你付出的代价是硬件译码时延暴增一倍、功耗直接翻倍、前级 FIFO 彻底爆仓。所以在商用 FPGA IP 核如 Xilinx SD-FEC的配置界面里架构师会严酷地把 MAX_ITERATION最大迭代次数死死限制在 8 次或者极端恶劣信道下开到 10 次。如果迭代了 8 次 CRC 依然报错硬件立刻放弃挣扎直接判定这个块死亡大方地向后级吐出 NACK让系统走 HARQ 重传机制去要新包。用一次空中重传的代价换取 FPGA 内部流水线的绝对时序安全这就是最纯粹的工业落地思维。6、那像这种在FPGA实现的物理层实现的硬件架构是什么样子的在通信和数据中心工业界5G 物理层在 FPGA 中的落地有着非常标准且成熟的硬核硬件架构和系统部署形态。宏观部署架构物理层拆成“两半”跑在 5G 时代物理层PHY因为计算量实在太大被 3GPP 协议一分为二High-PHY高物理层 和 Low-PHY低物理层。这就导致了两种不同的硬件形态形态 A插在 CPU 主板上的“基带加速卡”负责 High-PHY这就是你提到的最核心的形态在业界通常叫 Inline 加速卡 或 Lookaside 加速卡比如 Xilinx 的 T1/T2 卡或者 Intel 的 N6000 系列。物理形态它是一块标准的 PCIe 板卡直接插在通用服务器如浪琴、中兴、戴尔的 X86/ARM 服务器的 PCIe 插槽上。分工协作CPU主服务器擅长跑复杂的条件分支逻辑所以负责跑 5G 的 3 层RRC、2 层MAC/RLC以及核心网协议。FPGA 加速卡擅长跑高并发的密集数学计算。当 CPU 收到用户数据要下发时通过 PCIe 总线如前面推导的 250MHz 核心时钟把硬比特数据如同倒水一样源源不断地灌进 FPGA 加速卡中。卡内FPGA 加速卡吃进比特后全速运行我们之前讨论的 CRC 加扰 LDPC 编码 速率匹配High-PHY 阶段。形态 B挂在铁塔天线罩里的“射频前端 SOC”负责 Low-PHY数据在加速卡里做完编码和速率匹配后并不会在本地直接变成无线电而是通过卡上的 25G/100G 光口eCPRI 协议跑在 156.25MHz 或 312.5MHz 基准时钟上走光纤直接打到高高挂在铁塔上的 AAU有源天线单元 内部。AAU 内部形态天线罩里面也有一颗强劲的芯片通常是专用的高端 FPGA/ASIC或者是 Xilinx 的 RFSoC 芯片。卡内它在塔顶实时接收光纤传来的数据在芯片内部全速跑物理层的下半部分Low-PHYIFFT/FFTOFDM 调制 数模转换DAC 到功率放大器PA和天线阵列中。7、层映射中比如4T4R四路功率放大器射频通道对应四个基站天线的话那如果只用一层层映射四路PA都有功率吗是的都有功率。当手机掉到 1 层Rank 1时说明信道已经极其恶劣了。这时候如果基站真的关掉 3 路 PA只剩 1 路天线在孤军奋战手机可能直接就彻底断网了。基站此时正确的做法是让 4 根天线、4 个 PA 同时开足马力同时发射这 1 层的数据通过预编码矩阵 进行相位微调。4 路信号在空中叠加手机天线收到的信号能量会瞬间放大 4 倍获得6dB 的阵列增益这能生生把濒临断网的手机从生死线上拉回来。8、 在物理层PHY和 MAC 的最前端时钟频率和速率是被 PCIe 或 eCPRI 协议绑定的吗不管是 PCIe 还是 eCPRI光口它们都属于高速串行接口SerDes。这类接口有一个共同特点不需要在外面单独连一根时钟线而是把时钟信号直接“揉”进高速数据流里时钟数据恢复CDR 机制。为了让接收端的 FPGA 能把数据完美解出来协议必须对时钟做出极其严苛的硬性规定PCIe 接口外部基准PC 主板的 PCIe 插槽第 A11、A12 号引脚会雷打不动地向外输出一个 的基准参考时钟REFCLK。芯片内部当你例化 Xilinx 的 PCIe IP 核如 XDMA / QDMA时IP 核内部的锁相环PLL会吃进这个 并根据你配置的 PCIe 世代Gen和通道数Lane自动倍频并吐出一个“用户时钟User Clock”。PCIe Gen3 x8IP 核硬核会硬性吐出 250MHz。PCIe Gen4 x8IP 核硬核会硬性吐出 250MHz 或 500MHz。结论这个接口一侧的时钟是由 PCIe 组织和 Xilinx 硬件团队写死了的 。eCPRI 光口对齐无线的“黄金频率”在光通信里为了实现标准的线速如 10Gbps / 25Gbps全行业的硬件物理层统一对齐两个黄金频率156.25MHz 或者 312.5MHz。晶振焊死在板子上它的频率是雷打不动的。你用 Vivado 配置以太网/eCPRI IP 核时顶多只能选择“把这个 156.25MHz 分频变成78.125MHz ”或者“倍频成312.5MHz ”你绝不可能把它配置成自定义频率。FPGA 必须用接口分频出来的时钟吗能用单独的晶振吗可以用板子上完全独立的、干净的本地晶振时钟来跑你的 5G 物理层算法逻辑。在大型 FPGA 加速卡设计中时钟树通常被划分为两个阵营接口时钟域Interface Clock Domain由 PCIe 核或 eCPRI 核直接提供比如 或 。这个时钟域范围非常小仅仅用来驱动 IP 核自身的数据接口。核心用户逻辑时钟域Core/User Logic Clock Domain由板子上的另一个独立高精度晶振比如专用的通信同步差分时钟源输入给 FPGA 的锁相环MMCM/PLL产生一个例如 的时钟专门用来跑你的解调、加扰和 LDPC 译码。但是当你决定接口用接口时钟、算法用独立晶振时这就变成了典型的“异步时钟系统”。此时数据要从 PCIe 接口进入你的算法模块必须跨越时钟边界。需要用异步 FIFOAsynchronous FIFO进行跨时钟域的处理异步 FIFO 内部通过格雷码Gray Code和两级寄存器同步2-Stage Synchronizer技术把两个独立晶振的相位差在底层死死化解掉确保数据不会变毛刺。在工业界如果没有极其特殊的需求绝大多数 5G 物理层架构师都会选择直接使用接口特别是光口 eCPRI/以太网吐出来的用户时钟来跑核心算法逻辑。