使用外部 PHY 延迟功能约束三倍速以太网的 RGMII 接口

author-image

作者

此设计示例的目的是展示约束 TSE_RGMII 的方法。此设计示例仅适用于外部 PHY 的 TX_CLK 和 RX_CLK 的延迟功能(90 度偏移)打开时的情况。示例以 3 种不同的速度运行,分别是 10 MHz、100 MHz 和 1000 MHz。

假设用户熟悉三倍速以太网知识产权 (IP) 内核、ALTDDIO、ALTPLL、TimeQuest 和静态时序分析,以及双倍数据速率 (DDR) 源同步概念。

如何约束

  1. 选择接口约束方法:以系统为中心的方法或以英特尔® FPGA 为中心的方法。
    • 不同的方法需要不同的公式来计算 set_input_delay 和 set_output_delay 命令中的延迟值
    • 本设计示例使用以系统为中心的方法
  2. 决定是打开还是关闭外部 PHY 的延迟功能(±90 度偏移),因为它将决定时钟和数据之间的对齐类型。
    • 90 度偏移 - 居中对齐
    • 无偏移 - 边缘对齐
    • 此设计示例仅适用于外部 PHY 的 TX 和 RX 延迟特性开启(90 度偏移)的情况
  3. 确定所需的启动和锁存器关系。
    • 有 4 种类型的启动和锁存器关系。它们是上升-上升(RR)、上升-下降(RF)、下降-上升(FR)和下降-下降(FF)关系
    • RGMII 规范规定数据 [3:0] 的 LSB 将在上升沿首先发送,数据 [7:4] 的 MSB 在下降沿发送
    • 带有 RGMII 接口的 TSE 设计将首先在上升沿捕获数据,然后是下降沿。这意味着时钟需要偏移 +90 度而不是 -90 度
    • 所需的设置启动和锁存器关系(红色箭头):RR 和 FF
    • 所需的保持启动和锁存器关系(蓝色箭头):FR 和 RF
  4. 约束 RGMII 接口Synopsys Design Constraints (SDC) 基于设计和应用程序。但是,RGMII 接口需要一些主要的 SDC。

图 2.启动时钟和锁存器时钟关系

TX

  • create_clock
    • 在传输到外部 PHY 之前锁存英特尔® FPGA 内的数据的时钟
  • create_generated_clock:
    • 具有 90 度相移的时钟,可在外部 PHY 上锁存数据
  • set_false_path:
    • 这是时序分析中不进行分析的不需要的关系。在此设计示例中,设置的不需要关系是 RF 和 FR,而保持的不需要关系是 RR 和 FF

set_false_path -fall_from [data_clock] -rise_to [output_clock] -setup
set_false_path -rise_from [data_clock] -fall_to [output_clock] -setup
set_false_path -rise_from [data_clock] -rise_to [output_clock] -hold
set_false_path -fall_from [data_clock] -fall_to [output_clock] -hold

  • set_output_delay

set_output_delay -clock output_clock\
-max [expr $data_delay_max + $tsu - $clk_delay_min] \
[get_ports data_out] \
-add_delay

set_output_delay -clock output_clock\
-max [expr $data_delay_max + $tsu - $clk_delay_min] \
[get_ports data_out] \
-clock_fall \
-add_delay

set_output_delay -clock output_clock \
-min [expr $data_delay_min - $th - $clk_delay_max] \
[get_ports data_out ] \
-add_delay

set_output_delay -clock output_clock \
-min [expr $data_delay_min - $th - $clk_delay_max] \
[get_ports data_out ] \
-clock_fall \
-add_delay

TSE_RGMII RX

  • create_clock:
    • 在传输到英特尔® FPGA 之前将数据锁存到外部 PHY 内部的虚拟时钟
  • create _clock:
    • 具有 90 度相移的时钟,可锁存英特尔® FPGA 内的数据
  • set_false_path:
    • 这是时序分析中不进行分析的不需要的关系。在此设计示例中,设置的不需要关系是 RF 和 FR,而保持的不需要关系是 RR 和 FF

set_false_path -fall_from [data_clock] -rise_to [output_clock] -setup
set_false_path -rise_from [data_clock] -fall_to [output_clock] -setup
set_false_path -rise_from [data_clock] -rise_to [output_clock] -hold
set_false_path -fall_from [data_clock] -fall_to [output_clock] -hold

如何验证

需要检查一些报告以验证源同步约束是否被正确约束。

  1. 时钟报告
    • 检查 3 个时钟频率(125 MHz、25 MHz 和 2.5 MHz)及其相位
    • 核心 TX 时钟(英特尔® FPGA):125 MHz、25 MHz 和 2.5 MHz
    • RGMII_TX_Clock(外部 PHY):125 MHz +90º、25 MHz +90º 和 2.5 MHz +90º
    • RGMII_RX_Clock(英特尔® FPGA):125 MHz +90º、25 MHz +90º 和 2.5 MHz +90º
    • RGMII_RX_Virtual_Clock(外部 PHY):125 MHz、25 MHz 和 2.5 MHz
  2. 时钟传输报告
    • 检查时钟传输的 RGMII 接口的建立和保持启动-锁存关系的所有关系
    • 所需的设置:RR 和 FF
    • 所需的保持:FR 和 RF
  3. 所有 I/O 时序报告
    • 根据所需的建立和保持启动-锁存关系,检查是否有任何失败路径和启动-锁存关系
      • 输入到寄存器用于建立和保持
      • 寄存到输出用于建立和保持

注意:

  1. TSE_10_1_RGMII_SDC 是 Megafunction 生成的 SDC 文件。它不包括 RGMII SDC 约束。RGMII SDC 约束包含在 RGMII SDC 中。
  2. TSE_10_1_RGMII_SDC.sdc 文件中的修改:
    • 注释 derived_pll_clock(第 246 行),因为它会阻止您对 RGMII.sdc 中的 pll 使用create_gererated_clock 命令
    • 根据设计,更改第 59 行和第 60 行中 FF_TX_CLK 和 FF_RX_CLK 的名称
  3. 在时序分析过程中可以忽略一些警告。有关详细信息,请参阅 TSE_RGMII_With_SDC.qar 中的 readme.txt。
  4. 下载本示例中使用的文件:TSE_RGMII_With_SDC.qar

该设计的使用受英特尔® 设计示例许可协议中条款和条件的管理和约束。