SERDESE各信号意思(记录)

   涉及各信号的意思,不涉及实操,不过一般明白各信号意思后也能进行操作。

一、OSERDESE2

   1、OSERDESE2 源语
   OSERDESE2 #(
      .DATA_RATE_OQ("DDR"),   // DDR, SDR
      .DATA_RATE_TQ("DDR"),   // DDR, BUF, SDR
      .DATA_WIDTH(4),         // Parallel data width (2-8,10,14)
      .INIT_OQ(1'b0),         // Initial value of OQ output (1'b0,1'b1)
      .INIT_TQ(1'b0),         // Initial value of TQ output (1'b0,1'b1)
      .SERDES_MODE("MASTER"), // MASTER, SLAVE
      .SRVAL_OQ(1'b0),        // OQ output value when SR is used (1'b0,1'b1)
      .SRVAL_TQ(1'b0),        // TQ output value when SR is used (1'b0,1'b1)
      .TBYTE_CTL("FALSE"),    // Enable tristate byte operation (FALSE, TRUE)
      .TBYTE_SRC("FALSE"),    // Tristate byte source (FALSE, TRUE)
      .TRISTATE_WIDTH(4)      // 3-state converter width (1,4)
   )
   OSERDESE2_inst (
      .OFB(OFB),             // 1-bit output: Feedback path for data
      .OQ(OQ),               // 1-bit output: Data path output
      // SHIFTOUT1 / SHIFTOUT2: 1-bit (each) output: Data output expansion (1-bit each)
      .SHIFTOUT1(SHIFTOUT1),
      .SHIFTOUT2(SHIFTOUT2),
      .TBYTEOUT(TBYTEOUT),   // 1-bit output: Byte group tristate
      .TFB(TFB),             // 1-bit output: 3-state control
      .TQ(TQ),               // 1-bit output: 3-state control
      .CLK(CLK),             // 1-bit input: High speed clock
      .CLKDIV(CLKDIV),       // 1-bit input: Divided clock
      // D1 - D8: 1-bit (each) input: Parallel data inputs (1-bit each)
      .D1(D1),
      .D2(D2),
      .D3(D3),
      .D4(D4),
      .D5(D5),
      .D6(D6),
      .D7(D7),
      .D8(D8),
      .OCE(OCE),             // 1-bit input: Output data clock enable
      .RST(RST),             // 1-bit input: Reset
      // SHIFTIN1 / SHIFTIN2: 1-bit (each) input: Data input expansion (1-bit each)
      .SHIFTIN1(SHIFTIN1),
      .SHIFTIN2(SHIFTIN2),
      // T1 - T4: 1-bit (each) input: Parallel 3-state inputs
      .T1(T1),
      .T2(T2),
      .T3(T3),
      .T4(T4),
      .TBYTEIN(TBYTEIN),     // 1-bit input: Byte group tristate
      .TCE(TCE)              // 1-bit input: 3-state clock enable
   );

      2、控制端口各信号意思

        讲解信号意思前先将其分开理解,因为这个源语中包括单端和差分两个数据信号操作,两个的区分为信号前面带T的即可理解为三态门,比如TQ和OQ。

     .DATA_RATE_OQ("DDR"),   // DDR, SDR
      .DATA_RATE_TQ("DDR"),   // DDR, BUF, SDR
      .DATA_WIDTH(4),         // Parallel data width (2-8,10,14)
      .INIT_OQ(1'b0),         // Initial value of OQ output (1'b0,1'b1)
      .INIT_TQ(1'b0),         // Initial value of TQ output (1'b0,1'b1)
      .SERDES_MODE("MASTER"), // MASTER, SLAVE
      .SRVAL_OQ(1'b0),        // OQ output value when SR is used (1'b0,1'b1)
      .SRVAL_TQ(1'b0),        // TQ output value when SR is used (1'b0,1'b1)
      .TBYTE_CTL("FALSE"),    // Enable tristate byte operation (FALSE, TRUE)
      .TBYTE_SRC("FALSE"),    // Tristate byte source (FALSE, TRUE)
      .TRISTATE_WIDTH(4)      // 3-state converter width (1,4)

       首先第一个信号是DATA_RATE_OQ,这个信号是单端信号模式选择,有两种模式,分别是DDR和SDR两种,DDR为双边沿采样、SDR为单边沿采样。DATA_RATE_TQ和这个一样的,只不过是三态门操作的。

       第二个信号是DATA_WIDTH,这个是数据的位宽,最少为2位宽,需要注意的是小于等于8位宽的时候,如果是奇数位宽就必须采用SDR模式,一个OSERDESE最高可以操作8位宽的,10和14位宽需要两个OSERDESE级联,后续会讲解到。

       第三个信号是INIT_OQ,这个信号是数据初始化的值,只有0和1两种选择,这个跟咱们输入的数据的空闲时间有关,INIT_TQ和这个一样。

       第四个信号是SERDES_MODE,这个是SERDES的模式选择,在小于、等于8位宽操作的时候可以随便选择,在10、14位宽的时候因为设计到两个源语的级联,因此需要将一个源语命名为MASTER,另一个命名为SLAVE;

      第五个信号是SRVAL_OQ,这个信号是复位时的输出值为什么,只有0和1两种选择,SRVAL_TQ和这个一样。

      第六个信号TBYTE_CTL  / .TBYTE_SRC 为三态门字节的操作和来源,在这里只有两种选项,分别为真实TRUE和虚假FALSE,用到就选择真实,不用三态门就选择虚假即可。

    第六个信号TRISTATE_WIDTH为延时时钟数,在这里只有两种选择,分别是延时1个时钟周期和四个时钟周期,根据自己需求选择即可。

  3、数据端口

      .OFB(OFB),             // 1-bit output: Feedback path for data
      .OQ(OQ),               // 1-bit output: Data path output
      // SHIFTOUT1 / SHIFTOUT2: 1-bit (each) output: Data output expansion (1-bit each)
      .SHIFTOUT1(SHIFTOUT1),
      .SHIFTOUT2(SHIFTOUT2),
      .TBYTEOUT(TBYTEOUT),   // 1-bit output: Byte group tristate
      .TFB(TFB),             // 1-bit output: 3-state control
      .TQ(TQ),               // 1-bit output: 3-state control
      .CLK(CLK),             // 1-bit input: High speed clock
      .CLKDIV(CLKDIV),       // 1-bit input: Divided clock
      // D1 - D8: 1-bit (each) input: Parallel data inputs (1-bit each)
      .D1(D1),
      .D2(D2),
      .D3(D3),
      .D4(D4),
      .D5(D5),
      .D6(D6),
      .D7(D7),
      .D8(D8),
      .OCE(OCE),             // 1-bit input: Output data clock enable
      .RST(RST),             // 1-bit input: Reset
      // SHIFTIN1 / SHIFTIN2: 1-bit (each) input: Data input expansion (1-bit each)
      .SHIFTIN1(SHIFTIN1),
      .SHIFTIN2(SHIFTIN2),
      // T1 - T4: 1-bit (each) input: Parallel 3-state inputs
      .T1(T1),
      .T2(T2),
      .T3(T3),
      .T4(T4),
      .TBYTEIN(TBYTEIN),     // 1-bit input: Byte group tristate
      .TCE(TCE)              // 1-bit input: 3-state clock enable

     第一个信号为OFB路径反馈,这个信号一般不关心(没用过)。

    第二个信号为OQ,为单端的信号输出。

    第三个信号为SHIFTOUT1/SHIFTOUT2,这个信号只有在当前源语处于从模式的时候才使用,处于从模式的时候,将此信号与主模式源语的SHIFTIN1/SHIFTIN2进行连接即可实现两个源语的级联。

    第四个信号TBYTEOUT/TFB,是关于三态门的操作,一般不关心。

    第五个信号为TQ,是三态门的数据输出操作。

    第六个信号为CLK/CLKDIV,对于这两个时钟信号,只需要记住一句话即可CLKDIV一定比CLK慢。

    第七个信号为D,这信号为输入的数据,当数据小于等于8的时候按照正常情况对应位操作即可,如果是10或者14的时候需要用到级联操作,那么从模式的源语的D1和D2是不能操作的,必须得将其置为0;

     第8个信号为CE和RST,他们都是高有效,分别为使能核复位信号,使能信号可以直接为1,复位尽量跟系统复位的时间一样即可。

      第9个信号T / IN / TCE 它们为三态门的各信号,分别为数据、EN信号(1的时候为out、0的时候数据为Z)、使能信号。

4、10bit 级联操作(单端)

      具体代码如下,时钟分别为50MHZ和5×50MHZ,这里时钟×5的原因是因为才用的是双边沿采样。

 OSERDESE2 #(

      .DATA_RATE_OQ("DDR"),   // DDR, SDR

      .DATA_RATE_TQ("SDR"),   // DDR, BUF, SDR

      .DATA_WIDTH(10),         // Parallel data width (2-8,10,14)

      .INIT_OQ(1'b0),         // Initial value of OQ output (1'b0,1'b1)初始值

      .INIT_TQ(1'b0),         // Initial value of TQ output (1'b0,1'b1)

      .SERDES_MODE("MASTER"), // MASTER, SLAVE

      .SRVAL_OQ(1'b0),        // OQ output value when SR is used (1'b0,1'b1)复位初始值

      .SRVAL_TQ(1'b0),        // TQ output value when SR is used (1'b0,1'b1)

      .TBYTE_CTL("FALSE"),    // Enable tristate byte operation (FALSE, TRUE)

      .TBYTE_SRC("FALSE"),    // Tristate byte source (FALSE, TRUE)

      .TRISTATE_WIDTH(1)      // 3-state converter width (1,4)

   )

   MASTER_inst (

      .OQ(odata),               // 1-bit output: Data path output

      .TQ(),               // 1-bit output: 3-state control

      .CLK(clk_p5),             // 1-bit input: High speed clock

      .CLKDIV(clk),       // 1-bit input: Divided clock

      // D1 - D8: 1-bit (each) input: Parallel data inputs (1-bit each)

      .D1(idata[0]),

      .D2(idata[1]),

      .D3(idata[2]),

      .D4(idata[3]),

      .D5(idata[4]),

      .D6(idata[5]),

      .D7(idata[6]),

      .D8(idata[7]),

      .OCE(1'b1),             // 1-bit input: Output data clock enable

      .RST(~rst_n),             // 1-bit input: Reset

      // SHIFTIN1 / SHIFTIN2: 1-bit (each) input: Data input expansion (1-bit each)

      .SHIFTIN1(shiftin0),

      .SHIFTIN2(shiftin1),

      // T1 - T4: 1-bit (each) input: Parallel 3-state inputs

      .T1(1'b0),

      .T2(1'b0),

      .T3(1'b0),

      .T4(1'b0),

      .TBYTEIN(1'b0),      // 1-bit input: Byte group tristate

      .TCE(1'b0)              // 1-bit input: 3-state clock enable

   );

 OSERDESE2 #(

      .DATA_RATE_OQ("DDR"),   // DDR, SDR

      .DATA_RATE_TQ("SDR"),   // DDR, BUF, SDR

      .DATA_WIDTH(10),         // Parallel data width (2-8,10,14)

      .INIT_OQ(1'b0),         // Initial value of OQ output (1'b0,1'b1)

      .INIT_TQ(1'b0),         // Initial value of TQ output (1'b0,1'b1)

      .SERDES_MODE("SLAVE"), // MASTER, SLAVE

      .SRVAL_OQ(1'b0),        // OQ output value when SR is used (1'b0,1'b1)

      .SRVAL_TQ(1'b0),        // TQ output value when SR is used (1'b0,1'b1)

      .TBYTE_CTL("FALSE"),    // Enable tristate byte operation (FALSE, TRUE)

      .TBYTE_SRC("FALSE"),    // Tristate byte source (FALSE, TRUE)

      .TRISTATE_WIDTH(1)      // 3-state converter width (1,4)

   )

   SLAVE_inst (

      .OFB(),             // 1-bit output: Feedback path for data

      .OQ (),               // 1-bit output: Data path output

      // SHIFTOUT1 / SHIFTOUT2: 1-bit (each) output: Data output expansion (1-bit each)

      .SHIFTOUT1(shiftin0),

      .SHIFTOUT2(shiftin1),

      .CLK(clk_p5),             // 1-bit input: High speed clock

      .CLKDIV(clk),       // 1-bit input: Divided clock

      // D1 - D8: 1-bit (each) input: Parallel data inputs (1-bit each)

      .D1(1'b0),

      .D2(1'b0),

      .D3(idata[8]),

      .D4(idata[9]),

      .D5(1'b0),

      .D6(1'b0),

      .D7(1'b0),

      .D8(1'b0),

      .OCE(1'b1),             // 1-bit input: Output data clock enable

      .RST(~rst_n),             // 1-bit input: Reset

      // T1 - T4: 1-bit (each) input: Parallel 3-state inputs

      .T1(1'b0),

      .T2(1'b0),

      .T3(1'b0),

      .T4(1'b0),

      .TBYTEIN(1'b0),     // 1-bit input: Byte group tristate

      .TCE(1'b0)              // 1-bit input: 3-state clock enable

   );

二、ISERDESE 

     1、源语

   ISERDESE2 #(
      .DATA_RATE("DDR"),           // DDR, SDR
      .DATA_WIDTH(4),              // 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("MEMORY"),   // MEMORY, MEMORY_DDR3, MEMORY_QDR, NETWORKING, OVERSAMPLE
      .IOBDELAY("NONE"),           // NONE, BOTH, IBUF, IFD
      .NUM_CE(2),                  // 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(O),                       // 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(SHIFTOUT1),
      .SHIFTOUT2(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(CE1),
      .CE2(CE2),
      .CLKDIVP(CLKDIVP),           // 1-bit input: TBD
      // Clocks: 1-bit (each) input: ISERDESE2 clock input ports
      .CLK(CLK),                   // 1-bit input: High-speed clock
      .CLKB(CLKB),                 // 1-bit input: High-speed secondary clock
      .CLKDIV(CLKDIV),             // 1-bit input: Divided clock
      .OCLK(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(DYNCLKDIVSEL), // 1-bit input: Dynamic CLKDIV inversion
      .DYNCLKSEL(DYNCLKSEL),       // 1-bit input: Dynamic CLK/CLKB inversion
      // Input Data: 1-bit (each) input: ISERDESE2 data input ports
      .D(D),                       // 1-bit input: Data input
      .DDLY(DDLY),                 // 1-bit input: Serial data from IDELAYE2
      .OFB(OFB),                   // 1-bit input: Data feedback from OSERDESE2
      .OCLKB(OCLKB),               // 1-bit input: High speed negative edge output clock
      .RST(RST),                   // 1-bit input: Active high asynchronous reset
      // SHIFTIN1, SHIFTIN2: 1-bit (each) input: Data width expansion input ports
      .SHIFTIN1(SHIFTIN1),
      .SHIFTIN2(SHIFTIN2)
   );

 2、控制端口及各信号意思

      .DATA_RATE("DDR"),           // DDR, SDR
      .DATA_WIDTH(4),              // 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("MEMORY"),   // MEMORY, MEMORY_DDR3, MEMORY_QDR, NETWORKING, OVERSAMPLE
      .IOBDELAY("NONE"),           // NONE, BOTH, IBUF, IFD
      .NUM_CE(2),                  // 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)

       这里只讲解咱们OSERDESE2没有的信号,这里INIT_Q1 - INIT_Q4、SRVAL_Q1 - SRVAL_Q4两个跟咱们前面一样,只不过是分别控制。

2、数据端口

       .O(O),                       // 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(SHIFTOUT1),
      .SHIFTOUT2(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(CE1),
      .CE2(CE2),
      .CLKDIVP(CLKDIVP),           // 1-bit input: TBD
      // Clocks: 1-bit (each) input: ISERDESE2 clock input ports
      .CLK(CLK),                   // 1-bit input: High-speed clock
      .CLKB(CLKB),                 // 1-bit input: High-speed secondary clock
      .CLKDIV(CLKDIV),             // 1-bit input: Divided clock
      .OCLK(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(DYNCLKDIVSEL), // 1-bit input: Dynamic CLKDIV inversion
      .DYNCLKSEL(DYNCLKSEL),       // 1-bit input: Dynamic CLK/CLKB inversion
      // Input Data: 1-bit (each) input: ISERDESE2 data input ports
      .D(D),                       // 1-bit input: Data input
      .DDLY(DDLY),                 // 1-bit input: Serial data from IDELAYE2
      .OFB(OFB),                   // 1-bit input: Data feedback from OSERDESE2
      .OCLKB(OCLKB),               // 1-bit input: High speed negative edge output clock
      .RST(RST),                   // 1-bit input: Active high asynchronous reset
      // SHIFTIN1, SHIFTIN2: 1-bit (each) input: Data width expansion input ports
      .SHIFTIN1(SHIFTIN1),
      .SHIFTIN2(SHIFTIN2)

      可以看到这里有一个CE1、CE2两个信号,他们分别是差分的两个使能信号,直接为1即可。

      CLK和CLKB他们为输入差分时钟。

      CLKDIVP,这个信号为IB信号,一般直接置0即可。

      下面讲解ISERDESE2最重要的信号BITSLIP,即信号对齐信号,这个信号为字节对齐信号,其作用为:咱们接收到的数据不可能一次就对的,因此需要咱们进行数据对齐,比如说咱们空闲的时候发送的是55,这个时候咱们接收到的数据如果不是55的话BITSLIP信号就拉高,这个时候源语内部就会移动一位,使其内部接收进行变化,一直重复上述操作到识别到55后,BITSLIP就一直不拉高,表示现在接收到的是正确的数据。

    但是在ISERDESE3/1是没有这个信号的,这个时候我们就可以采用组合选取的方式来实现对齐操作,比如咱们的数据位宽为8,那个将连续接收到的两个信号进行拼接,然后再来寻找咱们55在哪里,假设识别到了咱们的55为1-9,那么后续输出的值都是1-9这个值,其他就不用管它,这个思路也叫字节对齐思路,在咱们MIPI、GTX等高速接口上应用很多。

       

ISERDESE3是Xilinx FPGA的一种原语,用于实现高速串行输入数据的解串和时钟恢复。它是SERDESE2的升级版,具有更高的性能和更多的功能。ISERDESE3可以用于将串行数据信号转换为并行数据信号,并通过提供的时钟信号对其进行重新同步。 ISERDESE3具有多个参数和属性,可以根据应用的需求进行配置。其中,一些重要的参数包括数据宽度、输入数据时钟的相位、时钟边沿对齐方式等。它还提供了一些附加功能,如数据对齐、极性反转和时钟使能等。这些功能可以根据具体的设计需求进行配置。 通过使用ISERDESE3原语,可以实现高速串行数据的可靠传输和处理。它在摄像头数据等高速源同步应用中具有广泛的应用。 在给定的代码示例中,ISERDESE3可能用于解串行输入数据,并将其转换为并行数据,以供后续的逻辑电路处理。在该示例中,sys_clk_i和ext_rst_n信号用于控制ISERDESE3的操作,并且tx_clk_out信号可能是ISERDESE3输出的时钟信号。 综上所述,ISERDESE3是Xilinx FPGA中用于高速串行数据解串和时钟恢复的原语,具有广泛的应用和可配置的功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [xilinx fpga 原语 OSERDESE2 使用 方法](https://blog.csdn.net/zyf0806/article/details/108518282)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [《Xilinx - UG471中文翻译》(2)ISERDESE2原语介绍](https://blog.csdn.net/m0_52840978/article/details/120982593)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值