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模式下受支持;

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

本文章由威三学社出品

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

相关推荐
千宇宙航4 小时前
闲庭信步使用图像验证平台加速FPGA的开发:第九课——图像插值的FPGA实现
图像处理·计算机视觉·缓存·fpga开发
XINVRY-FPGA21 小时前
XCZU47DR-2FFVG1517I Xilinx FPGA AMD ZynqUltraScale+ RFSoC
人工智能·嵌入式硬件·fpga开发·信息与通信·信号处理·射频工程·fpga
forgeda1 天前
如何将FPGA设计的验证效率提升1000倍以上(3)
fpga开发·在线调试·硬件断点
千宇宙航2 天前
闲庭信步使用图像验证平台加速FPGA的开发:第六课——测试图案的FPGA实现
图像处理·计算机视觉·fpga开发
顾北川_野2 天前
Android ttyS2无法打开该如何配置 + ttyS0和ttyS1可以
android·fpga开发
霖002 天前
C++学习笔记三
运维·开发语言·c++·笔记·学习·fpga开发
千宇宙航2 天前
闲庭信步使用图像验证平台加速FPGA的开发:第七课——获取RAW图像
图像处理·计算机视觉·fpga开发
hahaha60162 天前
xilinx fpga芯片的结温
fpga开发
北城笑笑2 天前
FPGA 47 ,MIG 内存接口生成器深度解析( FPGA 中的 MIG 技术 )
fpga开发·fpga