从 ADAR1000 到 XC7A50T:开源雷达 AERIS-10 的信号链,每一颗芯片都是精打细算
从 ADAR1000 到 XC7A50T开源雷达 AERIS-10 的信号链每一颗芯片都是精打细算【免费下载链接】PLFM_RADAROpen-source, low-cost 10.5 GHz PLFM phased array RADAR system项目地址: https://gitcode.com/GitHub_Trending/pl/PLFM_RADAR在消费电子里10.5 GHz 相控阵雷达通常意味着军工级预算、专用 ASIC 和不可公开的供应链。而 AERIS-10仓库代号 PLFM_RADAR把整套系统——从频率合成、波束成形、收发前端到 FPGA 信号处理和 STM32 控制——全部开源到了一个人都能看懂、一台示波器能验证的程度。项目以开源、低成本立身两个硬件版本3 km 的 8×16 贴片阵列版与 20 km 的电介质填充波导阵列版共享同一套主板与频率合成架构规格表里没有一颗堆料芯片ADC 是 8 bit 的 AD9484DAC 是入门级 AD9708FPGA 是入门级 XC7A50T。这篇文章不评价它的性能天花板而是顺着信号链逐级拆解每一颗芯片为什么被选中、每个模块的算力与 IO 预算如何被精确计算、成本与性能的边界到底画在哪里。射频收发链从频率合成到波束成形每一环都在降本打开仓库的目录结构硬件设计被刻意拆成四块独立电路板主板原理图、频率合成板、功放板 与电源板。这种模块化本身就是成本策略AERIS-10N 与 AERIS-10E 两个版本共享频率合成板、主板与电源设计差异仅收敛在天线阵列和功放通道上——3 km 版本用 16 通道约 1 W×16的收发前端20 km 版本则换插 16 块独立的 QPA2962 GaN 功放板10 W×16。换天线、加功放就完成了 3 km 到 20 km 的产品线扩展这是典型的平台化降本。频率基准的选择最能体现精打细算的思路。系统用一颗 AD9523-1 低抖动时钟发生器做时钟中枢一次性输出相位对齐的 12 路时钟300 MHz LVDS 给收发两路 ADF4382 频率合成器做参考、400 MHz 给 AD9484 ADC、100 MHz 给 FPGA 系统时钟、120 MHz 给 DAC、60 MHz 给 ADF4382 的同步通道。这段配置逻辑直接写在 main.cpp 里注释逐通道标注了用途o Channel 0 300MHz LVDS (ADF4382 TX) o Channel 1 300MHz LVDS (ADF4382 RX) (Phase aligned with Channel 0) o Channel 4 400MHz LVDS (ADC) o Channel 5 400MHz LVDS (FPGA_ADC)(Phase aligned with Channel 4) o Channel 6 100MHz LVCMOS (FPGA system clock) o Channel 8 60MHz LVDS (ADF4382 TX sync)用一颗时钟芯片对齐所有采样与合成域而不是每颗芯片自带晶振各自为政省下的不仅是器件成本还有最贵的调试成本。配套的还有 3 分钟 OCXO 预热流程期间靠 IWDG 看门狗逐秒喂狗防止复位见 main.cpp 第 1421 行附近——对多普勒雷达而言频率基准的短期稳定度直接决定回波相干的真假。收发本振的定频也经过精算TX 定在 10.5 GHz、RX 定在 10.38 GHz相差 120 MHz——这正是中频的频率。也就是说收发本振故意错开一个中频用 LTC5552 混频器完成上/下变频的同时把中频直接压到 DDC 可处理的 120 MHz省掉一级中频放大与滤波链。adf4382a_manager.h 中TX_FREQ_HZ 10500000000ULL / RX_FREQ_HZ 10380000000ULL两行常量就是这个架构决定的全部玄机。两路本振用硬件 TIMED 同步SYNCP/SYNCN而非软件 SPI 同步开机后进入最长 10 秒的锁相等待循环直到 TX/RX 双路 LKDET 全部置位才放行后续流程。波束成形是这套系统最明星的部分4 颗 ADAR1000每颗 4 通道共 16 个收发通道。每颗 ADAR1000 内部集成了移相器、可变增益放大器和 T/R 开关控制一颗芯片吃下了原本需要十几颗分立移相器衰减器放大器的工作量。ADAR1000_Manager.h 里的寄存器映射完整展现了它被用到的每一个功能CHx_RX_PHS_I/Q相位寄存器、CHx_RX_GAIN增益寄存器、REG_LOAD_WORKING工作寄存器装载、REG_PA_CHx_BIAS_ON偏置开关、内置温度 ADC 读取。最有意思的细节在相位控制方式AERIS-10 没有用 ADAR1000 的相位移相寄存器做逐度控制而是自建了两张 128 项的向量调制查表VM_I[128] / VM_Q[128]ADAR1000_Manager.cpp以 2.8125° 为步进覆盖全相位圆。查表数据来源被严谨地注释为ADI 数据手册 Rev.B Tables 13-16并经 Linux 内核主线驱动交叉校验。配合 main.cpp 中按 10.5 GHz、半波长阵元间距计算的相位差数组phase_differences[31]31 个波束位置±45° 电子扫描的相位配置被预计算成矩阵运行时只是查表写寄存器把 STM32 在微秒级 chirp 切换路径上的 CPU 开销压到最低。收发切换也做成了最小动作pulseTXMode()/pulseRXMode()只翻转 ADTR1107 的 T/R 开关控制位不做任何偏置时序——因为偏置在上电序列里已经就位。16 颗 ADTR1107 收发前端RX 低噪放 TX 功放一体与 4 颗 ADAR1000 的组合是用中规模集成换总体成本的典型示范。FPGA 与 MCU并行算力与串行控制的分工边界AERIS-10 的算力分工非常清晰所有采样率相关的数字信号处理全部在 FPGA 内完成所有人机交互级的管理任务全部交给 STM32。先看 FPGA 的选择逻辑。radar_system_top_50t.v 开头有一句直白的注释XC7A50T-FTG256 只有 69 个可用 IO 引脚。为什么在 IO 如此紧张的情况下还选它因为雷达信号处理的核心资源不是 IO 而是 DSP48E1 与 BRAM——Build 25 的生产基线只用了 9,252 个 LUT、12,488 个 FF、17 个 BRAM 和 142 个 DSP48E1implementation-log50T 的 DSP 资源利用率约 19%余量足够继续塞算法。这是典型的按需选型不追求大芯片只确保资源利用率落在合理区间。IO 不够就靠一个薄 wrapper 把未物理连接的端口FT601 USB3.0 的 32 位总线、调试信号在内部拴住、保证 netlist 完整外部只暴露物理存在的引脚。信号链的每一级都能在仓库里找到对应模块且每一级都有明确的采样率标注处理级模块关键参数ADC 捕获ad9484_interface_400m.v400 MHz LVDSBUFIOIDDR 源同步捕获数字下变频ddc_400m.vIF120 MHzNCOCICFIR400 MHz→100 MHz匹配滤波matched_filter_multi_segment.v1024 点 FFT overlap-save长 chirp 分 4 段多普勒处理doppler_processor.vstaggered-PRF 双 16 点 FFTHamming 窗地杂波抑制mti_canceller.vH(z)1-z⁻¹ 双脉冲对消 DC 陷波恒虚警检测cfar_ca.vCA/GO/SO 三模式滑窗 DSP 乘法这几个模块的选择背后各有取舍逻辑。ADC 侧AD9484 是 8 bit/400 MHz 的器件——8 bit 量化在现代雷达里算不上高端但它换来的是 LVDS 差分接口、源同步时钟和更低的功耗与价格。FPGA 侧为了接住这 400 MHz 源同步时钟代码里用了教科书级的处理BUFIO 驱动 IDDR 消除保持时间违例再用 MMCM 把 ~50 ps 的输入抖动净化到 20-30 psad9484_interface_400m.v 注释明确写了这条链路。这一个 MMCM 让 Build 20 的 WNS 从 0.062 ns 直接拉到 0.426 ns7 倍余量改善——用最便宜的入门芯片跑满 400 MHz时序功夫全下在接口工程上。DDC 的 IF 选择同样精打细算中频定在 120 MHz 而非直接零中频等于把镜像抑制、直流偏移这些麻烦事留给数字域处理省掉了模拟正交混频器和二阶中频滤波器的器件成本。匹配滤波是算力开销的大头。30 µs 长 chirp 在 100 MHz 采样率下是 3000 个采样超过单次 1024 点 FFT 的窗口matched_filter_multi_segment.v 用 128 点重叠的 overlap-save 方法切成恰好 4 段LONG_SEGMENTS 4每一段独立做频域相乘再拼接0.5 µs 短 chirp 只有 50 个采样补零到 1024 点一段完成SHORT_SEGMENTS 1。段数、重叠量、缓冲深度都是显式参数每个数字都对应一次 FFT 吞吐与 BRAM 的权衡。多普勒处理则是波形设计的算力补偿系统采用双 PRI 交错的 staggered-PRF 波形——每帧 32 个 chirp先 16 个长 PRI 再 16 个短 PRI。如果天真地做一次 32 点 FFT非均匀采样会直接破坏频谱有效性。仓库的解法是显式的双 16 点 FFTdoppler_processor.v 注释写明了这一判断把两个子帧分别变换后用同一目标在不同 PRI 下落入不同多普勒 bin 的特性做速度模糊解算。这是用多算一次 16 点 FFT的微小成本换取整个波形设计自由度——比买更贵的 ADC/合成器便宜得多。CFAR 是算法成本的另一个样本。cfar_ca.v 实现 CA/GO/SO 三种自适应门限模式滑窗统计量存入 2048×17 的 BRAM门限乘法用一颗 DSP48E1α 系数以 Q4.4 定点表达Pfa1e-4 时统计值 α≈4.88折合 16 训练单元后 0.305→0x05。implementation-log 如实记录了它的账CFAR 的代价是 2,229 LUT、1,281 FF、1 BRAM、3 DSP——换来的是从固定门限到自适应检测的质变。项目没有美化这笔开销而是把它当作一次明码标价的升级。MCU 侧的分工同样边界分明。STM32F746 承担的角色包括多路上电/断电时序1.0V→1.8V→3.3V 逐级拉闸、各间隔 100 ms、AD9523/ADF4382/ADAR1000 的 SPI/I2C 配置、16 路 PA 静态电流 Idq 的闭环校准DAC5578 调 Vg、ADS7830 经 5 mΩ 采样电阻和 INA241A 电流放大器测 Idq、8 路热敏电阻温控与风扇开关、GPSUM982/IMUGY-85/气压计BMP180姿态定位、步进电机 360° 机械扫描、USB CDC 协议解析。它的控制节奏在 main.cpp 的runRadarPulseSequence()里一目了然对每个波束位置切换 16 通道相位矩阵然后进入 chirp 序列——每个 chirp 只是GPIO 翻转通知 FPGA pulseTXMode() 微秒级延时 pulseRXMode()真正的采样与运算全部由 FPGA 侧的模式控制器radar_mode_controller.v并行跟进。最能体现跨层分工设计功力的是 AGC。系统实现了双层自动增益控制内环在 FPGA——rx_gain_control.v 按采样帧统计峰值与饱和计数用 4 bit 有符号增益-8..7约 ±42 dB 动态做逐帧数字增益调节零额外器件成本外环在 STM32——ADAR1000_AGC.h 每帧约 258 ms读一次 FPGA 通过 DIG_5/PD13 上报的饱和标志饱和立即降agc_base_gainattack连续无饱和holdoff_frames帧后逐步回升decay并把增益写回 16 路 ADAR1000 RX VGA 寄存器支持逐通道cal_offset校准。数字内环管瞬时、模拟外环管稳态跨层闭环用一根 GPIO 完成握手——这是不花一分钱硬件的性能优化。双 USB 目标的参数化处理则是一颗 RTL、两个平台的省钱典范。radar_system_top.v 用parameter USB_MODE一分为二0FT60132 bit USB3.0面向更高端的 200T 生产目标1FT2232H8 bit/60 MHz 245 同步 FIFO50T 量产默认。50T wrapper 只暴露 15 根 FT2232H 信号200T 侧则完整走 32 位总线——换芯片不换算法接口差异被限制在顶层 wrapper 和 XDC 里。这套分工体系的工程成熟度可以从验证数据读出FPGA 侧 23/23 回归套件全绿覆盖匹配滤波、多普勒、CIC、CDC、USB、FFT、CFAR、MTI 等全链路MCU 侧 20/20最硬核的是 real-data 协同仿真——用录制 ADC 数据跑 RTL 与 Python golden reference 比对5,137 项数据检查逐位精确匹配见 implementation-log。仓库的 tb 目录里躺着数十个 testbench、formal 目录里还有 CDC/握手/多普勒的形式化验证脚本——对一个低成本项目而言这种验证投入本身就是一种隐形工程成本。成本与性能的边界哪些钱可以省哪些不能省纵观整个信号链AERIS-10 的取舍逻辑可以归纳为一条原则能在数字域用免费逻辑解决的问题绝不用模拟器件花钱解决必须花在物理层的钱天线、功放、时钟一分都不省。省下来的钱体现在这些地方中频架构省掉一级模拟链120 MHz 中频 数字域 DDC替代模拟正交混频与中频滤波入门级 ADC/DAC8 bit/400 MHz 的 AD9484 与 8 bit DAC靠 FPGA 的 MMCM 抖动净化和数字增益控制撑住性能双层 AGC 零硬件成本FPGA 内环用移位寄存器做增益STM32 外环复用已有的 ADAR1000 VGA 寄存器查表式波束控制128 项 2.8125° 相位表替代逐寄存器计算省下 STM32 的实时算力与切换延迟staggered-PRF 双 FFT用多算一次 16 点 FFT 的 FPGA 资源换取波形设计自由平台化产品线N/E 两版共享主板与频率合成差异收敛在功放与天线。不能省的钱项目也写得很清楚。天线阵列是整套系统最贵的部分仓库里躺着 4×4/8×16 贴片阵列、32×16 介质填充波导阵列的完整版图与 Gerber4_7_Production Files并配套了 Quartz 波导、开槽波导、方向图与阵列仿真的全套 Python 脚本5_Simulations——天线性能决定雷达的物理极限这块投入不可压缩。功放同理10E 版为 20 km 作用距离单独设计了 16 块 QPA2962 GaN 功放板并配上 Idq 闭环校准与过流/过热保护。时钟同样不妥协AD9523 OCXO 的 3 分钟预热 ADF4382 硬件同步是 120 MHz 中频相干性的根基。电路的物理层也做了对得起频率的投资主板是 10 层混压板Rogers RO4350B 与 FR-4 混合叠层Stack_Hybrid.png10.5 GHz 的信号走线压在低损耗材料上低速与电源层用 FR-4 摊薄成本——这仍是把钱花在刀刃上的同一个原则。那性能边界在哪答案也在仓库的文档里。docs 的 bring-up.html 开诚布公地列出了板子到货前已知风险FT601 时序方法学残留警告、LO 同步与波束控制仍需真机验证、Idq 校准收敛边界未板级证实——所有 RF 行为不能仅凭仿真与日志假设。换句话说这个开源项目的诚实之处在于它把能用逻辑验证的都验证到了位精确把必须用射频仪器验证的明确标注为待办。成本与性能的边界最终由物理世界裁决而不是由 BOM 表裁决。对想动手复现的工程师仓库把门槛降到了最低原理图、PCB、Gerber、BOM、CPL 全部随仓库发布4_7_Production FilesFPGA 有现成的 Vivado TCL 构建脚本build_50t.tcl固件有 20 项回归测试兜底GUI 则有 v7 PyQt6 版本与位精确软件 FPGA 回放链路9_3_GUI。从 ADAR1000 的 128 项相位表到 XC7A50T 的 142 颗 DSP48E1这套系统最值钱的不是任何一颗芯片而是知道每一分钱该花在哪的工程判断——这正是它 1.9 万颗 Star 背后的真正原因。【免费下载链接】PLFM_RADAROpen-source, low-cost 10.5 GHz PLFM phased array RADAR system项目地址: https://gitcode.com/GitHub_Trending/pl/PLFM_RADAR创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

动画无障碍与降级

动画无障碍与降级

7.4 动画无障碍与降级动效设计在提升视觉体验的同时,需要兼顾特殊用户的可访问性需求与交互的功能性本质。无障碍降级机制适配前庭功能障碍用户的动效耐受度,避免动效引发的身体不适;交互状态联动则回归动画的交互本质,让动效服务…

2026/10/16 16:02:32 阅读更多 →
华为《智能世界2030》技术落地指南:从YB数据到万兆接入的工程实践

华为《智能世界2030》技术落地指南:从YB数据到万兆接入的工程实践

简介:本资源为华为公司发布的《智能世界2030》战略研究报告全文PDF,面向ICT从业者、政策研究者、高校师生及数字化转型实践者,系统解答未来十年技术演进如何重塑医、食、住、行、城市、企业、能源与数字可信等八大关键领域。报告融合信息论、…

2026/10/16 16:02:32 阅读更多 →
DeepSeek提示词实战指南:50个模板解锁职场、内容与编程效率

DeepSeek提示词实战指南:50个模板解锁职场、内容与编程效率

简介:覆盖职场、自媒体、电商、编程与个人成长五大场景的50个DeepSeek实用提示词,以单份PDF文档形式提供,文件大小约972KB,适合初次接触DeepSeek或其他自然语言处理工具的入门者,也适合希望用提示词提升写作、运营与开…

2026/10/16 16:01:31 阅读更多 →

最新新闻

赛事大师乒乓球编排软件:安装兼容性、数据导入与赛程生成全攻略

赛事大师乒乓球编排软件:安装兼容性、数据导入与赛程生成全攻略

简介:赛事大师乒乓球编排软件是一款面向体育赛事组织者、裁判组及学校工会的绿色免安装工具,专注解决乒乓球抽签、分组、赛程编排与成绩统计等繁琐环节。它支持赛制规划、两阶段电脑抽签及手工结果导入,能打印单项和团体记分单,自…

2026/10/16 17:26:40 阅读更多 →
VLC播放器下载与使用指南:硬件解码、命令行、哈希校验全攻略

VLC播放器下载与使用指南:硬件解码、命令行、哈希校验全攻略

简介:VLC播放器是一款由VideoLAN团队维护的开源跨平台多媒体播放软件,几乎可以播放常见的音频与视频文件,也支持播放不完整或正在传输的媒体数据。在华为模拟器ENSP的组播网络实验中,VLC常作为核心视频工具使用:它支持…

2026/10/16 17:26:40 阅读更多 →
新媒体全链路运营工具选型常见问题解答

新媒体全链路运营工具选型常见问题解答

搭建新媒体账号矩阵时,很多团队在运营工具选型上存在困惑。从一键分发、账号矩阵管控到私信统一管理,不少运营人员不清楚工具该如何评估、落地。蚁小二作为覆盖全链路的新媒体运营工具,集成了分发、矩阵管控、私信管理能力。下面围绕新媒体工…

2026/10/16 17:24:39 阅读更多 →
MCreator 方块基础类型(Block Base)完全指南:参数禁用机制与默认值约定

MCreator 方块基础类型(Block Base)完全指南:参数禁用机制与默认值约定

低代码代码生成桌面应用游戏开发 【免费下载链接】MCreator MCreator is an open-source software used to make Minecraft Java Edition mods, Minecraft Bedrock Edition Add-Ons, resource packs, and data packs using an intuitive easy-to-learn interface or with an in…

2026/10/16 17:24:39 阅读更多 →
具身智能中的协同机理研究(115):TVA-World与其他架构的十大本质区别

具身智能中的协同机理研究(115):TVA-World与其他架构的十大本质区别

前沿技术探索:TVA智能体(简称TVA) TVA智能体(亦称“AI智能体视觉”)是依托Transformer架构与“因式智能体”理论构建的新型工业视觉系统,也是当前最具代表性的具身视觉技术之一。它有机融合深度强化学习&a…

2026/10/16 17:24:39 阅读更多 →
Python、数据分析、编程都是啥?——写给业务同学的知识百科

Python、数据分析、编程都是啥?——写给业务同学的知识百科

为什么业务也要懂这些 你大概率不是程序员,但你每天都在和“数据”打交道:对账、做表、拉数、写周报、找异常。本文想用大白话把三件事讲清楚——编程是什么、Python 是什么、数据分析又是什么,以及它们怎么帮你把“重复劳动”变成“自动完成…

2026/10/16 17:24:39 阅读更多 →

日新闻

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 0:00:05 阅读更多 →
信号与系统频域分析作业解题指南

信号与系统频域分析作业解题指南

1. 作业背景与核心要求解析信号与系统作为电子信息类专业的核心基础课,其作业设计往往直接关联课程的核心知识框架。2026年春季第六次作业的布置,通常对应着课程进展到频域分析的关键阶段。根据常规教学进度推测,本次作业可能涉及以下核心内容…

2026/10/16 0:00:05 阅读更多 →
Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

1. 从一个"四不像"的练手项目说起如果你已经看完了Django的官方教程前几章,跟着敲完了投票应用,大概会有一种"我好像会了,又好像什么都不会"的割裂感。教程里每个知识点都是拆开的——这一章讲模型,下一章讲视…

2026/10/16 0:00:05 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →