ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

易灵思T120F324 FPGA烧写指南:JTAG与SPI Flash固化实战

易灵思T120F324 FPGA烧写指南:JTAG与SPI Flash固化实战 1. 为什么易灵思FPGA的烧写值得单独写一篇易灵思Efinix的Trion系列FPGA这两年在国内中小规模逻辑市场里出现频率越来越高尤其是T120F324这颗料324个引脚、120K逻辑单元卡在了一个很舒服的位置——比Lattice ECP5的规模大比Xilinx Artix-7的功耗和成本低做图像采集、工业控制、多路接口桥接都够用。但很多人第一次拿到易灵思的开发板或者自己画的板子时会卡在一个非常基础的问题上程序怎么烧进去。这个问题听起来简单实际踩坑的人非常多。易灵思的烧写链路和Xilinx、Altera那套习惯不太一样它的JTAG配置、SPI Flash固化、外部Host配置模式各有各的讲究Efinity软件里的操作入口也和Vivado、Quartus不同。我见过有人把JTAG线序接反了折腾一下午也见过有人固化了Flash但上电不启动最后发现是配置模式引脚没拉对。T120F324这颗芯片的配置引脚分布和Trion系列其他封装还有细微差别不查手册直接照搬别人的经验很容易翻车。这篇内容面向的是刚接触易灵思FPGA的工程师、学生以及从Xilinx/Altera平台转过来的老手。我会把JTAG在线烧写和SPI Flash固化两条路径都拆开讲清楚以T120F324为例把引脚定义、Efinity软件操作、配置模式设置、常见报错排查都过一遍。你不需要有易灵思的使用经验但最好对FPGA的基本开发流程有概念——知道综合、布局布线、生成比特流大概在干什么就行。注意本文所有操作基于Efinity软件2023.2及以后版本不同版本菜单名称可能略有差异但核心逻辑一致。硬件以T120F324C4为例其他封装型号请对照对应Datasheet的Pinout章节。2. 易灵思的配置架构到底和别家差在哪2.1 Trion系列的配置模式全貌易灵思Trion系列的配置方式比Xilinx 7系列要简单一些没有那么多花哨的模式组合。T120F324支持的主要配置模式有这么几种JTAG模式通过JTAG接口直接向FPGA的配置SRAM写入比特流掉电丢失。适合调试阶段。主动SPI模式Active SPIFPGA作为主机主动从外部SPI Flash读取配置数据。这是产品化最常用的模式。被动SPI模式Passive SPI外部控制器比如MCU作为主机把配置数据推给FPGA。被动并行模式类似被动SPI但走并行总线速度快但引脚多。T120F324的配置模式由几个专用引脚的电平组合决定这些引脚在芯片上电复位期间被采样。具体是哪些引脚、什么组合对应什么模式必须查T120F324的Datasheet。我见过有人直接拿Trion T20的配置引脚定义往T120上套结果模式选错了FPGA根本不启动。2.2 为什么JTAG和Flash固化要分开讲JTAG烧写和Flash固化解决的是两个不同阶段的问题。JTAG烧写是把比特流直接灌进FPGA内部的配置SRAM断电就没了但速度快、不需要额外器件调试阶段改一版烧一版非常方便。Flash固化是把比特流写进板载的SPI FlashFPGA上电后自己从Flash里读配置数据这才是最终产品的工作状态。很多人容易混淆的一点是JTAG烧写成功不代表Flash固化也能成功。JTAG走的是FPGA的JTAG控制器Flash固化走的是FPGA的SPI主控制器加外部Flash芯片两条链路的硬件连接、软件设置、时序要求都不一样。JTAG能通只说明FPGA的JTAG部分和下载器没问题Flash那边可能还有一堆坑等着。2.3 T120F324在配置上的特殊之处T120F324是324引脚的FBGA封装配置相关的引脚分布在Bank 0和Bank 1区域。和Trion系列小封装相比T120F324的配置引脚更完整支持的模式也更多。但这也意味着引脚复用的可能性更多如果你在原理图设计阶段没有把配置引脚预留好后面想改配置模式就很麻烦。具体来说T120F324的配置相关引脚包括引脚名称功能注意事项CRESET_N配置复位低有效需要外部上拉通常10K到VCCCDONE配置完成指示需要外部上拉配置成功后输出高CSI_B片选信号被动模式用主动SPI模式下作为Flash片选输出CSO_N片选输出主动模式用连接Flash的CS引脚DCLK配置时钟主动模式下由FPGA输出DATA0配置数据输入连接Flash的MOSI或DODATA1配置数据输出连接Flash的MISO或DIMODE[2:0]配置模式选择上电时采样决定配置模式这些引脚在T120F324上的具体球号必须查对应版本的Pinout文档。不同批次的芯片可能有细微差异以官方最新Datasheet为准。3. JTAG在线烧写从接线到点灯的全流程3.1 硬件连接JTAG线序和下载器选择易灵思FPGA的JTAG接口是标准的4线制TCK、TMS、TDI、TDO加上可选的TRST_N。T120F324的JTAG引脚是专用引脚不复用为普通IO这一点比某些需要特殊配置才能启用JTAG的芯片要省心。下载器方面易灵思官方有Efinix USB Downloader但价格不便宜。实际上大部分通用的FTDI方案下载器都能用关键是Efinity软件要能识别到。我用的是FT2232H方案的通用下载器在Efinity里选择FTDI JTAG模式就能连上。如果你手头有Xilinx Platform Cable或者Altera USB-Blaster理论上也能用但需要在Efinity里选对下载器类型有时候还要手动指定VID/PID。接线的时候注意几点TCK和TMS需要上拉通常各接一个4.7K到VCC。TDI和TDO是否需要上拉取决于你的下载器驱动能力保险起见也加上。JTAG的GND必须和板子共地这个不用多说但实际调试时因为没共地导致连不上的情况我见过不止一次。如果板子上JTAG接口是排针注意线序。易灵思的JTAG排针定义和Xilinx的14针接口不一样别直接拿Xilinx的转接板往上插。实操心得我习惯在JTAG的TCK线上串一个33欧姆的电阻靠近FPGA端放置。这个电阻可以抑制信号反射尤其是在JTAG线缆较长或者板子上有多个JTAG器件级联的时候能明显提高连接稳定性。这个做法在Xilinx的文档里也有提到易灵思同样适用。3.2 Efinity软件里的JTAG烧写操作打开Efinity工程综合布局布线完成之后生成比特流文件.bit。然后按这个流程走菜单栏选择Tools - Programmer打开编程器窗口。在编程器窗口里点击Add Device选择JTAG模式。如果下载器连接正常Efinity会自动识别到FPGA的IDCODE。T120F324的IDCODE在Datasheet里有识别到之后会显示芯片型号。点击Add File选择你生成的.bit文件。勾选Program和Verify点击Start。如果一切正常进度条会走完然后提示Program Successful。这时候FPGA应该已经按照你的设计在工作了。如果是点灯工程LED应该亮了。但实际往往没那么顺利。最常见的报错是JTAG chain detection failed或者Unable to detect device。遇到这种情况按这个顺序排查先确认下载器驱动装好了。Windows设备管理器里能看到FTDI或者对应的USB设备没有黄色感叹号。确认Efinity里选的下载器类型和实际硬件匹配。FTDI方案选FTDI官方下载器选Efinix。检查JTAG线序。TCK对TCKTMS对TMSTDI对TDO注意是交叉的TDO对TDI。量一下TCK和TMS的上拉电压应该在VCC附近。如果只有1V左右说明上拉电阻没焊或者阻值太大。如果板子上有多个JTAG器件确认JTAG链的拓扑。Efinity支持多器件链但需要在Programmer里正确配置链上器件顺序。3.3 JTAG烧写的局限和适用场景JTAG烧写最大的好处是快改一版烧一版几秒钟的事。但它有两个硬伤一是掉电丢失二是占用JTAG引脚。在产品化阶段JTAG接口通常不会引出来或者引出来也只是为了产线测试。所以JTAG烧写主要用在两个场景一是开发调试阶段频繁修改逻辑二是产线首次烧写Flash通过JTAG把比特流间接写入FlashEfinity支持通过JTAG对Flash进行编程这个后面讲。注意JTAG烧写的时候如果FPGA已经在上电运行某个设计直接烧写新比特流会导致FPGA瞬间进入未定义状态。如果板子上有电机、继电器之类的执行机构务必先断电或者确保安全。我吃过这个亏调试一个电机驱动板的时候直接JTAG烧写电机突然抖了一下差点把联轴器打坏。4. SPI Flash固化让FPGA上电自启动4.1 Flash选型和硬件设计要点T120F324的主动SPI模式支持标准SPI Flash容量根据比特流大小来选。T120F324的比特流大概在4MB到8MB之间取决于设计复杂度。保险起见选16MB128Mbit的Flash比如Winbond W25Q128或者Micron N25Q128这些都是经过验证的型号。硬件连接上主动SPI模式的典型接法是FPGA的CSO_N接Flash的CS#FPGA的DCLK接Flash的CLKFPGA的DATA0接Flash的DIMOSIFPGA的DATA1接Flash的DOMISOFlash的WP#和HOLD#需要上拉到VCC否则Flash可能进入写保护或者保持状态这里有一个容易忽略的点T120F324的DATA0和DATA1在主动SPI模式下是FPGA的输出和输入但在被动模式下方向是反的。如果你原理图设计时没注意把DATA0和DATA1接反了主动模式就读不到数据。我建议在原理图里明确标注每个引脚在目标模式下的方向避免混淆。另外Flash的电源去耦要做好。SPI Flash在读写瞬间电流会有波动如果去耦电容不够可能导致配置失败。通常每个电源引脚配一个0.1uF的陶瓷电容再加一个10uF的钽电容在Flash电源入口。4.2 用Efinity生成Flash烧写文件Efinity不能直接把.bit文件烧进Flash需要先转换成Flash编程文件。具体操作在Efinity工程里确保已经生成了比特流。菜单栏选择Tools - Flash Programming File Generator不同版本可能叫法不同。选择目标Flash型号或者手动输入Flash的容量和页大小。选择输入文件为你的.bit文件。生成输出文件通常是.bin或者.hex格式。这个转换过程实际上是把比特流按照Flash的页大小进行分包并添加必要的头部信息。Efinity会自动处理地址映射你不需要手动计算。实操心得生成Flash文件的时候我习惯把输出格式选成.bin因为后续用其他工具比如Flash烧写器的时候.bin更通用。如果只用Efinity烧写.hex也行。另外生成的.bin文件建议用二进制查看器打开确认一下头部数据正常的比特流头部应该有易灵思的标识如果全是FF或者00说明转换过程有问题。4.3 通过JTAG间接烧写Flash这是最常用的Flash固化方式JTAG连着FPGAFPGA内部有一个SPI控制器Efinity通过JTAG把Flash编程数据传给FPGAFPGA再通过SPI接口写入Flash。操作流程打开Efinity Programmer。在Programmer窗口里选择Add Device - JTAG识别到FPGA。然后选择Add Device - SPI Flash这时候Efinity会通过JTAG去探测Flash的ID。如果Flash ID识别成功会显示Flash型号和容量。添加之前生成的Flash编程文件.bin或.hex。勾选Program和Verify点击Start。烧写时间取决于Flash容量和JTAG速度16MB的Flash大概需要几分钟。烧完之后把板子断电再上电FPGA应该自动从Flash加载配置。如果Flash ID识别失败常见原因有Flash的SPI引脚和FPGA连接有问题用万用表量通断。Flash的WP#或HOLD#没上拉Flash处于保护状态。FPGA的配置模式引脚设置不对没有进入主动SPI模式。Flash芯片本身坏了换一片试试。4.4 配置模式引脚的设置这是Flash固化最容易翻车的地方。T120F324的配置模式由MODE[2:0]引脚在上电复位期间的电平决定。具体什么组合对应主动SPI模式必须查T120F324的Datasheet。我见过有人把MODE引脚悬空结果FPGA进入了一个未定义模式什么都不干。通常的做法是MODE引脚通过电阻上拉或下拉到固定电平不要悬空。具体阻值可以用4.7K或10K。上电时FPGA内部会采样这些引脚然后锁定配置模式。另外CRESET_N引脚需要外部上拉通常10K到VCC。如果CRESET_N被拉低FPGA会一直处于复位状态不启动配置。有些板子设计了复位按键按键按下时拉低CRESET_N松开后FPGA重新配置。这个设计没问题但要确保按键没有卡住或者漏电。CDONE引脚是配置完成指示配置成功后输出高。可以接一个LED来指示配置状态调试的时候很直观。CDONE也需要外部上拉否则可能一直是低。5. 常见问题排查从报错到点灯5.1 JTAG连接类问题速查报错信息可能原因排查方法JTAG chain detection failed下载器驱动未装好检查设备管理器重装驱动Unable to detect deviceJTAG线序接反核对TCK/TMS/TDI/TDOIDCODE mismatch芯片型号选错确认Efinity里选的型号和实际一致JTAG communication errorTCK频率太高降低JTAG时钟频率试试Device locked芯片被加密需要先解锁或者换芯片JTAG时钟频率是一个容易被忽略的点。Efinity默认的JTAG频率可能比较高如果板子走线不好或者线缆太长高速下容易出错。在Programmer设置里可以把JTAG频率降到1MHz甚至更低先保证连通性再逐步提高。5.2 Flash固化类问题速查报错信息可能原因排查方法Flash ID read failedSPI引脚连接问题量通断检查焊接Flash program failedWP#/HOLD#未上拉确认上拉电阻Verify failedFlash质量问题换一片FlashConfig failed after power cycle配置模式引脚错误查Datasheet确认MODE设置CDONE never goes highCRESET_N被拉低检查复位电路Flash固化失败后FPGA上电不启动这时候JTAG通常还是能连上的因为JTAG是独立于配置模式的。所以排查的时候可以先用JTAG确认FPGA还活着然后再查Flash那边的问题。避坑技巧我习惯在板子上把Flash的CS、CLK、DI、DO四个信号各引一个测试点出来。调试的时候用示波器或者逻辑分析仪抓一下上电时SPI总线上的波形能直接看到FPGA有没有发出读命令、Flash有没有回应。这个方法比盲猜高效得多。如果没有逻辑分析仪用示波器看CS和CLK也行至少能确认FPGA在尝试配置。5.3 上电不启动但JTAG能连的排查思路这种情况说明FPGA本身没问题JTAG链路正常问题出在配置模式或者Flash链路上。按这个顺序查确认MODE引脚的电平。用万用表量上电瞬间的电平注意要在上电后几毫秒内量因为FPGA采样后就锁定了。如果万用表反应不够快用示波器抓。确认CRESET_N在上电后能正常拉高。如果一直是低FPGA不会启动配置。确认Flash的电源正常。量Flash的VCC引脚应该在3.3V左右。用示波器抓SPI总线看FPGA有没有发出读命令。如果没有说明FPGA没有进入主动SPI模式回到第1步查MODE引脚。如果FPGA发出了读命令但Flash没回应查Flash的CS和CLK连接以及Flash是否处于保护状态。5.4 关于配置时间的注意事项T120F324从Flash加载配置需要一定时间通常在几十毫秒到几百毫秒之间取决于比特流大小和SPI时钟频率。如果板子上有其他器件依赖FPGA的IO状态需要确保这些器件在FPGA配置完成之前不会误动作。一个常见的做法是用CDONE信号去使能其他器件的电源或者复位。CDONE拉高之前其他器件保持复位状态。这样能避免FPGA配置期间IO不确定导致的问题。6. 一些实战中攒下来的经验6.1 关于Efinity版本的坑Efinity的版本更新比较快不同版本对T120F324的支持程度不一样。我遇到过某个版本生成的比特流在JTAG烧写时正常但转成Flash文件后烧进去不启动换了一个版本就好了。所以如果你遇到莫名其妙的问题先确认Efinity版本是不是最新的稳定版。易灵思官网会标注每个版本支持的器件列表下载之前看一眼。另外Efinity的工程文件在不同版本之间不完全兼容。如果你从别人那里拿到的工程最好问清楚用的哪个版本避免打开后各种报错。6.2 JTAG和Flash共存时的注意事项有些板子设计的时候JTAG接口和Flash的SPI引脚是复用的。比如FPGA的某个IO在JTAG模式下是TDI在主动SPI模式下是DATA0。这种复用设计在T120F324上不常见因为T120F324的JTAG引脚是专用的但SPI引脚可能和其他功能复用。如果你的设计里SPI引脚复用了要确保在配置阶段这些引脚不会被其他逻辑驱动。FPGA在配置期间普通IO都是高阻态所以一般没问题。但如果板子上有外部器件驱动这些引脚就可能冲突。6.3 批量生产时的烧写方案小批量的时候用JTAG逐个烧写还能接受但批量生产时效率太低。常见的做法是用离线烧写器先把比特流烧进Flash然后再把Flash焊到板子上。这样产线上只需要焊接不需要烧写。离线烧写器选择很多国产的通用编程器基本都支持SPI Flash。关键是烧写文件要正确用Efinity生成的.bin文件直接烧就行。烧完之后最好抽检几片焊到板子上确认能启动。如果Flash是焊在板子上的也可以用产线夹具通过JTAG批量烧写。Efinity支持命令行模式可以写脚本自动化烧写流程。具体命令在Efinity的安装目录下有文档核心就是调用programmer的可执行文件传入工程文件和烧写参数。6.4 关于T120F324的散热和电源虽然和烧写不直接相关但T120F324在配置期间和正常工作时对电源的要求比较高。核心电压和IO电压的纹波如果太大可能导致配置失败或者运行不稳定。我在一个项目里遇到过配置成功率只有80%的情况后来发现是核心电压的纹波超过了100mV换了一个低ESR的电容就好了。所以如果你遇到偶发性的配置失败除了查配置链路也量一下电源纹波。尤其是核心电压T120F324的核心电压比较低对纹波更敏感。6.5 一个容易被忽略的细节Flash的扇区保护有些SPI Flash出厂时默认开启了扇区保护或者之前被其他程序写入了保护位。这种情况下Efinity烧写时会报Flash program failed或者Verify failed。解决方法是用Flash的专用命令解除保护或者用编程器全片擦除一次。Efinity的Programmer里通常有擦除选项烧写前先执行一次全片擦除。如果擦除也失败就得用外部编程器处理了。我建议在原理图设计时把Flash的WP#和HOLD#引出来通过跳线或者测试点控制这样调试的时候灵活很多。7. 从JTAG到Flash的完整检查清单最后整理一个实操检查清单从拿到板子到Flash启动按顺序过一遍确认Efinity版本支持T120F324工程器件型号选对。检查JTAG连接线序、上拉、共地。JTAG烧写测试比特流确认FPGA能工作。确认配置模式引脚MODE[2:0]设置正确对应主动SPI模式。确认CRESET_N和CDONE有上拉。确认Flash的WP#和HOLD#上拉。生成Flash编程文件确认文件头部数据正常。通过JTAG烧写Flash先擦除再编程再校验。断电重启观察CDONE是否拉高。如果CDONE不拉高用示波器抓SPI总线按第5章的排查思路走。这个清单看着简单但每一步都有细节。我自己的习惯是在原理图设计阶段就把这些检查点标注出来PCB打样回来之后先量一遍关键信号的电平再上电调试。这样能提前发现大部分硬件问题比软件层面折腾半天要高效得多。易灵思的FPGA在性价比上确实有优势但工具链和生态还在完善中烧写这块的文档不如Xilinx那么详尽。希望这篇内容能帮你少走点弯路。如果你在T120F324上遇到了其他烧写相关的问题欢迎一起交流。
返回列表