LVDS系列20:Xilinx 7系ISERDESE2原语(一)

Xilinx 7系FPGA bank的io单元如下:

Hr bank比hp bank少odelaye2组件,两者的idelaye2组件后面,都有iserdese2组件;

iserdese2组件是一种专用的串并转换器或称解串器,用于高速源同步应用,如大部分LVDS信号解析就属于高速源同步应用;

组件是专用的解串器,避免了fpga逻辑实现,支持单数据数率SDR和双数据速率DDR模式;

SDR模式下,支持2/3/4/5/6/7/8位宽并行转换;

DDR模式下,支持4/6/8位宽并行转换;

使用两个级联的iserdese2时,还可以生成10/14位宽的并行转换;

组件还包含Bitslip子模块,bitslip可以让用户重新排序拼接并行数据流,方便接收数据的训练和检测调整;

 原语框图:

左侧输入管脚,右侧输出,

 原语例化:

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)

);

 ISERDESE2端口介绍:

端口O:

1bit,组合输出,该端口为组件未经过寄存器的输出,可以直接来自输入D端口或DDLY端口,从组件的框图可以看出O端口的产生结构,来自一个由OFB、DDLY、D端口输入的IOB多路复用器的输出,没有经过ISERDESE2的组件;

端口Q1~Q8:

iserdese2组件的8bit寄存器输出,1个组件最多支持1:8的串转并,大于8位仅在DDR模式下支持,且最大14bit;

一个并行数据的最先输入的1个bit数据,将会出现在最高位的Q8上;

上图是OSERDESE2和ISERDESE2组件的输入输出顺序,

可以看到,OSERDESE2输出端位序与ISERDESE2输入端的位序相反,OSERDESE2输入一个D1~D8,对应ABCDEFGH的数据,输出时,按D1到D8,也就是A到H的并行数据种低位先发的顺序发送数据,

而在ISERDESE2中,先接收到的A放入了最高位Q8,最后接收到的H放入了Q1。

端口SHIFTOUT1、SHIFTOUT2、SHIFTIN1、SHIFTIN2:

想要实现大于8bit的并行转换,需要两个ISERDESE2级联,shift接口用于宽度扩展时ISERDESE2级联,后续仿真时详细讲解位宽扩展结构;

端口BITSLIP:

1bit,高电平有效时执行位滑动操作,与CLKDIV同步;执行后Q1~Q8的输出接口上数据将移动一个bit数据,后续仿真时详细讲解位滑动操作;

端口RST:

高电平有效复位,复位有效时,大部分组件内部触发器将被异步驱动为低,除了Q1Q4这4个接口,因为这4个输出接口复位时驱动的值由参数INIT_Q1 INIT_Q4设置;当把复位信号与CLKDIV同步取消置位,内部逻辑会把取消置位重新定为第一个CLK上升沿,多个ISERDESE2组件的复位信号应该使用同一个复位信号,复位信号需至少保持两个CLKDIV时钟周期,且复位取消后两个CLKDIV时钟周期后输出数据才有效;

端口CLK:

高速时钟输入,该时钟应该与高速串行输入数据同步;

端口CLKB:

高速次级时钟对输入串行数据流进行同步;当INTERFACE_TYPE设置为除MEMORY_QDR的模式下,CLKB与CLK反相,在MEMORY_QDR模式下,CLKB连接到特定相位偏移的时钟;

端口CLKDIV:

分频时钟输入,通常是CLK的分频版本,该时钟与组件输出的并行数据Q1~Q8同步,还与CE模块,Bitslip子模块同步,其频率取决于解串行化的宽度;

端口CLKDIVP:

只在使用MIG工具,也就是DDR控制器时使用该端口,其他模式将其置0;

端口CE1、CE2:

都是时钟使能输入端口,内部有一个输入时钟使能模块:

可以看到模块中,有CE1和CE2时钟使能输入,

当NUM_CE=1(NUM_CE为组件例化参数)时,不使用CE2输入,CE1输入是直接连接到ISERDESE2中输入寄存器的高有效时钟使能信号;

当NUM_CE=2时,同时使用CE1和CE2输入,CE1在CLKDIV周期的一半启用ISERDESE2,CE2在另一半启用ISERDESE2。

端口OCLK、OCLKB:

高速时钟输入,用于基于选通的存储器接口和过采样模式,当INTERFACE_TYPE设置为为NETWORKING时不使用OCLK;OCLK可用于将基于选通的存储器数据传输到自由运行的时钟域,不适用存储器模式时,端口不使用,OCLKB为OCLK反相时钟;

端口D:

高速串行数据输入端口,仅与IOB配合使用,数据来自IOB;

端口DDLY:

高速串行数据输入端口,仅与IDELAYE2配合使用,输入的数据来自IDLEAYE2延时后的输出;

端口OFB:

OFB端口用于将OSERDESE2上传输的数据反馈回ISERDESE2,且同时需要将参数OFB_USED设置为TRUE,且OSERDESE2和ISERDESE2的DATA_RATE和DATA_WIDTH需要设置相同;

端口DYNCLKDIVSEL、DYNCLKSEL:

DYNCLKDIVSEL置1且DYN_CLKDIV_INV_EN设置TRUE时,CLKDIV反转相位;DYNCLKSEL置1且DYN_CLK_INV_EN设置为TRUE时,CLK和CLKB反转相位;且该操作仅在MEMORY_DDR3和MEMORY_QDR模式下受支持;

例化参数和其他细节下一节讲解;

本文章由威三学社出品

对课程感兴趣可以私信联系

相关推荐
步达硬件6 小时前
【FPGA】DP、HDMI、USB4、GPMI、eDP、LVDS等音视频协议及性能对比
fpga开发
-木槿昔年-1 天前
【米尔-安路MYD-YM90X创意秀】飞龙派学习和PS串口实践
学习·fpga开发
Aaron15881 天前
基于RFSOC+VU13P+GPU架构在雷达电子战的技术
人工智能·算法·fpga开发·架构·硬件工程·信号处理·基带工程
jifengzhiling1 天前
伺服驱动器中DSP与FPGA高效协同架构解析
fpga开发·foc电机控制
太爱学习了1 天前
FPGA图像处理之:图像畸变矫正原理及matlab与fpga实现
图像处理·matlab·fpga开发
技术性摸鱼2 天前
FPGA选型参数
fpga开发
FPGA_小田老师2 天前
ibert 7 Series GT:IBERT远近端(内外)环回测试
fpga开发·ibert·gt测试·近端pcs环回·近端pma环回·远端pcs环回·远端pma环回
尤老师FPGA2 天前
【无标题】
fpga开发
175063319452 天前
VIVADO VLA VIO 硬件调试 降采样
fpga开发
FPGA小迷弟2 天前
基于FPGA开发高速ADC/DAC芯片笔记
图像处理·fpga开发·数据采集·fpga·adc