一、 概况
HDMI信号进入FPGA后,需要通过ISERDESE2原语将高速串行差分信号转换为并行数据。本文档详细描述了HDMI输入配置中的串转并过程,包括ISERDESE2原语的配置、主从级联方式、以及通过控制字符进行数据对齐的方法。
二、 ISERDESE2原语串转并
ser2par模块负责将差分信号转化为10bit的视频信号,主要用到ISERDESE2原语和IDELAYE2原语,接口列表如下:
信号名称 | 输入输出 | 位宽 | 备注 |
pixel_clk | Input | 1 | 像素时钟 |
pixel_clk_5x | Input | 1 | 5倍的像素时钟 |
rst_n | Input | 1 | 低电平有效复位 |
ser_dat_p | Input | 1 | 差分信号p |
ser_dat_n | Input | 1 | 差分信号n |
pixel_10bit | output | 10 | 10bit信号输出 |
首先将差分信号通过IBUFDS转化为单端信号,再通过ISERDESE2原语将单bit数据转化为10bit数据。
三、 ISERDESE2原语配置
3.1、原语例化模版
以下是ISERDESE2原语的例化模板(MASTER模式):
ISERDESE2 #(
.DATA_RATE('DDR'), // DDR, SDR
.DATA_WIDTH(10), // 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(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_MASTER_inst (
.O(O), // 1-bit output: Combinatorial output
// Q1 - Q8: 1-bit (each) output: Registered data outputs
.Q1(par_dat[7]),
.Q2(par_dat[6]),
.Q3(par_dat[5]),
.Q4(par_dat[4]),
.Q5(par_dat[3]),
.Q6(par_dat[2]),
.Q7(par_dat[1]),
.Q8(par_dat[0]),
// SHIFTOUT1, SHIFTOUT2: 1-bit (each) output: Data width expansion output ports
.SHIFTOUT1(shift_dat[0]),
.SHIFTOUT2(shift_dat[1]),
.BITSLIP(1'b0), // 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'b1),
.CLKDIVP(1'b0), // 1-bit input: TBD
// Clocks: 1-bit (each) input: ISERDESE2 clock input ports
.CLK(pixel_clk_5x), // 1-bit input: High-speed clock
.CLKB(~pixel_clk_5x), // 1-bit input: High-speed secondary clock
.CLKDIV(pixel_clk), // 1-bit input: Divided clock
.OCLK(1'b0), // 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(ser_dat), // 1-bit input: Data input
.DDLY(ser_dat), // 1-bit input: Serial data from IDELAYE2 //
.OFB(1'b0), // 1-bit input: Data feedback from OSERDESE2
.OCLKB(1'b0), // 1-bit input: High speed negative edge output clock
.RST(init_rst), // 1-bit input: Active high asynchronous reset
// SHIFTIN1, SHIFTIN2: 1-bit (each) input: Data width expansion input ports
.SHIFTIN1(1'b0),
.SHIFTIN2(1'b0)
);
3.2、属性配置说明
ISERDESE2属性详细说明如下表所示:
属性名称 | 描述 | 取值范围 | 默认值 |
DATA_RATE | 输入的数据流处理模式 | DDR or SDR | DDR |
DATA_WIDTH | 定义串并转换器的位宽。取值范围取决于DATA_RATE的属性(DDR or SDR) | DATA_RATE=DDR: 4、6、8、10、14 DATA_RATE=SDR: 2、3、4、5、6、7、8 | 4 |
DYN_CLKDIV_INV_EN | 控制CLKDIV是否进行取反操作,选择TURE时: DYN_CLK_INV_EN只能为FALSE。 | TURE or FALSE | FALSE |
DYN_CLK_INV_EN | 控制CLK是否进行取翻操作,选择TURE时: DYN_CLKDIV_INV_EN只能为FALSE。 | TURE or FALSE | FALSE |
INTERFACE_TYPE | ISERDESE2的使用模式 | MEMORY、MEMORY_DDR3、 MEMORY_QDR、NETWORKING、OVERSAMPLE | MEMORY |
NUM_CE | 定义时钟使能的数量 | 1 or 2 | 2 |
OFB_USED | 禁用D输入引脚 | TURE or FALSE | FALSE |
SERDES_MOOE | 使用扩展宽度时定义此模块为主模块还是从模块 | MASTER or SLAVE | MASTER |
INIT_Q1~Q4 | 设置***个采样寄存器的初始值 | 0 or 1 | 0 |
SRVAL_Q1~Q4 | 设置第二个采样寄存器复位后的值 | 0 or 1 | 1 |
IOBDELAY | 确定ISERDESE2的输入应用在D或DLAY端口,详情如图7所示 | NONE、IBUF、IFD、BOTH | NONE |
图6
3.3、IOBDELAY路径选择
D和DDRY引脚是ISERSES2的专用输入,D引脚为IOB的直接连接,DDLY引脚与IDELAYE2直接连接。IOBDELAY的配置决定了数据和延时路径的选择。
IOBDELAY的值 | 组合路径(O) | 已注册(Q1~Q8) | |
NONE | D | D | |
IBUF | DDLY | D | |
IFD | D | DDLY | |
BOTH | DDLY | DDLY |
图7
四、接口信号说明
ISERDESE2的接口信号定义如下表所示:
信号名称 | 输入输出 | 位宽 | 描述 |
Q1~Q8 | Output | 1 | 串并转换器的输出,Q8为输出数据的***位 |
O | Output | 1 | 组合输出端口,表示未寄存的输出 |
SHIFTOUT1 | Output | 1 | 进行数据宽度扩展,例如1b转10b时,主模块的2个bit数据通过此端口与从模块的SHIFTIN1连接,使从模块与主模块进行级联
|
SHIFTOUT2 | Output | 1 | |
D | Input | 1 | 来自IOB的串行输入数据 |
DDLY | Input | 1 | 来自IDELAYE2的串行输入数据 |
CLK | Input | 1 | 高速时钟输入 |
CLKB | Input | 1 | 第二个高速时钟输入,仅适用于MEMORY_QDY模式,否则始终连接反向CLK |
CE1、CE2 | Input | 1 | 时钟使能 |
RST | Input | 1 | 高有效复位信号 |
CLKDIV | Input | 1 | 分频时钟输入,通常为CLK的分频版本 |
CLKDIVP | Input | 1 | 仅通过MIG工具支持,只在MEMORY_DDR3模式可使用,其他模式为接地状态。 |
OCLK | Input | 1 | 时钟输入信号,NETWORKING模式用不到 |
OCLKB | Input | 1 | OCLK的反向时钟 |
BITSLIP | Input | 1 | 用于划位操作 |
SHIFTIN1 | Input | 1 | 对于从模块来说,此端口连接主模块SHIFTOUT1 |
SHIFTIN2 | Input | 1 | 对于从模块来说,此端口连接主模块SHIFTOUT2 |
OFB | Input | 1 | 只与OSERDESE2的OFB端口配合使用 |
DYNCLKDIVSEL | Input | 1 | 动态时钟反向引脚,与DYN_CLKDIV_INV_EN共同控制CLKDIV是否进行取反操作 |
DYNCLKSEL | Input | 1 | 动态时钟反向引脚,与DYN_CLK_INV_EN共同控制CLK是否进行取反操作 |
五、总结
本章节主要介绍了ISERDESE2原语的例化接口,并对原语的属性配置,和接口信号进行了说明,每个原语能转化8个单bit数据,剩下两个单bit数据需要增加一个ISERDESE2从原语。后面再对两个原语的级联方式做介绍。
本文章由威三学院出品
对课程感兴趣可以私信联系

京公网安备11022902000513号
