UltraScale FPGA下IBUFDS的TERM终结

     在调试FMC-704 3Gsps采集回放卡时,发现在K7平台上调试完成后,放到KU平台上工作不正常。经测试发现,KU的FPGA接收HMC7044送过来的Globle_clk "300MHz"  时钟不正确。把HMC7044输出的该时钟更改为150MHz,则KU FPGA能正常接收。这就说明是信号幅度和匹配问题。后通过打开KU IBUFDS的差分终结电阻解决。

     大家经常使用的KU085、KU115中,使用了IBUFDS来接收差分信号。但是我们发现,该源语没有终结电阻选项了。

   IBUFDS IBUFDS_inst (
      .O(O),   // 1-bit output: Buffer output
      .I(I),   // 1-bit input: Diff_p buffer input (connect directly to top-level port)
      .IB(IB)  // 1-bit input: Diff_n buffer input (connect directly to top-level port)
   );

根据xilinx的官方的资料,UltraScale的器件是支持100欧的差分终结电阻的。

该差分Rdiff可以在I/O Ports设置界面下开,也可以在XDC文件中进行设置。

  Differential termination can either be invoked using the DIFF_TERM or DIFF_TERM_ADV attributes. DIFF_TERM is used if specified in the instantiated primitive. DIFF_TERM_ADV is used if specified in the XDC constraints file. DIFF_TERM values specified in the instantiated primitive gets translated to the corresponding DIFF_TERM_ADV setting in the XDC file.

The DIFF_TERM_ADV attribute uses the following syntax in the XDC file:

   set_property DIFF_TERM_ADV value [get_ports port_name]

实际项目中,由于输入的差分信号时P端和N端,我们只需要设置P端即可。

set_property DIFF_TERM_ADV TERM_100 [get_ports {FMC_CLK_M2C_P[0]}]

### Vivado 中 IBUFG 差分信号的使用方法与配置 在 FPGA 设计中,差分信号是一种常用的时钟输入方式,能够有效降低噪声干扰并提高信号质量。对于 Xilinx 的 Vivado 开发环境而言,处理差分时钟信号需要特别注意缓冲器的选择和配置。 #### 1. 差分时钟信号的基础概念 差分时钟信号由两个互补的信号组成(通常标记为 CLK_P 和 CLK_N)。这种信号通过两根导线传输,其中一根携带正相位信号,另一根携带反相位信号。为了正确接收这些信号,必须使用专门的支持差分信号的缓冲器[^3]。 #### 2. IBUFGDS 的作用 IBUFGDS 是一种专用的全局时钟输入缓冲器,用于支持差分时钟信号。它将外部差分时钟信号转换为单端信号,并将其分配到 FPGA 的内部逻辑资源中。如果设计中涉及差分时钟信号,则必须使用 IBUFGDS 而不是普通的 IBUFG 缓冲器[^1]。 #### 3. 配置流程 以下是基于 Vivado 的 IBUFGDS 配置过程: ##### (a) 定义顶层模块接口 在 Verilog 或 VHDL 文件中定义差分时钟信号的输入端口。例如,在 Verilog 中可以如下声明: ```verilog module top_module ( input wire clk_p, // 正相位时钟信号 input wire clk_n // 反相位时钟信号 ); ``` ##### (b) 实例化 IBUFGDS 原语 在 RTL 代码中实例化 IBUFGDS 并连接相应的输入输出信号。以下是一个典型的 Verilog 示例: ```verilog // 实例化 IBUFGDS IBUFGDS #( .DIFF_TERM("FALSE"), // 是否启用差分终端电阻,默认关闭 .IBUF_LOW_PWR("TRUE"), // 是否启用低功耗模式,默认开启 .IOSTANDARD("LVDS") // 设置 I/O 标准,此处为 LVDS ) ibufgds_inst ( .O(clk_out), // 输出至后续逻辑的单端时钟信号 .I(clk_p), // 输入的正相位时钟信号 .IBE(clk_n) // 输入的反相位时钟信号 ); ``` ##### (c) 添加约束文件 在 XDC 约束文件中指定物理引脚位置及其电气特性。例如: ```tcl set_property PACKAGE_PIN Y17 [get_ports {clk_p}] // 指定正相位时钟引脚 set_property PACKAGE_PIN Y18 [get_ports {clk_n}] // 指定反相位时钟引脚 set_property IOSTANDARD LVDS [get_ports {clk_p clk_n}] // 设置 I/O 标准为 LVDS ``` ##### (d) 连接 BUFG 全局缓冲器 为了使时钟信号能够在整个 FPGA 上分布均匀,需进一步将 IBUFGDS 的输出连接到 BUFG 全局缓冲器。示例如下: ```verilog BUFG bufg_inst ( .O(global_clk), // 输出至全局网络的时钟信号 .I(clk_out) // 来自 IBUFGDS 的单端时钟信号 ); ``` #### 4. 注意事项 - **差分信号匹配**:确保差分对的走线长度一致,以减少因延迟差异引起的抖动。 - **电源去耦**:在 PCB 设计中合理布置去耦电容,以抑制高频噪声的影响。 - **仿真验证**:完成硬件实现前,建议通过功能与时序仿真确认设计行为的一致性[^2]。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值