3. FPGA验证平台搭建:Xilinx/Altera开发板选型、USB PHY芯片连接与时钟复位方案

USB主机控制器控制传输的FPGA验证,其成败高度依赖于底层硬件平台的正确性与稳定性。本章聚焦于验证平台的三大核心要素:FPGA开发板选型、USB PHY芯片的接口连接(ULPI/UTMI)以及时钟与复位方案的设计。一个设计不当的平台,即使RTL逻辑正确,也会因信号完整性问题或时序违例导致验证失败。

3.1 FPGA开发板选型:Xilinx与Altera的考量

选择开发板时,需综合考虑逻辑资源、高速收发器、可用IO数量以及调试接口。下表对比了Xilinx与Altera(现Intel)主流开发板在USB验证场景下的关键参数:

对比维度 Xilinx KC705 (Kintex-7) Xilinx ZC702 (Zynq-7000) Altera DE5-Net (Stratix V) Altera DE10-Nano (Cyclone V SoC)
逻辑资源 (LE/LC) ~326K ~85K ~622K ~110K
高速收发器 GTX (12.5 Gbps) 无 (仅PL端) GXB (12.5 Gbps) 无 (仅PL端)
USB PHY接口 FMC连接器 (可扩展) FMC + EMIO (PS端) HSMC连接器 Arduino + GPIO
调试能力 ChipScope Pro Vivado ILA + PS调试 SignalTap II SignalTap II + HPS调试
适用场景 高速USB 2.0/3.0验证 USB+ARM协同验证 大规模控制传输验证 低成本原型验证
选型建议: 对于纯控制传输的FPGA验证,建议优先选择带有FMC或HSMC高速连接器的开发板(如KC705或DE5-Net),以便灵活连接独立的USB PHY子卡。若需验证USB设备枚举过程中的处理器交互,Zynq或Cyclone V SoC系列是更优选择。

3.2 USB PHY芯片连接:ULPI与UTMI接口详解

FPGA内部实现的是数字逻辑层(Link Layer),而物理层信号(如差分D+/D-)由外部PHY芯片处理。ULPI(UTMI+ Low Pin Interface)和UTMI(USB 2.0 Transceiver Macrocell Interface)是两种最常用的接口标准。

3.2.1 UTMI接口(8位/16位并行)

UTMI是较早期的接口,采用并行数据总线。其典型信号包括:

  • Data[7:0] / Data[15:0]:双向数据总线。
  • XcvrSelect:收发器选择(HS/FS/LS)。
  • TermSelect:终端电阻选择。
  • OpMode[1:0]:操作模式(正常/非驱动/禁用)。
  • RxValid / RxActive:接收数据有效指示。
  • TxValid / TxReady:发送数据握手信号。

UTMI接口的优点是时序直观,但缺点是引脚数较多(8位模式下约30根信号线),在FPGA布局布线时容易造成IO拥挤。

3.2.2 ULPI接口(8位双倍数据率)

ULPI通过将时钟频率提升至60MHz,并在时钟的双沿采样数据,将数据总线宽度降为8位,大幅减少了引脚数量。其核心信号仅需:

  • Data[7:0]:双向数据/控制复用总线。
  • Dir:方向控制(PHY->Link)。
  • Nxt:下一字节指示(PHY->Link)。
  • Stp:停止信号(Link->PHY)。
  • Clk:60MHz参考时钟(由PHY提供或外部提供)。
ULPI接口优势: 仅需12根信号线即可完成USB 2.0 HS/FS/LS全速通信,非常适合引脚资源紧张的FPGA验证板。目前主流USB PHY芯片(如Microchip USB3300、TI TUSB1210)均优先支持ULPI。

以下是ULPI接口在FPGA顶层模块中的典型例化代码片段:

module usb_ulpi_top (
    // ULPI PHY 接口
    input  wire        ulpi_clk,      // 60MHz 时钟
    inout  wire [7:0]  ulpi_data,     // 双向数据总线
    input  wire        ulpi_dir,      // 方向控制
    input  wire        ulpi_nxt,      // 下一字节
    output wire        ulpi_stp,      // 停止信号
    output wire        ulpi_rst,      // PHY复位 (低有效)
    // 系统接口
    input  wire        sys_clk,       // 系统时钟
    input  wire        sys_rst_n      // 系统复位
);

// 三态缓冲器控制
wire [7:0] data_out;
wire       data_out_en;
reg  [7:0] data_in;

assign ulpi_data = data_out_en ? data_out : 8'bz;

always @(posedge ulpi_clk or negedge sys_rst_n) begin
    if (!sys_rst_n)
        data_in <= 8'b0;
    else if (!ulpi_dir)  // Dir=0时,FPGA驱动数据总线
        data_in <= ulpi_data;
end

// ... 后续ULPI状态机与USB主机控制器逻辑 ...

endmodule

3.3 时钟与复位方案

时钟和复位是FPGA验证平台中最容易被忽视却又最容易引发故障的环节。USB主机控制器涉及多个时钟域,必须谨慎处理。

3.3.1 时钟域划分

典型的USB主机控制器验证平台包含以下时钟域:

  • ULPI时钟域 (60MHz):由PHY芯片提供或外部晶振产生,用于ULPI接口数据收发。
  • 系统时钟域 (100MHz/125MHz):用于主机控制器内部状态机、DMA引擎和寄存器访问。
  • 应用层时钟域 (可变):用于上层协议处理或CPU接口。
时钟抖动与占空比: ULPI接口对时钟抖动要求较高(通常要求周期抖动 < ±100ps)。若使用FPGA内部PLL生成60MHz时钟,务必确保PLL的抖动指标满足USB PHY数据手册要求。建议优先使用PHY芯片输出的时钟作为ULPI接口的同步时钟源。

3.3.2 复位策略

复位方案需同时满足PHY芯片和FPGA逻辑的时序要求:

复位信号 来源 有效电平 最小脉宽 作用域
PHY_RST_N FPGA GPIO 低电平 > 1ms USB PHY芯片
SYS_RST_N 板级复位按钮 / 电源监控 低电平 > 10ms FPGA全局复位
ULPI_SW_RST FPGA内部逻辑 高电平 > 5个ULPI时钟周期 ULPI接口状态机

复位释放必须满足异步置位、同步释放的原则,避免亚稳态传播。以下是一个标准的复位同步器实现:

module rst_sync (
    input  wire clk,
    input  wire rst_async_n,   // 异步复位输入
    output wire rst_sync_n     // 同步复位输出
);

reg [1:0] rst_meta;

always @(posedge clk or negedge rst_async_n) begin
    if (!rst_async_n) begin
        rst_meta <= 2'b00;
    end else begin
        rst_meta <= {rst_meta[0], 1'b1};
    end
end

assign rst_sync_n = rst_meta[1];

endmodule

3.4 验证平台整体架构

下图展示了基于ULPI接口的USB主机控制器FPGA验证平台的整体连接关系:

USB主机控制器FPGA验证平台架构 PC / 上位机 USB枚举与测试脚本 USB 线缆 USB PHY USB3300 ULPI接口 ULPI[7:0] Dir/Nxt/Stp FPGA (Xilinx/Altera) ULPI 接口 状态机 USB主机控制器 控制传输引擎 寄存器 & DMA 时钟 & 复位 外部晶振 / PLL时钟源 60MHz / 100MHz 图例 上位机/测试设备 USB PHY芯片 FPGA内部模块 时钟/复位源 数据/控制流 时钟/复位信号

3.5 常见连接故障与排查

在搭建验证平台时,以下三类故障最为常见:

  1. PHY芯片无法枚举:检查PHY_RST_N复位时序是否满足1ms要求,测量ULPI_CLK是否存在且频率稳定在60MHz±0.25%。
  2. ULPI数据总线冲突:使用示波器或ILA抓取Dir信号,确认FPGA在Dir=0时正确驱动数据总线,在Dir=1时释放为高阻态。
  3. 时钟域间数据错乱:检查跨时钟域同步器是否使用两级触发器或异步FIFO,避免在ULPI时钟域直接采样系统时钟域信号。
关键检查点: 在首次上电调试时,务必先通过ILA或SignalTap抓取ULPI接口的Dir和Nxt信号。若Dir持续为高(PHY始终占用总线),说明PHY未正确初始化或复位不充分。此时应检查PHY的中断引脚和电源状态。