ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

FPGA从JTAG到AS模式:EP4CE10E22C8N配置与排查实战

2026/10/5 1:20:54 拓冰建站 浏览量
FPGA从JTAG到AS模式:EP4CE10E22C8N配置与排查实战 EP4CE10E22C8N 这块芯片玩过 Cyclone IV 的人应该不陌生10K 逻辑单元144 个引脚做工业控制、信号处理、电机驱动这些场景非常常见。但很多刚接触 FPGA 的朋友卡住的第一关往往不是 Verilog 语法而是这块板子怎么“活起来”——明明 JTAG 下载 .sof 能跑拔了电再上电就全灭想做成 AS 模式自动加载又被 MSEL 拨码开关、nCONFIG、DATA0 这些名词搞得一头雾水。这篇就把 EP4CE10E22C8N 从 JTAG 到 AS 模式的完整配置链路讲透重点拆解 MSEL、nCONFIG、DATA0 这几个关键引脚的实际用法配合我踩过的坑和排查思路争取让你看完就能自己设计配置电路、独立部署固件烧录流程。1. EP4CE10E22C8N的启动链路为什么FPGA要“外挂”一颗配置芯片1.1 SRAM工艺决定了“每次上电都要重新加载”先纠正一个最普遍的认知偏差很多人拿到 EP4CE10E22C8N 之后以为它跟 STM32 一样程序烧进去就永久保存了。实际完全不是这样。Cyclone IV 系列是基于 SRAM 工艺的 FPGA片上没有非易失存储器每次掉电后逻辑配置信息全部丢失上电时必须从外部重新加载一次配置数据。这就像一个没有硬盘的电脑开机必须要从 U 盘或网络启动盘引导系统。所以你会看到一块完整的 FPGA 开发板上除了 EP4CE10E22C8N 之外还躺着一颗 EPCS16 或 W25Q16 之类的小芯片。这颗 SPI Flash 就是 FPGA 的“引导盘”专门用来存放配置位流bitstream。EP4CE10 的配置位流大小通常在一两兆比特这个量级EPCS4 勉强能装但余量很小所以绝大多数板子选用 EPCS16容量充足价格也没差多少。1.2 三种常用配置途径JTAG、AS、PSCyclone IV 支持的配置方式有好几种但实际工程中你真正会高频用到的就三个JTAG、AS、PS。JTAG模式调试期最常用。通过 USB-Blaster 下载器直接访问 FPGA 内部的 SRAM 配置单元配置数据进 RAM掉电即失。适合开发阶段反复烧版本调试。AS模式Active Serial主动串行上电后由 FPGA 主动从外部 SPI Flash 读取配置数据一上电就自动加载适合最终产品部署。PS模式Passive Serial被动串行由外部单片机、CPU 或 CPLD 充当主机把配置数据主动“喂”给 FPGA适合嵌入式系统里面由上位处理器统一管理多颗 FPGA 的场景。这三种模式之间并不是互斥关系尤其是 JTAG它几乎在任何配置模式下都能使用优先级最高。这也是很多板子把 JTAG 和 AS 设计成共存的原因。提示EP4CE10E22C8N 引脚上的 MSEL 组合决定的是 AS/PS 等非 JTAG 方式的启动路径JTAG 不受 MSEL 控制。所以哪怕你把 MSEL 拨到 PS 模式JTAG 照样能下载只是掉电后 FPGA 不会自动从 EPCS 加载而已。1.3 配置数据的“目的地”决定了你的文件格式很多新手分不清 .sof 和 .jic 的区别其实只要抓住一点配置数据到底要进去哪里。.sofSRAM Object File目标器件是 FPGA 内部的 SRAMJTAG 下载后立即可跑掉电丢失。.jicJTAG Indirect Configuration File目标器件是外部 EPCS Flash通过 JTAG 链路“绕道”FPGA再由 FPGA 充当烧录器把数据写进 EPCS上电后自动加载。.pofProgrammer Object File目标器件也是 EPCS Flash通常在 AS 模式下由 USB-Blaster 直接通过 AS 接口烧写。如果你拿到一个开发板第一次用 Quartus 生成 .sof 下载跑了一会儿发现“为什么拔电再上电程序没了”很正常因为你根本没碰 AS 模式。要让 EP4CE10E22C8N 上电自动跑你写的逻辑必须把配置数据落到外部 Flash 里。2. MSEL[2:0]三根小引脚决定板子从哪个通道醒来2.1 MSEL组合的底层逻辑MSEL 是 Mode Select 的缩写固定在 FPGA 芯片上的三个专用引脚编号为 MSEL[2:0]。你别看它就是三根电平线组合起来却能决定 FPGA 上电之后从哪条路径、以什么时序去加载配置。EP4CE10E22C8N 所属的 Cyclone IV E 系列常用配置模式对应的 MSEL 设置大概是下面这个样子配置模式MSEL[2]MSEL[1]MSEL[0]说明AS 模式010FPGA 主动读取 EPCS最常用PS 模式000外部主机主动写入用于 CPU 引导JTAG 模式XXX不受 MSEL 约束随时可用注意我给出的是实际工程中的常见取值。Cyclone IV 手册里有更完整的表格还会根据 VCCIO 电压、是否启用压缩配置等因素做细分比如高速 AS 模式、FPP 模式等。做产品设计时一定要翻阅对应器件型号的手册确认不要凭一张速查表走天下。以 AS 模式为例MSEL[2:0] 010意味着 FPGA 上电后会把 nCSO、DCLK、ASDO 这些引脚切到与 EPCS 通信的状态主动发起一次 SPI 读操作把配置数据从 Flash 里拉出来。2.2 PCB上MSEL如何处理直接绑电平还是拨码开关MSEL 引脚内部有弱下拉但外部必须明确处理不能悬空。处理方式主要有两种固定电平量产产品确定只用 AS 模式后直接把 MSEL[2] 接 GND、MSEL[1] 接 VCCIO3.3V、MSEL[0] 接 GND。简单可靠少两个拨码开关也少了误拨风险。拨码开关或跳线开发板常用。方便在 AS、PS、JTAG 之间切换调试但问题也随之而来——很多板子出厂默认拨到 JTAG 模式你直接烧 .jic 永远写不进 EPCS因为 FPGA 根本不会去操作那条 Flash 链路。我之前修过一块客户板子现象是“明明 .jic 烧录提示成功但重新上电就是不起来”。排查到最后发现是 MSEL 拨码开关接触不良MSEL[1] 在 GND 和 VCCIO 之间反复横跳FPGA 每次上电进入的模式完全是随机的。从那以后我在自己的板子上一律默认用固定电平只有调试阶段才允许拨码开关存在。2.3 MSEL 一定不能犯的错MSEL 的处理有几个隐蔽点容易在抄原理图时踩中MSEL 引脚的参考电压是 VCCIO 所在 bank 的电压不要接到 5V 上。Cyclone IV 的配置引脚基本都是 3.3V 电平接 5V 轻则配置不稳定重则打坏引脚。如果 MSEL 用拨码开关开关的走线尽量短尽量靠近 FPGA 引脚避免太长的走线引入噪声。尤其是 DCLK 频率比较高时MSEL 上的毛刺可能导致 FPGA 误判模式。不要在 MSEL 上串大阻值电阻再接电平直接接或加 0 欧电阻即可。串了 10k 电阻再接 3.3V 虽然也能拉高但抗干扰能力明显下降。3. nCONFIG与两位“状态哨兵”配置时序里的握手细节3.1 三个引脚的分工除了 MSEL配置电路里还有一组“状态/控制”引脚很多新手容易忽略但它们才是配置流程能正常跑通的关键nCONFIG配置控制输入。低电平时强制 FPGA 复位配置状态机所有配置相关寄存器清零拉高后 FPGA 才开始重新配置。你可以把它理解成 FPGA 配置模块的“复位按键”。nSTATUS开漏输出同时也能被外部拉低。上电后 FPGA 会先把它拉低一段时间然后释放拉高表示“我准备好了可以开始接收配置数据”。如果在配置过程中发生错误FPGA 会把 nSTATUS 拉低向外界报错。CONF_DONE开漏输出。配置数据接收完成且校验通过后FPGA 释放该引脚配合外部上拉电阻拉高表示配置成功。如果这个引脚一直是低说明配置过程还没完成或者已经失败。这三个引脚全部需要外部上拉电阻典型值是 10kΩ很多开发板习惯用 4.7kΩ也能正常工作。上拉电阻接 VCCIO 的 3.3V 电平域不是接 5V。3.2 从 nCONFIG 拉高到 CONF_DONE 变高的完整过程咱们以 AS 模式为例梳理一版完整的上电配置时序理解了这个时序很多配置故障就能自己判断板上电FPGA 在 nCONFIG 为低电平时保持复位状态nSTATUS 和 CONF_DONE 都被拉低。外部电路或 FPGA 内部 POR 逻辑释放 nCONFIGFPGA 检测到 nCONFIG 上升沿后开始初始化配置引擎。nSTATUS 释放被上拉电阻拉高表示 FPGA 可以接受配置数据。AS 模式下FPGA 通过 DCLK 产生时钟拉低 nCSO 选中 EPCS通过 DATA0 线逐个比特读取配置数据。数据接收完成后FPGA 对配置数据进行 CRC/ID 校验。校验通过CONF_DONE 释放拉高。FPGA 进入初始化阶段IO 状态按照设置切换内部 RAM 初始化最后进入用户模式。这个过程看着简单但每一步都有可能出问题。比如第 2 步 nCONFIG 如果被一个 RC 延时电路拉得太慢上升沿不够陡峭FPGA 就可能无法正常启动配置。比如第 4 步 DATA0 线上的信号质量太差EMI 干扰一大配置数据就会出错表现出来的就是 nSTATUS 中途拉低、CONF_DONE 永远起不来。3.3 nCONFIG 被忽略导致的重配置失效有一个典型坑很多人画原理图时觉得 nCONFIG 反正内部有弱上拉就直接悬空。Quartus 可能会告诉你“nCONFIG is not connected”但也不报编译错误于是板子在某些温度、某些供电条件下就是偶尔起不来。我测试过一块板子上电 10 次有 3 次配置失败用示波器抓 nCONFIG 波形发现上电瞬间有一定概率出现 1V 左右的毛刺上升沿没有干净地利落起来。后来我在 nCONFIG 和 3.3V 之间挂了一个 10kΩ 上拉电阻并在 nCONFIG 对地加了一个 1nF 电容滤毛刺问题就消失了。所以无论从抗干扰还是从可维护性角度nCONFIG 都建议显式上拉不要依赖内部弱上拉。另外如果你的系统里有一块外部 CPU 或 CPLD 想控制 FPGA 重配置nCONFIG 就是最直接的入口——拉低 2μs 以上再拉高FPGA 就会重新走一遍配置流程。这个特性在远程升级场景里很有用配合 AS 模式先更新 Flash 内容、再触发一次重配置就能实现“远程加载新固件”。4. JTAG模式调试器的入口也是踩坑重灾区4.1 四根线怎么接为什么能“抢”到配置权JTAG 模式只需要四根信号线TCK、TMS、TDI、TDO加上下载器的 GND 和 VCC 参考。接口经过 USB-Blaster 连到 PC 的 Quartus Programmer就能完成 .sof 的在线下载。JTAG 之所以优先级最高是因为 FPGA 内部有独立的 JTAG TAP 控制器它不受 MSEL 状态和配置状态机的控制。哪怕你的 FPGA 因为配置失败卡死了只要 JTAG TAP 还活着就能通过 JTAG 指令把配置数据强行塞进去。这也是很多“顺手救砖”操作的基础。典型接法如下TCK → TCKTMS → TMSTDI → TDITDO → TDOGND → GND注意EP4CE10E22C8N 的 JTAG 引脚是专用引脚不像 STM32 那样可以把 JTAG 引脚复用成 GPIO。FPGA 上 TDI、TDO、TMS、TCK 没有任何第二功能至少 Cyclone IV 上是这样所以你不必纠结“要不要禁用 JTAG 释放引脚”这跟单片机的思路完全不同。4.2 多器件菊花链与下载器连接如果你一块板上同时挂了 CPLD 和 FPGA或者多颗 FPGA 共用一条 JTAG 链路就要注意菊花链的连接顺序。规则很简单上一颗器件的 TDO 接到下一颗器件的 TDI最后一颗器件的 TDO 回到下载器TMS 和 TCK 并联到所有器件。Quartus Programmer 会自动识别链路上的所有器件前提是每个器件的 IDCODE 都能被正常读到。如果链路上某个器件 TDO 无输出整个链路都会断开表现为“无法访问 JTAG 链”。USB-Blaster 的 10 针接口除了四根 JTAG 信号和 GND还有一个 VCC 引脚用于检测目标板电平。这个 VCC 不是给板子供电的只是下载器用来做电平参考。有的下载器对目标板电压很敏感如果板子电压不标准比如 2.5V 的 JTAG 电平域可能识别不到器件。4.3 排查“cant access JTAG chain”的完整思路报错Error (209040): Cant access JTAG chain是新手遇到最多的 JTAG 问题。我的排查顺序已经固化成肌肉记忆了先用下载器自检。USB-Blaster 插上电脑设备管理器里能看到 Altera USB-Blaster 端口。如果驱动感叹号先解决驱动。检查目标板供电。JTAG 链上的器件没上电就是一堆死硅片TDO 这种开漏输出根本没有电平。用万用表量 FPGA 核心供电和 IO 供电确认 VCCINT 和 VCCIO 都在正常范围。量 JTAG 引脚波形。TCK 在点击 Autodetect 的瞬间应该有方波产生TMS 应该有电平跳变。如果 TCK 完全没波形说明连接线或板上的焊点有问题。检查 nCONFIG 状态。虽然 JTAG 不受 MSEL 控制但如果 nCONFIG 一直处于低电平TAP 控制器虽然存在部分 Quartus 操作仍可能表现怪异。最直接的办法是手动把 nCONFIG 拉高再试。检查链路上有没有其他器件干扰。如果 TDI 在中间某个器件中断TDO 永远回不来。可以单点测试把 USB-Blaster 的 TDI 直接接到目标 FPGA 的 TDITDO 单独接回下载器排除其他器件。这套流程走下来绝大多数 209040 都能定位到“连接/供电/电平”三个环节之一而不是程序本身。5. AS模式的数据通道DATA0、DCLK、nCSO、ASDO四条线的实际接法5.1 一张表理清 FPGA 与 EPCS 的连线AS 模式之所以叫“主动串行”是因为整个数据读取过程由 FPGA 主导。FPGA 充当 SPI 主机EPCS 充当 SPI 从机。两者之间的四条线很容易被记住FPGA 引脚EPCS 引脚信号方向作用DCLKDCLKFPGA → EPCSSPI 时钟nCSOCS#FPGA → EPCS片选低有效ASDOASDIFPGA → EPCSFPGA 向 Flash 发送命令/地址DATA0DATAEPCS → FPGAFlash 向 FPGA 返回配置数据这里最容易被绕晕的就是 DATA0 和 ASDO 的方向。核心记忆点是配置过程中绝大多数数据是从 EPCS 流到 FPGA 的所以“数据线”DATA0 的方向是从 EPCS 到 FPGA而 FPGA 要先向 EPCS 发送读命令和地址所以还需要一条“从 FPGA 到 EPCS”的线这条线叫 ASDO对应 EPCS 的 ASDI。你可以把 EPCS 当成一个 SPI Nor FlashASDO 就是 MOSIDATA0 就是 MISODCLK 是 SCKnCSO 是 CS#。这样一下子就好理解多了。5.2 为什么 AS 模式下也要给 EPCS 留一个 JTAG 接口实际产品里固件升级最常见的路径是通过 JTAG 接口把 .jic 文件烧进 EPCS。你可能会问EPCS 本身就是 SPI Flash直接用 SPI 编程器烧不行吗当然行但问题是 EPCS 通常已经焊死在板子上专门引一个 SPI 编程接口不如复用 JTAG 来得省事。用 .jic 烧录 EPCS 的完整流程是这样的在 Quartus 里用.sof完成一次 JTAG 下载把 FPGA 配置成一个“桥接器”。这个桥接器会占用 FPGA 的 AS 引脚通过 ASDO/DCLK/nCSO/DATA0 与 EPCS 通信。Quartus Programmer 把 .jic 里的 Flash 数据按地址依次发到 JTAG TDIFPGA 桥接器再把数据转换成 SPI 命令通过 ASDO 写进 EPCS。烧写完成后断开 JTAG重新上电MSEL 设为 AS 模式FPGA 就从 EPCS 自动加载固件了。这个过程听起来有点绕但实际在 Quartus 里操作只需要两个动作生成 .jic 文件然后在 Programmer 里选中 .jic 并点 Start。不需要额外硬件这也是 AS 模式最讨喜的地方。5.3 生成 .jic 的具体步骤与参数在 Quartus II 或 Quartus Prime 里操作路径如下菜单 File - Convert Programming Files。Programming file type 选择JTAG Indirect Configuration File (.jic)。Configuration device 选择你板子上的 EPCS 型号比如 EPCS16。Mode 选择Active Serial如果你用的是常规 AS 配置。在 Input files to convert 区域选择 Flash Loader并勾选目标器件EP4CE10E22C8N。添加 SOF Data选中你已经编译好的.sof文件。点击 Generate生成 .jic 文件。打开 Programmer添加 .jic 文件勾选 Program/ConfigureStart。这里有个小细节Flash Loader 列表里选择的目标器件型号要和实际 FPGA 一致。如果型号选错桥接器可能无法正确驱动 AS 引脚烧录会中途失败。我见过有人把 Cyclone IV 选成 Cyclone III烧录 20% 左右就报错就是这个原因。5.4 AS模式烧录的具体波形为什么慢但稳AS 模式烧录 EPCS 的时钟频率是 FPGA 配置时的 DCLKCyclone IV 的 AS 配置时钟通常可以到几十 MHz但实际烧录过程中Flash 的擦写本身需要时间所以整体速度不会很快。一颗 EPCS16 全片烧录加校验大概需要几十秒到一分钟视 USB-Blaster 链路质量而定。6. 从JTAG到AS模式工程中的切换流程与注意事项6.1 原理图上如何做到“JTAG与AS共存”一块靠谱的 EP4CE10E22C8N 板子原理图上一定同时有 JTAG 和 EPCS 两套配置电路。它们之间没有冲突因为 JTAG 引脚和 AS 引脚在物理上是分开的JTAG 侧TDI、TDO、TMS、TCK 连接到 10 针 JTAG 座。AS 侧DCLK、nCSO、ASDO、DATA0 连接到 EPCS16EPCS16 的地址和命令线由 FPGA 控制。有一种常见误解是“JTAG 和 AS 要切换使用必须用跳线选择”其实芯片内部已经做好了仲裁。只要 EPCS 的数据线、时钟线没有被外部其他 SPI 主机占用就可以同时接。唯一的注意点是不要让外部 CPU 通过同样的 SPI 口同时操作 EPCS否则双主机冲突FPGA 或 CPU 都可能拉死总线。6.2 项目里第一次切换到 AS 模式的完整操作清单如果你的板子已经焊好、JTAG 能正常下载 .sof现在要切换到 AS 模式我建议按这个顺序操作确认 MSEL 设置为 ASMSEL[2:0]010。编译工程生成 .sof确保功能正常。用 Quartus 的 Convert Programming Files 生成 .jic 文件Configuration device 选择 EPCS16。打开 Programmer从 JTAG 模式添加 .jic勾选 Program/Configure烧录。烧录完成后拔掉下载器板子重新上电。观察 FPGA 是否自动加载。如果 CONF_DONE 拉高、用户逻辑正常跑起来说明 AS 模式配置成功。如果第 5 步上电后 CONF_DONE 一直为低多半问题出在 MSEL 或 EPCS 电路。用示波器抓 DCLK看有没有时钟输出有的话说明 FPGA 确实在尝试读 Flash没有的话先查 MSEL 和 nCONFIG。6.3 升级固件时的“双保险”策略做过商业产品的朋友应该深有体会直接用 .jic 烧录 EPCS 最怕烧到一半掉电Flash 里残留一个半截镜像FPGA 上电后加载失败板子直接变砖。为了避免这种情况有些设计会把配置镜像做成 A/B 双备份。A 区放稳定的出厂固件B 区放新升级固件。FPGA 上电先从 A 区加载如果校验失败再从 B 区加载。这个功能在 Cyclone IV 的 AS 模式里可以通过配置分区和远程更新逻辑配合实现操作比较复杂但对于批量部署的设备非常值得。如果你的产品暂时没做双备份至少要在烧录 .jic 之前先把可靠的低版本 .sof 通过 JTAG 下载一遍保证 Flash Loader 桥接器能正常工作。这样即使 .jic 烧录中断也不会把 Flash Loader 级别的功能弄坏。6.4 关于“配置完成之后 AS 引脚能不能复用”FPGA 配置完成后AS 模式下的 DCLK、nCSO、ASDO、DATA0 这些引脚会释放变成普通 IO除非你在工程里把它们约束使用了。如果不使用它们默认处于三态。这里有个很多人忽略的问题Cyclone IV 在配置完成后所有未使用的 IO 默认会表现为高阻而不是自动拉低。如果你的板子上 DCLK 之外又加了一颗外部芯片复用同一引脚可能因为 FPGA 三态输出而出现不定电平导致外部芯片误判。所以画原理图时AS 信号线尽量独立不要与其他外设共享。7. 两个高频报错的现场排查209040与209053附一串其他问题7.1 Error (209040)Cant access JTAG chain这个报错上面已经讲了不少这里再补充一个容易忽略的高频原因USB-Blaster 和目标板之间的线缆太长、太细。JTAG 的 TCK 频率如果跑得比较高长线缆的寄生电容和串扰会直接把信号毁掉。我之前用一条 30cm 的杜邦线连接 JTAG下载 .sof 时一会儿成功一会儿失败换成一截 10cm 的短线后稳定了。排查 209040 时还可以看一下 Quartus Programmer 的 Hardware Setup确保当前选中了正确的下载器实例。电脑上如果同时装了 Quartus 和第三方 FPGA 工具链下载器驱动可能会被抢占Programmer 里就找不到设备。7.2 Error (209053)Unexpected errorError (209053): Unexpected error in ...这个报错比 209040 模糊得多它经常出现在 AS 模式烧录或擦除 EPCS 的过程中而不是普通的 JTAG 下载 .sof 时。我遇到过一个很典型的案例烧录 .jic 到 EPCS16每次都在 60% 左右报 209053。排查过程如下先怀疑是 Quartus 版本的问题换了个版本依旧。再怀疑 EPCS16 是假片换过两颗依旧。用示波器抓 ASDO 和 DATA0 波形发现 DATA0 上的回答信号幅度偏低只有 1.8V 左右而 FPGA 的 VCCIO 是 3.3V。最后查到原因是 EPCS16 的 VCC 供电走线太细过孔压降大Flash 在写操作时需要大电流的时候供电被拉低导致内部电荷泵工作不正常。解决办法很简单把 EPCS 的供电走线加粗并在 Flash 电源引脚旁边多放几颗 0.1μF 和 1μF 电容。从那以后我再也没见过这个 209053。所以遇到 209053优先怀疑三个方向EPCS 供电是否干净、AS 四线连接是否可靠、EPCS 型号是否与 .jic 配置匹配。7.3 常见错误速查表常见现象可能原因优先排查动作JTAG Autodetect 找不到器件供电、接线、驱动、nCONFIG 拉低量电压、量 TCK/TMS 波形、拉高 nCONFIG.sof 能下载但掉电丢失正常现象未配置 AS 启动用 .jic 烧录 EPCS.jic 烧录到一半失败EPCS 供电不足、Flash 型号错、Flash Loader 选错示波器抓供电、核对型号上电后 CONF_DONE 一直为低MSEL 设置错误、EPCS 无有效镜像、nSTATUS 被拉低检查 MSEL 电平、抓 DCLK 波形板子偶尔配置失败温度高时更明显时序余量不足、上拉电阻偏大、电源纹波大nCONFIG 滤波、增大上拉驱动力、优化电源多器件 JTAG 链识别不全菊花链中断、TDO 输出电平异常从链首逐个测量 TDO7.4 为什么有时候“按复位键能恢复”最后分享一个非常经典的现象板子配置失败但按一下复位键就能恢复。很多人觉得不可思议其实原因很简单复位键通常连着 nCONFIG按下时把 nCONFIG 拉低FPGA 退出错误状态并复位松开后重新执行配置流程。如果 EPCS 里镜像没问题只是上电瞬间电源建立时序太差导致第一次配置失败那么手动复位一次就能成功加载。这个现象本身也是配置时序余量不足的信号。治本的办法是优化电源上电时序或者给 nCONFIG 加一个适当的上电延时电路让 FPGA 在电源稳定后再开始配置。治标的办法就是你现在这个“按复位键”的操作修产品的时候千万别只停留在治标层面。最后再分享一个我画板子时的“土办法”以后只要画 EP4CE10E22C8N 的板子我会在原理图第一页放一张“配置电路总览图”把 MSEL、nCONFIG、nSTATUS、CONF_DONE、JTAG 四线、AS 四线、EPCS 供电全画在同一页用不同颜色的网络标号分组。虽然有点占地方但每次调试时扫一眼就能定位问题不用翻十几页原理图找信号。这个习惯帮我省下了大量查线的时间也建议入坑 FPGA 的朋友试试看。