Xilinx FPGA平台GTX简易使用教程(二)

时钟就是脉搏,能否工作全靠它!
话不多说,直接上干货!
文中全部使用gtx代指gt transceiver,同样适用于gth。
一、参考时钟
1.1 收发测试能跑起来的基本参考时钟设置
我们先回顾下上一节的基础知识:quad、qpll、cpll、channel、common;基础知识理解了有利于后面内容的了解。
每一个gtx独有的cpll,4个gtx共有的一个qpll,2个外部参考时钟输入,和专用参考时钟布线(refclk distribution)。
在quad中,gtxe2_channel原语以及gtxe2_common原语都必须例化,需要注意的是不管使用还是不使用qpll,gt_common都是要例化的,这是工具自动操作的。
外部参考差分时钟输入经过 ibufds_gte2原语转为单端时钟后,就是gtx的参考时钟输入端口:
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)
);
前文已说过,1个quad有2个参考时钟,我们称之为refclk0,refclk1,具体用哪一个,看你外部板卡设计时,实际给了哪一路。然后在ip配置时候,选择使用对应的参考时钟:
总结如下:
①参考时钟根据板子实际时钟来选择频率;
②参考时钟给到refclk0 还是refclk1也由板子设计决定。
但是对于我们学习做仿真而言,暂时不用管它;如果按照上图配置来例化ip;那么对应到程序中就是:
(根据ip配置)差分输入参考时钟频率为156.25mhz,然后经过ibufds原语后转为单端时钟并给到参考时钟refclk1;而refclk0由于没有使用,直接给0 。
1.2 继续了解时钟,走着
如果只是测试收发,跑跑仿真,那么到这里,我们就可以不用继续研究了。直接跳到第二章--系统时钟。但是gtx的时钟远不止如此;要知道k7325t有16个gtx ,v7系列更多;当gtx数量多了的时候,时钟又如何设定?
继续上图:
注意到红框的refclk distribution了吗?专用参考时钟布线。
refclk distribution的上下参考时钟引脚分别为南北时钟输入引脚。用于quad之间共享参考时钟;也就是说,并不一定每一个quad都需要外部参考时钟,有的quad可以和其他quad共享参考时钟,而共享的来源就是南北时钟输入引脚。quad的南北参考时钟称为gtsouthrefclk以及gtnorthrefclk。
我们再继续看来自qpll参考时钟的4通道结构图:
又总结一下:
每个quad中的gtx通道有6个可用的参考时钟输入:
两个外部输入参考差分时钟,经过ibufds后就是gtrefclk0和gtrefclk1;
来自于quad上面的两个参考时钟引脚对,gtsouthrefclk0和gtsouthrefclk1;
来自于quad下面的两个参考时钟引脚对,gtnorthrefclk0和gtnorthrefclk1;
好家伙,一下子来这么多参考时钟,gtx都蒙了,用哪个呢?
时钟多路选择器安排呗。
下图是qpll参考时钟多路选择器:
注意:多了一个gtgrefclk,这个时钟是由内部逻辑产生的参考时钟。貌似只用于内部测试。
cpll同理,就不啰嗦了,直接上图:
1.3 单个外部参考时钟使用情形
(1)单个外部参考时钟驱动单个quad中的多个gtx
这种情况很简单,也很常见,一个quad共用一个外部参考时钟,直接看图:
用户设计直接将外部参考时钟经过ibufds_gte2输出refclk连接到gtx 的common 、channel 原语。
(2)单个外部参考时钟驱动多个quad中的多个gtx
单个外部参考时钟也可以驱动多个quad中的多个gtx,例如:
但是,须得遵守一定的规则:
源quad上方的quad数量不能超过1个;
源quad下方的quad数量不能超过1个;
源quad,指的是直接连接到外部参考时钟的quad。
即是说: 1个外部参考时钟所驱动的quad总数不超过3个,或驱动的transceiver不超过12个。
1.4 多个外部参考时钟使用情形
(1)同一个quad中,多个gtx transceiver使用多个参考时钟
每个quad有两个专用的差分时钟输入引脚(mgtrefclk0[p/n]或 mgtrefclk1[p/n]) ,可以连接到外部时钟源。 每个专用的参考时钟引脚对输入进来后必须例化ibufds_gte2,再给到gtx使用。
说再多也不如一张图看的直接:
看图说话:mgtrefclk0[p/n]连接到gtrefclk0,将mgtrefclk1[p/n]连接到gtrefclk1管脚。
(2)不同quad中,多个gtx transceiver 使用多个参考时钟
参考时钟选择结构的灵活性允许quad中的每个transceiver都可以访问上下quad中的专用参考时钟。
不啰嗦,上图上图:
在每个gtx有多个参考时钟选项的情况下,设计的时候根据需求设置 qpllrefclksel[2:0]和cpllrefclksel[2:0]。该遵守的规则还是要遵守的:1个外部参考时钟所驱动的quad总数不超过3个,或驱动的transceiver不超过12个。
1.5 qpll/cpll工作原理
算了, 略过吧,有兴趣具体查阅手册《ug476》。
二、系统时钟
对应ip设置的第三页,我们所设置的时钟频率,也是drp clock;跟板子提供的时钟对应;
对应到代码:
input wire drp_clk_in_p,
input wire drp_clk_in_n,
我们参照example design中对该时钟的处理:
先经过ibufds转为单端时钟,然后经过bufg,再给到gtx核。
ibufds ibufds_drp_clk (
.i (drp_clk_in_p),
.ib (drp_clk_in_n),
.o (drpclk_in)
);
bufg drp_clk_bufg(
.i (drpclk_in),
.o (drpclk_in_i)
);
这里,有个有意思的事情:
笔者使用50mhz / 100mhz 输入,最终gtx输出都是ok的,什么原因呢?
三、逻辑使用的时钟
txusrclk 和 txusrclk2 生成:
(以下内容为ug476翻译)
fpga发送端包含两个并行时钟:txusrclk 和 txusrclk2,
txusrclk是gtx中pcs逻辑的内部时钟。它的频率由tx端的line rate和内部数据总线宽度共同决定:
txusrclk2是gtx的tx端信号的主要同步时钟。 gtx发送的大多数信号都是在txusrclk2的上升沿进行采样。txusrclk2和txusrclk之间有一个固定比率关系,由tx_data_width 和tx_int_datawidth决定,见下图:
回想一下,我们要通过某个ip核进行发送数据,那么发送数据模块所使用的时钟必然是该ip核出来的同步时钟。
对于gtx而言,我们发送数据所在的时钟域,就是由核输出的gt0_txoutclk_i。
再来看两种情况:
(1)单通道——txoutclk 驱动txusrclk2 (2-byte 或者4-byte 模式)
(2)多通道——txoutclk 驱动txusrclk2 (2-byte or 4-byte 模式)
四、时钟篇小结
前面解释的很详细了,最后放张图吧。


安泰测试:矢量网络分析仪可以测哪些参数?
Kepware助力汽车行业用户提升整体竞争力
单片机的I/O口不够,怎样同时控制最多81个继电器
基于FPGA的SATAll协议结构层中的物理层设计与实现
需要了解的Linux系统进程环境
Xilinx FPGA平台GTX简易使用教程(二)
三菱全新SUV,对开门,全时四驱,青蛙外观上路回头率百分百
AI发展预计2023年可突破5000亿美元大关
怎样将汽车音频转换为家庭影院系统
曝苹果将生产新的入门级AirPods Pro 拟使用低价吸引用户
电脑死机按什么键恢复
醒醒吧!家用摄像头也不一定安全 或许你的生活正暴露在千百双眼睛下
中国北斗导航系统面向全球,是否能与GPS匹敌?
NMOS的用法
Diodes推出新型APX4558双通道运算放大器
海信推出OLED电视 创维可以着急却无法阻止
光模块PCB焊盘的可焊性不良分析
探讨嵌入式硬件电源设计方面的注意事项
实现算力资源利用率的最大化
FPGA与ASIC在打一场围绕成本、功耗和性能的硬仗
s