OSERDESE2原语-并串转换

本文详细介绍了OSERDESE2模块的数据并行到串行转换器,包括单/双数据速率模式、三态并行-串行转换器以及相关引脚功能。同时概述了模块的初始化设置和应用方法,如通过MIG工具配置及在HDMI应用中的实例。
摘要由CSDN通过智能技术生成

一、数据并行-串行转换

        —个OSERDESE 2模块中的数据并行到串行转换器接收2〜8位来自 FPGA 逻辑结构内的并行数据 (如果使用OSERDESE2 宽度扩展,则为14位),将数据串行化,并通过 OQ输出将其传送到IO B 。并行数据的串行化按照从数据输入引脚最低到最高的顺序,即在 D 1输入引脚上的数据是第一位发送到OQ 引脚上的。数据并行 -串行转换器有两种模式,既单数据速率(Single Data Rate SDR ) 和双数据速率 (Double Data Rate DD R ) 。
        OSERDESE 2 使 用 时 钟 CLK CLK DIV 进行数据速率转换。 CLK 是高速串行时钟,
C L K D IV 是分频并行时钟。 CLK CLK LDIV 必须相位对齐。在使用该模块之前,必须对 OSERDESE 2 应用复位。O SERDESE 2 包含一个控制数据流 的内部计数器。

二、三态并行-串行转换器

        除数据的并行到串行转换外,OSERDESE 2 模块还包含一个并行到串行转换器,用于IOB的三态控制。与数据转换不同,三态转换器最多只能串行化 4 位并行三态信号。三态转换器不能级联。

三、引脚接触分析

1.示意图

2.基本电路图

3.管脚分析

(1) O Q : 输 出 宽 度 为 1 ) , 数 据 路 径 仅 输 出 到 IOB
(2) OFB : 输 出 (宽 度 为 1 ) , 数据路径输出反馈到 ISERDESE 2 或连接到 ODELAYE 2 。
(3) TQ : 输 出 (宽 度 为 1 ) ,到 IO B 的三状态控制输出。
(4) TFB : 输出,到 F P G A 内逻辑结构的三状态控制输出。
(5) SHIFT 0 U T 1 : 输 出 (宽 度 为 1 ) , 进 位 数 据 输 出 用 于 宽 度 扩 展 。 连 接 到 主
O SERDESE 2 的 S HIFTIN 1 0 SERDESE 2 。
(6) SHIFT 0 UT 2 : 输 出 (宽 度 为 1 ) , 进位数据输出用于宽度扩展。连 接 到 主 OSERDESE 2
SHIFTIN 2 O SERDESE 2 。
(7) C LK : 输 入 (宽 度 为 1 ) , 高速时钟输入。
(8) C LK D IV : 输 入 (宽 度 为 1 ) , 分频时钟输入。时钟延迟元素、解串行化数据和 CE单元。
(9) D 1〜 D 8 : 输 入 (每 个 宽 度 为 1 ) , 并行数据输入。
(10) TCE : 输 入 (宽 度 为 1 ) , 三态时钟使能。
(11) OCE : 输 入 (宽 度 为 1 ) , 输出数据时钟使能。
(12) TB Y TEIN :输入(宽 度 为 1 ) , 字节组三态输入。
(13) TBYTEO U T : 输 出 (宽 度 为 1 ) ,字节组三态输出。
(14) RST : 输 入 (宽 度 为 1 ) , 有效高电平复位。
(15) SHIFTIN 1 : 输 入 宽度为1) ,进位数据宽度扩展输入。连接到从 OSERDESE 2的SHIFTOUT 1。
(16) SHIFTIN 2 :输入(宽 度 为 1 ) , 进 位 数 据 宽 度 扩 展 输 入 。连 接 到 从 OSERDESE 2
SH 1 FTOUT 2 。
(17) T 1〜 T 4 : 输 入 (每 个 宽 度 为 1 ) , 并行三态输入。
OSERDESE2 原语的属性
属 性
描述值 默认值
D A T A _ R A T E _ O Q
定 义 是 在 每 个 时 钟 沿 还 是 只 在 时
钟 的 上 升 沿 改 变 数 据 ( O Q )
字 符 串 : S D R D D R
D D R
D A T A _ R A T E _ T Q
定 义 是 在 每 个 时 钟 沿 还 是 只 在 时
钟 的 上 升 沿 改 变 三 态 ( T Q ) , 或 者
设 置 为 缓 冲 E 配 置
字 符 串 : B U F/SD R /D D R
D D R
D A T A _ W ID T H
定 义 并 行 -串 行 数 据 转 换 器 的 宽
度 。 这 个 值 取 决 于
D A T A _ R A T E _ O Q 的值
整 数 : 2 3 4 5 6
7 8 、 10 1 4
S D R 模 式 下 , 2 3 4 、 5、 6 、 7 、和 8 是 有 效 的 。
D D R 模 式 下 , 2 4 、 6 、 8 、 1 0 1 4 是 有效的
4
S E R D E S M O D E
当 使 用 宽 度 扩 展 时 , 定 义
O S E R D E S E 2 是 主 还 是 从
字 符 串 :
M A S T E R /S L A V E
M A S T E R
T R IS T A T E W ID TH
定 义 并 行 - 串 行 3 态 转 换 器 的 宽 度
整 数 : 1 4
4
T B Y T E _ C T L
只 用 于 通 过 M I G 工 具         
F A L S E /T R U E
F A L S E
T B Y T E S R C
只 用 于 通 过 M G 工 具
F A L S E /T R U EF A L S E

4.主从机连接示意图

四、应用方法

相信你们也不愿意看上面的废话,那么就来点实际有用的东西,直接展示

原语原本模样

   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
   );

HDMI使用原语

module par_to_ser(
    input   wire            sys_clk     ,
    input   wire            sys_clk_5x  ,
    input   wire            sys_rst_n   ,
    input   wire    [9:0]   data_in     ,   
    output  wire            data_p      ,
    output  wire            data_n      
    );

    
wire    shift_data1;
wire    shift_data2;

wire    data;

 OSERDESE2 #(
      .DATA_RATE_OQ("DDR"),   // DDR, SDR
      .DATA_RATE_TQ("DDR"),   // 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)
   )
   OSERDESE2_inst1 (
      .OFB(),             // 1-bit output: Feedback path for data
      .OQ(data),               // 1-bit output: Data path output
      // SHIFTOUT1 / SHIFTOUT2: 1-bit (each) output: Data output expansion (1-bit each)
      .SHIFTOUT1(),
      .SHIFTOUT2(),
      .TBYTEOUT(),   // 1-bit output: Byte group tristate
      .TFB(),             // 1-bit output: 3-state control
      .TQ(),               // 1-bit output: 3-state control
      .CLK(sys_clk_5x),             // 1-bit input: High speed clock
      .CLKDIV(sys_clk),       // 1-bit input: Divided clock
      // D1 - D8: 1-bit (each) input: Parallel data inputs (1-bit each)
      .D1(data_in[0]),
      .D2(data_in[1]),
      .D3(data_in[2]),
      .D4(data_in[3]),
      .D5(data_in[4]),
      .D6(data_in[5]),
      .D7(data_in[6]),
      .D8(data_in[7]),
      .OCE(1),             // 1-bit input: Output data clock enable
      .RST(~sys_rst_n),             // 1-bit input: Reset
      // SHIFTIN1 / SHIFTIN2: 1-bit (each) input: Data input expansion (1-bit each)
      .SHIFTIN1(shift_data1),
      .SHIFTIN2(shift_data2),
      // T1 - T4: 1-bit (each) input: Parallel 3-state inputs
      .T1(0),
      .T2(0),
      .T3(0),
      .T4(0),
      .TBYTEIN(0),     // 1-bit input: Byte group tristate
      .TCE(0)              // 1-bit input: 3-state clock enable
   );
   
OSERDESE2 #(
      .DATA_RATE_OQ("DDR"),   // DDR, SDR
      .DATA_RATE_TQ("DDR"),   // 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)
   )
   OSERDESE2_inst2 (
      .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(shift_data1),
      .SHIFTOUT2(shift_data2),
      .TBYTEOUT(),   // 1-bit output: Byte group tristate
      .TFB(),             // 1-bit output: 3-state control
      .TQ(),               // 1-bit output: 3-state control
      .CLK(sys_clk_5x),             // 1-bit input: High speed clock
      .CLKDIV(sys_clk),       // 1-bit input: Divided clock
      // D1 - D8: 1-bit (each) input: Parallel data inputs (1-bit each)
      .D1(0),
      .D2(0),
      .D3(data_in[8]),
      .D4(data_in[9]),
      .D5(0),
      .D6(0),
      .D7(0),
      .D8(0),
      .OCE(1),             // 1-bit input: Output data clock enable
      .RST(~sys_rst_n),             // 1-bit input: Reset
      // SHIFTIN1 / SHIFTIN2: 1-bit (each) input: Data input expansion (1-bit each)
      .SHIFTIN1(),
      .SHIFTIN2(),
      // T1 - T4: 1-bit (each) input: Parallel 3-state inputs
      .T1(0),
      .T2(0),
      .T3(0),
      .T4(0),
      .TBYTEIN(0),     // 1-bit input: Byte group tristate
      .TCE(0)              // 1-bit input: 3-state clock enable
   );
   
OBUFDS #(
      .IOSTANDARD("TMDS33"), // Specify the output I/O standard
      .SLEW("SLOW")           // Specify the output slew rate
   ) OBUFDS_inst (
      .O (data_p),     // Diff_p output (connect directly to top-level port)
      .OB(data_n),   // Diff_n output (connect directly to top-level port)
      .I(data)      // Buffer input
   );
endmodule

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值