FPGA 中 STARTUPE2 原语的使用和含义
STARTUPE2 是 **Xilinx FPGA 芯片内部已经做好的一个专用硬件结构/原语**不是用 LUT 搭出来的普通逻辑。可以理解成用户逻辑 fabric 访问 FPGA 配置启动模块的一个“接口壳子”## 1. 它对应芯片内部什么东西Xilinx FPGA 内部有一块专门负责配置和启动的硬件通常叫Configuration / Startup block配置启动模块它负责- 上电加载 bitstream- 控制 DONE 引脚- 控制 CCLK 配置时钟- 处理全局复位 GSR- 处理全局三态 GTS- 配置完成标志 EOS- 和配置 Flash/JTAG/SelectMAP 等接口相关STARTUPE2 就是用户逻辑访问这块内部启动模块的入口。## 2. 它不是 RAM也不是 PLL也不是一般 IP它不是BRAMDSPPLL/MMCM普通逻辑模块它更像一个芯片内部的 **专用控制块接口**。类似这种概念STARTUPE2 ---- FPGA 内部 configuration/startup hard block你实例化它以后综合实现工具不会把它当普通 Verilog 逻辑实现而是映射到芯片里已有的 startup 硬件资源。## 3. 为什么要有它因为有些配置相关引脚/信号不是普通 IO用户逻辑不能直接访问。比如配置 Flash 的时钟 CCLK。在 Xilinx 7 系列里上电配置时FPGA 内部配置模块驱动 CCLK配置完成后如果用户逻辑还想访问同一个 QSPI/SPI Flash普通逻辑没法直接驱动 CCLK。 这句话里的 SPI Flash 指的是 FPGA 上电时用来加载 bitstream 的那颗外部配置 Flash 。所以需要通过STARTUPE2.USRCCLKO 把用户逻辑的 qspi_clk 接到 FPGA 的 CCLK 专用路径上。补充 为什么普通逻辑不能直接驱动 CCLK因为 CCLK 不是普通用户 IO。它是 FPGA 配置专用时钟管脚。上电配置阶段FPGA 内部配置模块驱动 CCLK不是你的 Verilog 逻辑驱动它因为这时用户逻辑还没运行。配置完成以后你的用户逻辑开始运行。如果你想继续访问这颗配置 Flash比如读取参数、升级程序、存储数据就需要自己产生 SPI 时钟。但是这个 SPI 时钟脚复用了配置管脚CCLK普通逻辑不能像普通 IO 一样直接assign CCLK spi_clk;所以 Xilinx 提供 STARTUPE2让你通过.USRCCLKO(qspi_clk2ip)把用户逻辑里的 SPI/QSPI 时钟送到 CCLK 管脚。端口名方向当前连接作用说明这段代码里的含义CFGCLK输出CFGCLKConfiguration main clock output配置主时钟输出把 FPGA 配置逻辑内部的配置时钟引出来给用户逻辑观察或使用一般很少用CFGMCLK输出CFGMCLKConfiguration internal oscillator clock output配置内部振荡器时钟输出FPGA 内部配置振荡器时钟输出可作为低速参考时钟使用但一般不用于主逻辑EOS输出EOSEnd Of Startup启动结束标志EOS1 表示 FPGA 配置完成用户逻辑已经进入正常工作阶段PREQ输出PREQPROGRAM request重配置请求信号输出和用户触发重新配置或 PROGRAM 相关这里只是引出没有看到实际使用CLK输入1b0User startup clock input用户启动时钟输入当前没用固定接 0GSR输入1b0Global Set/Reset全局置位/复位控制当前不用全局复位控制固定接 0GTS输入1b0Global 3-State全局三态控制当前不用全局三态控制固定接 0KEYCLEARB输入1b0清除 BBRAM 中 AES 解密密钥的控制信号当前不用加密 key 清除功能固定接 0PACK输入1b0PROGRAM acknowledgePROGRAM 请求应答当前不处理 PROGRAM 请求固定接 0USRCCLKO输入qspi_clk2ipUser CCLK output用户提供给 CCLK 的时钟最关键端口把用户逻辑里的 qspi_clk2ip 送到配置 CCLK 路径用于访问配置 SPI/QSPI FlashUSRCCLKTS输入1b0User CCLK tri-state enable用户 CCLK 三态控制0 表示使能输出允许 qspi_clk2ip 驱动 CCLK1 表示三态不驱动USRDONEO输入1b1User DONE output用户控制 DONE 引脚输出值当前给 1表示不主动拉低 DONEUSRDONETS输入1b1User DONE tri-state enableDONE 引脚三态控制1 表示用户逻辑不驱动 DONE由器件配置逻辑控制或释放端口重点说明USRCCLKO把用户 QSPI/SPI 时钟送到 FPGA 配置 CCLK 管脚USRCCLKTS控制 USRCCLKO 是否真正驱动 CCLK0 表示使能1 表示三态EOS判断 FPGA 是否配置完成CFGMCLK内部配置振荡器时钟输出GSR全局复位控制一般慎用GTS全局三态控制一般慎用### fpga加载从flash中配置完成后用户逻辑开始运行。如果用户逻辑还想继续访问同一颗配置 Flash就需要用户逻辑自己产生 SPI/QSPI 时钟用户逻辑 qspi_clk2ip --- STARTUPE2 --- CCLK --- Flash## 4. 你代码里的核心作用.USRCCLKO(qspi_clk2ip),.USRCCLKTS(1b0)意思是用用户逻辑里的 qspi_clk2ip 驱动配置 CCLK其中USRCCLKO User CCLK OutputUSRCCLKTS User CCLK TristateUSRCCLKTS 0 表示输出使能。所以 qspi_clk2ip 会通过 STARTUPE2 接到配置时钟输出路径。qspi_clk2ip 通过 STARTUPE2 的 USRCCLKO 端口送到 FPGA 的 CCLK 配置时钟专用路径/管脚。CFGCLK:FPGA配置模块 --- STARTUPE2 --- 用户逻辑信号 CFGCLKCFGMCLK:FPGA内部振荡器 --- STARTUPE2 --- 用户逻辑信号 CFGMCLKqspi_clk2ip:用户逻辑 qspi_clk2ip --- STARTUPE2.USRCCLKO --- 配置 CCLK/QSPI Flash 时钟管脚## 6. 为什么叫 STARTUPE2STARTUP 表示启动/配置启动模块。E2 是 Xilinx 7 系列这一代的版本名称。不同器件系列名字可能不同| FPGA 系列 | 原语 ||---|---|| Xilinx 7 Series | STARTUPE2 || UltraScale | STARTUPE3 || UltraScale | STARTUPE3 / 相关变体 |