浅析OSERDESE3

在高速接口的应用场景下,我们会经常听说SerDes(Serializer-Deserializer)这个词,也就是串行器和解串器,更为通俗的讲就是进行串并转换的。在Xilinx的FPGA中提供了ISERDES(提供串行数据到并行数据的转换)和OSERDES(提供并行数据到串行数据的转换)。在7系列的FPGA里面提供了ISERDESE2和OSERDESE2这两个原语供我们使用。而在UltraScale架构中提供了ISERDESE3和OSERDESE3这两个原语。OSERDESE3的结构如下图所示,支持SDR模式和DDR模式。

其可供配置的参数如下图所示:

从上表可以看出与OSERDESE2使用有差异的DATA_WIDTH,在OSERDESE3中只支持8bit和4bit两种模式,相对于OSERDESE2来说变少了。另外还有一点,对于熟悉OSERDESE2的人来说可以看出这里并没有配置是SDR模式还是DDR模式的参数,在OSERDESE2中可以通过DATA_RATE_OQ参数进行配置SDR或DDR。这个具体配置还请接着往下看。那么先看一下DDR模式下的时序图:

可以看出当DATA_WIDTH是8时,CLK和CLK_DIV是4倍关系,当DATA_WIDTH是4时,CLK和CLK_DIV是2倍关系。再看一下SDR模式下的端口连线和时序图:

相信看到这里应该就能看出来SDR和DDR模式的不同了,在SDR模式下需要将相邻的两个输入端口接同一个数据,这样实现的SDR功能。下面就看一下SDR和DDR模式的所有连接情况吧

最后呢来看一下OSERDESE3具体要怎么使用吧。

OSERDESE3 #(
      .DATA_WIDTH(8),            // Parallel Data Width (4-8)
      .INIT(1'b0),               // Initialization value of the OSERDES flip-flops
      .IS_CLKDIV_INVERTED(1'b0), // Optional inversion for CLKDIV
      .IS_CLK_INVERTED(1'b0),    // Optional inversion for CLK
      .IS_RST_INVERTED(1'b0),    // Optional inversion for RST
      .SIM_DEVICE("ULTRASCALE")  // Set the device version for simulation functionality (ULTRASCALE)
   )
   OSERDESE3_inst (
      .OQ(OQ),         // 1-bit output: Serial Output Data
      .T_OUT(T_OUT),   // 1-bit output: 3-state control output to IOB
      .CLK(CLK),       // 1-bit input: High-speed clock
      .CLKDIV(CLKDIV), // 1-bit input: Divided Clock
      .D(D),           // 8-bit input: Parallel Data Input
      .RST(RST),       // 1-bit input: Asynchronous Reset
      .T(T)            // 1-bit input: Tristate input from fabric
   );

一个小Tip,CLKDIV端口的时钟可以走BUFGCE_DIV哦,这样会有更小的Clock Skew,当TPWS违例的时候可以考虑这个方法进行解决。

FPGA开源工坊 文章被收录于专栏

分享FPGA开发相关的知识

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务