首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

使用IDELAY 实现高效8 倍过采样异步串行数据恢复(2)

使用IDELAY 实现高效8 倍过采样异步串行数据恢复(2)

本帖最后由 yuyang911220 于 2016-12-29 14:58 编辑

参考设计

过采样器模块称为 oversample_8x。其端口如表1 所示。

oversample_8x 模块还接受一个称为 IDELAY_45_DEGREES 的 Verilog 参数或 VHDL 类属参数,其默认值为 6。此值设置 IDELAY 的延迟量,以便在数据上获得一个 45 度的相移(八分之一位周期)。默认值 6 是对应 270 Mb/s 的正确 IDELAY 值 (78 ps * 6 ≈ (1 / 270 MHz) / 8)。如果比特率是 270 Mb/s 以外的其他值,就必须将 IDELAY_45_DEGREES 的正确值传输到该模块。

在内部差分终端 (DIFF_TERM) 开启的状态下,用 IOSTANDARD 属性值“LVDS_25”在oversample_8x 模块内实例化 IBUFDS_DIFF_OUT 输入缓冲器。如果应用要求不同的IOSTANDARD 属性或者要求关闭差分终端,则必须修改在 oversample_8x 模块中的IBUFDS_DIFF_OUT 缓冲器上设置的约束条件.IBUFDS_DIFF_OUT 只能用于 LVDS I/O 标准。

DRU 模块称为 os48_1011x20bTo10b_top2。其端口如表2 所示。名称以 A/B 开头的所有端口实际上都是双端口,其中一个对应 A 通道,另一个对应 B 通道。


DRU 的 A_recclk 和 B_recclk 端口必须由连接到各自 oversample_8x 模块 clk0 输入端口的同样的比特率时钟驱动。过采样器的 dout 和 dout_rdy 端口分别驱动 DRU 的 A/B_din20b 和A/B_en 端口。

为 DRU 正确指定信号位顺序至关重要。DRU 有两个位顺序输入端,一个指定 DRU 输入数据的位顺序,另一个指定 DRU 输出数据的位顺序。不能独立地指定 DRU 两个通道的位顺序。

10 位和 20 位输出端口均由 DRU 提供。两个端口始终处于活动状态,应用可选择使用任一个。各通道的 10 位和 20 位端口各有其输出使能,通常用作对下游逻辑的时钟使能。在典型应用中,驱动 oversample_8x 的 clk0 端口和 DRU 的 A/B_recclk 端口的比特率参考时钟用作接收器中下游逻辑的时钟,如解码器、成帧器和查错器等。当 DRU 的输出端口上有新的恢复数据字时,用 DRU 的时钟使能输出仅在这些时钟周期上启用下游逻辑。

模块 FPGA 资源的利用

表3 所示为实现完整的 8 倍过采样单元和数据恢复单元所需的 FPGA 资源。DRU 基于 BlockRAM。因为 Xilinx FPGA 中的 Block RAM 有双端口,所以 DRU 设计可以处理两个异步数据流。这样,同样数量的 Block RAM 既可以处理一个异步通道,也可以处理两个异步通道。在Virtex-4 器件中,无论 DRU 处理一个还是两个通道,都需要有两个 RAMB16 Block RAM。在Virtex-5 器件中,DRU 需要一个半 RAMB36 Block RAM (一个 RAMB18,一个 RAMB36)。

表3 中的结果是用 ISE8.2 获得的,其 XST 设置为面积优化,串行比特率为 270 Mb/s。在Virtex-4 和 Virtex-5 FPGA 的最低速度级别下,如果将 XST 设置为面积优化则有可能满足比特率为 270 Mb/s 的时序。

时序

IDELAY 基元的粒度为 78 ps。因此,由于 78 ps 的粒度与本技术要求的八分之一位周期延迟刚好相符,有些比特率值相对于其他值就会更适合这一技术。例如,比特率为 270 Mb/s 时,八分之一位周期约为 463 ps,而 6 * 78 ps 为 468 ps。因此,使用延迟值 6 会使 IDELAY 对信号的延迟量非常接近八分之一位周期。

这种技术不能用于 DCM 的 CLKFX 输出端。其主要原因是,时钟相位的抖动要尽可能低,而DCM 的 CLKFX 输出端的抖动要远远高于 CLK0 和 CLK90 输出端。在 Virtex-5 器件中,也可以用时钟管理管道中的 PLL 提供这两个时钟相位。

重要的是,要妥善约束 DRU 和下游逻辑的时序。这通常需要多周期时序约束,因为所用时钟是比特率时钟,而 DRU 和下游逻辑则往往通过使用时钟使能而在字速率下运行。两个不同的时钟使能被用到,因此必须给予妥善约束。

过采样器对 DRU 的 A_en 或 B_en 输入生成一个时钟使能 (dout_rdy),以使其仅当准备好向DRU 输入 20 位过采样数据时 DRU 才会被时钟驱动。如果过采样器的实例名为 OVRSAMPLE,则使用以下约束指明每 20 个时钟(称为“sclk”)周期 DRU 输入才会被时钟驱动一次:

NET “sclk” TNM_NET = BIT_CLK;
TIMESPEC TS_BIT_CLK = PERIOD BIT_CLK 270 MHz HIGH 50 %;
NET “OVRSAMPLE/period<0>” TNM = DRU_IN_CE;
TIMESPEC TS_DRU_IN_CE = FROM DRU_IN_CE TO DRU_IN_CE BIT_CLK / 20;

串行时钟的 PERIOD 约束是以频率给定,从而使时钟使能的 TIMESPEC 等于串行时钟的TIMESPEC 除以 20。如果串行时钟的 PERIOD 约束是以周期而非频率给定,则时钟使能的TIMESPEC 必须等于串行时钟的 TIMESPEC 乘以 20。

另一个时钟使能由 DRU 在其使能输出端生成。DRU 有四个输出端使能,每通道两个。在每通道两个输出端使能中,一个对应于 10 位的输出,另一个对应于 20 位的输出。10 位的输出端口使能(A_dout10bEn 或 B_dout10bEn)平均每 10 个串行时钟周期被置位一次。不过,因为实际数据比特率对于串行时钟为异步,所以在 10 位输出端使能的各次置位之间偶尔会有 9 或11 个时钟周期。实际上,DRU 也可以在 10 位输出端使能的各次置位之间生成短至 5 个时钟周期的数据字。因此,对于由 DRU 时钟使能输出端驱动的逻辑,应该以所希望的最小时序编写其多周期时序约束。如果使用 DRU 的 10 位时钟使能输出端,并且信号名为“rx_ce”,那么以下时序约束可以妥善约束由 rx_ce 信号启用的 DRU 下游的任何逻辑。有必要在 Verilog 或VHDL 代码中对来自 DRU 的时钟使能信号应用一个 KEEP 约束,以使时钟使能将源代码保持为其给定的名称,从而可以在用户约束文件 (UCF) 中使用同样的名称。

NET “rx_ce” TNM = RXCE;
TIMESPEC TS_RXCE = FROM RXCE TO RXCE BIT_CLK / 5;

位置约束

要从过采样器中获得良好性能,重要的是应将第一组的八个触发器(即直接从 IDELAY 基元输出端采集数据的触发器)放置在尽量靠近 IDELAY 基元处,并且从两个 IDELAY 基元到八个触发器的布线对于所有八个触发器来说应尽量相同。过采样器模块应设计成允许在约束文件中放置一个 RLOC 起点,以约束这第一组的八个触发器。应将 RLOC 起点设置成使触发器在 CLB中的位置尽可能紧靠 IDELAY 基元的左侧,因为这样放置可提供最直接的信号布线。如果不可能将触发器置于 IDELAY 基元的左侧,可以将其放在紧靠其右侧的位置,只是性能会稍有降低。

图7 所示为触发器紧靠 IDELAY 基元左侧的 Virtex-4 器件。图中以红色表示从两个 IDELAY 基元到触发器的数据信号布线。




R 以下约束显示如何将设计中的两个 oversample_8x 模块分别指定给不同的 U_SET,以及如何对其指定 RLOC_ORIGIN 约束,以将其置于各自 IOB 的旁边。在本示例中,两个oversample_8x 模块的实例名分别为 OVRSAMPLE1 和 OVRSAMPLE2。

INST “OVRSAMPLE1” U_SET=USET_OVR1;
INST “OVRSAMPLE1” RLOC_ORIGIN = X0Y24;
INST “OVRSAMPLE2” U_SET=USET_OVR2;
INST “OVRSAMPLE2” RLOC_ORIGIN = X50Y24;

结论

本文所述技术使用 Virtex-4 和 Virtex-5 器件中各 IOB 内置的 IDELAY 资源来实现用于异步串行比特流的高效高性能 8 倍过采样器。当用多个 DCM 生成时钟相位时,这种技术可以提供比多时钟相位法更高的采样精度。因为 IDELAY 资源可以为各比特流提供更多采样点,所以只需一个 DCM 和两个全局时钟即可提供对以同样比特率运行的任意数量的异步比特流进行 8 倍采样所需的所有时钟。
继承事业,薪火相传
返回列表