紫光同创PDS软件操作指南如何为FPGA新增自定义Flash型号对于使用紫光同创FPGA进行产品开发的工程师而言将设计固化到外部Flash是一项基础且关键的操作。官方工具通常预置了主流Flash型号的支持但现实开发中我们常常会遇到供应链变化、成本考量或特定性能需求不得不选用一款工具列表里“查无此人”的Flash芯片。这时面对Configuration工具里空空如也的下拉菜单项目进度就可能被卡住。别担心PDS软件其实预留了强大的用户自定义接口让你能够亲手将任何兼容SPI接口的Flash型号“教”给工具认识。本文将深入剖析这一过程不仅提供一步步的操作指南更会解读背后的原理分享实战中积累的技巧和避坑要点让你彻底掌握这项核心技能摆脱对官方支持列表的依赖。1. 理解FPGA配置与Flash固化的核心逻辑在深入操作之前我们有必要厘清几个基本概念这能帮助你在遇到问题时更快地定位根源。FPGA本身是一种基于SRAM的可编程器件断电后配置信息会丢失。因此需要一个非易失性存储器通常是SPI Flash来存储比特流文件。上电时FPGA会主动从Flash中读取配置数据完成自我加载这个过程称为“固化”。紫光同创的PDS软件生态中涉及几个关键角色PDS (Pango Design Suite) 核心的集成开发环境用于完成设计输入、综合、布局布线并最终生成.sbit位流文件。Configuration / Programmer工具 通常内嵌于PDS的Tools菜单下负责与硬件通过JTAG通信执行下载、固化等操作。它是我们进行Flash操作的主界面。.sbit文件 针对特定FPGA型号生成的、可直接通过JTAG下载到FPGA SRAM中运行的位流文件。.sfc文件 由.sbit文件转换而来是专门用于烧录到外部SPI Flash中的文件格式。转换过程会根据目标Flash的容量、页大小、扇区结构等进行重新封装。当你选择一款全新的Flash时Configuration工具之所以不认识它是因为其内部的数据信缺少了该Flash的“身份证信息”和“操作说明书”。我们的任务就是通过“新增用户Flash”功能将这份信息手动补充进去。注意自定义Flash型号的前提是该Flash必须与FPGA的SPI配置接口电气兼容通常是标准的SPI、Dual-SPI或Quad-SPI并且其指令集如读ID、写使能、页编程、扇区擦除等是标准或可被FPGA配置控制器理解的。绝大多数商用SPI NOR Flash都满足此条件。2. 实战一步步新增自定义Flash型号让我们以一个具体案例贯穿始终。假设我们的板卡上使用了芯天下的XT25BF128FSSIGU-W一款128Mb的SPI NOR Flash而它在PDS软件的默认支持列表中并不存在。2.1 前期准备与硬件连接首先确保你的开发环境就绪硬件连接 将板卡通过JTAG下载器如紫光同创官方或兼容的下载器可靠地连接到电脑。给板卡上电。软件启动 打开PDS软件并加载或打开你的FPGA工程。生成比特流 确保你的设计已经成功编译生成了最终的.sbit文件。这一步是后续所有操作的基础。2.2 扫描Flash ID – 获取芯片“身份证”新增Flash的第一步是让工具识别出板上Flash的唯一标识。这个标识通常是一个或多个字节的制造商ID和设备ID。在PDS菜单栏点击Tools-Configuration打开编程器界面。点击Scan Device按钮让工具扫描JTAG链上的器件。成功后会显示FPGA器件例如PANGO A系列。在扫描到的FPGA器件上右键单击在弹出的上下文菜单中选择Scan Outer Flash。此时工具会通过FPGA的JTAG口向挂载在其SPI配置引脚上的Flash芯片发送Read ID指令。如果硬件连接和供电正常Flash会返回其ID。在我们的案例中扫描结果显示ID: 0xb4018。这个十六进制数就是XT25BF128FSSIGU-W的身份证。0xb4通常代表制造商代码芯天下0x4018则定义了具体的设备型号和容量。提示如果Scan Outer Flash失败请优先检查硬件。确认FPGA的SPI配置引脚如CSn、CLK、D0/D1等是否已正确连接到Flash对应管脚电源和地是否稳定以及Flash芯片是否本身已损坏。2.3 在Flash Operator中添加新型号拿到Flash ID后我们就可以正式将其添加到工具的数据库了。在Configuration工具的主菜单栏点击Operations-Flash Operator...。这会弹出一个名为“Flash Operator”的独立对话框它是管理Flash型号库的入口。在弹出的对话框中点击Add或New...按钮具体按钮文字可能因版本略有不同启动添加向导。选择厂商与系列 向导第一步通常会让你选择Flash厂商。如果列表中没有“XT”芯天下你可以选择一个通用的“User Defined”或类似的类别或者选择一家已知的、指令集可能兼容的厂商如Winbond。这一步的选择主要影响厂商名称的归类对实际烧录操作的关键在于后续的参数填写。填写详细信息 这是最核心的一步。你需要根据Flash的数据手册准确填写以下信息参数项说明示例值 (XT25BF128FSSIGU-W)如何获取Flash Name自定义一个易于识别的名称XT25F128自定建议包含容量Manufacturer ID制造商ID (1字节)0xB4从Scan Outer Flash得到的ID中提取或查阅数据手册Device ID设备ID (通常2字节)0x4018同上Size (Mbits)总容量单位兆比特128数据手册Page Size (Bytes)页编程大小256数据手册Sector Size (Kbytes)扇区擦除大小4(4096字节)数据手册Erase Sector Cmd扇区擦除指令0x20数据手册常见为0x20或0xD8Program Page Cmd页编程指令0x02数据手册标准SPI通常为0x02Read Cmd读数据指令0x03数据手册标准SPI通常为0x03Write Enable Cmd写使能指令0x06数据手册通常为0x06Read Status Reg Cmd读状态寄存器指令0x05数据手册通常为0x05Busy Flag Mask状态寄存器中的“忙”标志位掩码0x01数据手册通常Bit 0为WIP位仔细核对所有参数特别是指令码和ID必须与数据手册严格一致。然后点击Next或Finish完成添加。2.4 验证新增结果并转换文件添加完成后需要重启Configuration工具或重新扫描以使新的Flash型号生效。关闭并重新打开Tools - Configuration或再次点击Scan Device。右键FPGA器件再次选择Scan Outer Flash。如果一切配置正确工具将成功识别出你刚刚添加的Flash型号例如XT25F128而不再是“Unsupported”。文件转换 识别出Flash后还不能直接用.sbit文件烧录。需要点击Operations-Convert File...。在转换界面Target Flash选择你刚刚添加的XT25F128。Input File选择你的.sbit文件。工具会自动生成同名的.sfc文件作为输出。点击OK完成转换。# 这个过程在后台的实质是 # 1. 解析.sbit的原始配置数据。 # 2. 根据目标Flash的页大小、扇区结构将数据重新分块、打包。 # 3. 在数据头部或尾部添加必要的控制信息或CRC生成FPGA上电路能直接解析的Flash镜像。3. 执行Flash固化烧录操作成功转换得到.sfc文件后就可以进行最终的固化操作了。在Configuration工具界面确保已扫描到FPGA和外部Flash。右键Outer Flash或列表中对应的Flash型号选择Program...。在弹出的文件选择对话框中定位并选中上一步生成的.sfc文件。点击Open开始烧录。进度条会显示烧录状态期间工具会自动执行擦除、编程、校验等全套动作。当界面提示Program successfully或类似信息时表示固化完成。此时你可以尝试给板卡断电并重新上电。如果FPGA的配置模式设置正确通常为Master SPI模式FPGA将在上电后自动从这块已固化了新程序的Flash中加载配置并开始正常工作。这是检验整个流程是否成功的最终标准。4. 高级技巧与疑难问题排查掌握了基本流程后一些进阶技巧和问题排查方法能让你更游刃有余。4.1 处理非标准指令或Quad SPI Flash越来越多的现代Flash支持Quad SPIQSPI模式以提升读取速度。要启用此功能需要在自定义时进行额外设置指令差异 QSPI Flash的读指令可能不是0x03而是0xEBFast Read Quad Output。需要在Read Cmd字段填写正确的指令。模式字节 一些QSPI操作需要在指令后发送“模式字节”或“哑字节”Dummy Cycles。这部分信息通常需要在PDS工程中于“配置设置”Configuration Settings里进行指定而不是在Flash Operator中。你需要确保FPGA侧的配置控制器模式与Flash的读模式匹配。电压与驱动 确认FPGA的IO Bank电压与Flash的工作电压匹配例如1.8V vs 3.3V。不匹配可能导致通信失败或器件损坏。4.2 常见失败场景与排查清单当你遇到问题时可以按以下顺序排查Scan Outer Flash失败[ ] 硬件连接检查JTAG、电源、SPI线是否连通。[ ] 原理图核对FPGA配置引脚与Flash引脚映射是否正确。[ ] 电源时序某些板卡上Flash的供电可能晚于FPGA。确保在扫描时Flash已处于正常工作电压。[ ] Flash已损坏用编程器单独读取Flash ID验证。新增后仍无法识别[ ]重启工具添加Flash型号后必须重启Configuration工具。[ ]ID错误确认输入的Manufacturer ID和Device ID与Scan结果完全一致包括大小写和0x前缀。[ ]数据库冲突极少数情况下自定义型号可能与内置数据库冲突。尝试换一个独特的Flash Name。烧录.sfc文件失败[ ]指令码错误Erase Sector Cmd,Program Page Cmd是最容易出错的地方。再次核对数据手册。[ ]容量/扇区设置错误Size或Sector Size设置大于实际值会导致工具尝试访问不存在的地址而失败。[ ]Flash写保护 检查Flash的写保护引脚如WP#是否被拉低使能了保护。需要硬件上解除保护。[ ]转换源文件问题 尝试重新生成一次.sbit文件并再次转换。4.3 自定义型号的导出与共享如果你在团队中工作可以将自定义的Flash型号导出分享给其他同事避免重复劳动。在Flash Operator对话框中找到你添加的型号。通常会有Export或Save Library选项将其保存为一个.xml或.lib文件。其他同事可以在他们的电脑上通过Flash Operator对话框的Import功能加载这个文件。这个功能在统一团队开发环境、管理物料清单BOM变更时非常有用。5. CPLD内部Flash固化的简要对比虽然本文重点在FPGA的外部Flash但紫光同创的Compa系列CPLD内置了eFlash其固化流程更为简洁可作为对比参考。CPLD的固化流程核心区别在于无需外部芯片 配置存储器已集成在CPLD内部。无需文件转换 直接对.sbit文件进行操作。关键设置 在PDS的“配置设置”中必须将CPLD的启动模式设置为Master Auto Mode (from embed flash)并重新生成.sbit文件。这个新的比特流文件包含了从内部Flash启动的指令头。烧录操作 在Configuration工具中扫描到CPLD器件后右键其下的Flash节点注意不是Outer Flash选择Program然后选择为内部Flash生成的专用.sbit文件即可。这个过程省去了管理外部器件型号的麻烦但灵活性也相应降低因为存储容量固定且不可更换。整个自定义Flash型号的过程从最初的硬件扫描、ID识别到参数配置、文件转换最后完成烧录验证本质上是一个与工具软件和硬件芯片进行精确对话的过程。每一个参数都对应着一次特定的电气信号交互。我遇到过因为一个指令码填错0x20写成0x02导致擦除失败也遇到过因页大小设置不对而烧录数据错位。最稳妥的方法永远是一手拿着芯片的数据手册一手操作软件逐字逐句地核对。当你成功点亮一块使用冷门Flash的板卡时这种对底层细节的掌控感正是嵌入式开发的乐趣所在。