模块 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) 中使用同样的名称。