Xilinx 7 Series FPGAs SelectIO —— ISERDESE2(Input Serial-to-Parallel Logic Resources)的一个测试

一、ISERDESE2简介
ISERDESE2是专用的串并转换器,它在完成串并转换时并不会带来多余的时序上的问题,从而很适合应用到高速源同步应用中。比如摄像头数据。

  • 专用解串器/串并转换器
    它可以完成高速数据传输同时不需要FPGA端匹配数据频率,这个转换器支持SDR(single data rate)和DDR(double data rate)。SDR模式支持2-,3-,4-,5-,6-,7-,8bit位宽;DDR模式支持4-,6-,8-bit位宽。10或14-bit需要两个级联。
  • Bitslip 子模块
    该子模块可以使设计者重新排列输入的并行数据。可用于源同步tranining。
  • 特意支持strobe-based 存储接口

二、测试程序
此次选择SDR模式6bit位宽作为测试。所需时钟由PLLE2_BASE产生,数据经IDELAYE2输入到ISERDES2中。

    ISERDESE2 #(
      .DATA_RATE("SDR"),           // DDR, SDR
      .DATA_WIDTH(6),              // Parallel data width (2-8,10,14)
      .DYN_CLKDIV_INV_EN("FALSE"), // Enable DYNCLKDIVINVSEL inversion (FALSE, TRUE)
      .DYN_CLK_INV_EN("FALSE"),    // Enable DYNCLKINVSEL inversion (FALSE, TRUE)
      // INIT_Q1 - INIT_Q4: Initial value on the Q outputs (0/1)
      .INIT_Q1(1'b0),
      .INIT_Q2(1'b0),
      .INIT_Q3(1'b0),
      .INIT_Q4(1'b0),
      .INTERFACE_TYPE("NETWORKING"),   // MEMORY, MEMORY_DDR3, MEMORY_QDR, NETWORKING, OVERSAMPLE
      .IOBDELAY("NONE"),           // NONE, BOTH, IBUF, IFD
      .NUM_CE(1),                  // Number of clock enables (1,2)
      .OFB_USED("FALSE"),          // Select OFB path (FALSE, TRUE)
      .SERDES_MODE("MASTER"),      // MASTER, SLAVE
      // SRVAL_Q1 - SRVAL_Q4: Q output values when SR is used (0/1)
      .SRVAL_Q1(1'b0),
      .SRVAL_Q2(1'b0),
      .SRVAL_Q3(1'b0),
      .SRVAL_Q4(1'b0)
    )
    ISERDESE2_inst (
      .O(out),                       // 1-bit output: Combinatorial output
      // Q1 - Q8: 1-bit (each) output: Registered data outputs
      .Q1(Q1),
      .Q2(Q2),
      .Q3(Q3),
      .Q4(Q4),
      .Q5(Q5),
      .Q6(Q6),
      .Q7(Q7),
      .Q8(Q8),
      // SHIFTOUT1, SHIFTOUT2: 1-bit (each) output: Data width expansion output ports
      .SHIFTOUT1(),
      .SHIFTOUT2(),
      .BITSLIP(BITSLIP),           // 1-bit input: The BITSLIP pin performs a Bitslip operation synchronous to
                                   // CLKDIV when asserted (active High). Subsequently, the data seen on the Q1
                                   // to Q8 output ports will shift, as in a barrel-shifter operation, one
                                   // position every time Bitslip is invoked (DDR operation is different from
                                   // SDR).

      // CE1, CE2: 1-bit (each) input: Data register clock enable inputs
      .CE1(1'b1),
      .CE2(1'b0),
      .CLKDIVP(),           // 1-bit input: TBD
      // Clocks: 1-bit (each) input: ISERDESE2 clock input ports
      .CLK(clk_high),                   // 1-bit input: High-speed clock
      .CLKB(),                 // 1-bit input: High-speed secondary clock
      .CLKDIV(clk_div),             // 1-bit input: Divided clock
      .OCLK(),                 // 1-bit input: High speed output clock used when INTERFACE_TYPE="MEMORY" 
      // Dynamic Clock Inversions: 1-bit (each) input: Dynamic clock inversion pins to switch clock polarity
      .DYNCLKDIVSEL(1'b0), // 1-bit input: Dynamic CLKDIV inversion
      .DYNCLKSEL(1'b0),       // 1-bit input: Dynamic CLK/CLKB inversion
      // Input Data: 1-bit (each) input: ISERDESE2 data input ports
      .D(DATAOUT),                       // 1-bit input: Data input
      .DDLY(),                 // 1-bit input: Serial data from IDELAYE2
      .OFB(),                   // 1-bit input: Data feedback from OSERDESE2
      .OCLKB(),               // 1-bit input: High speed negative edge output clock
      .RST(rest_ise),                   // 1-bit input: Active high asynchronous reset
      // SHIFTIN1, SHIFTIN2: 1-bit (each) input: Data width expansion input ports
      .SHIFTIN1(),
      .SHIFTIN2()
    );
assign outdata = {Q6,Q5,Q4,Q3,Q2,Q1};   

三、仿真结果
不使用Bitslip功能的仿真结果:
Xilinx 7 Series FPGAs SelectIO —— ISERDESE2(Input Serial-to-Parallel Logic Resources)的一个测试_第1张图片
在中间开启bitslip功能,注意第二个数取位后移了一位:
Xilinx 7 Series FPGAs SelectIO —— ISERDESE2(Input Serial-to-Parallel Logic Resources)的一个测试_第2张图片
注意:
Bitslip的移位并不是首尾循环

Although the repeating pattern seems to show that bitslip is a barrel shifting operation,
this is not the case. A bitslip operation adds one bit to the input data stream and loses the
nth bit in the input data stream. This causes the operation on repetitive patterns to appear
like a barrel shifter operation.——UG471 -pg159

你可能感兴趣的:(FPGA)