- 2023-01-16
-
发表了主题帖:
MDY全功能底板MP5705PCIE*8GEN3.0
-
发表了日志:
MDY全功能底板MP5705PCIE*8GEN3.0
- 2023-01-11
-
发表了主题帖:
明德扬基于XILINXK7核心板325T/410T
- 2023-01-04
-
发表了主题帖:
明德扬基于XILINXK7核心板325T/410T
- 2023-01-03
-
发表了主题帖:
明德扬专业定制FPGA开发板
*产品定制
提供软硬件定制服务:
FPGA板卡定制;
核心板模块定制;
FMC等子板模块定制;
FPGA全栈设计服务:FPGA系统设计从高速硬件或HDL固件,从技术参数和实现到原型和量产;
信号测量、数据采集、图像处理等技术开发定制;原理图审核、现场技术支持/培训等灵活合作模式。
- 2022-12-26
-
发表了日志:
明德扬 mdyFmcAd9653-ADC 系列采集板
- 2022-10-20
-
发表了主题帖:
明德扬专业定制FPGA开发板
*产品定制
提供软硬件定制服务:
FPGA板卡定制;
核心板模块定制;
FMC等子板模块定制;
FPGA全栈设计服务:FPGA系统设计从高速硬件或HDL固件,从技术参数和实现到原型和量产;
信号测量、数据采集、图像处理等技术开发定制;原理图审核、现场技术支持/培训等灵活合作模式。
-
发表了日志:
明德扬专业定制FPGA开发板
- 2022-08-15
-
发表了主题帖:
利用IBERT IP核实现GTX收发器硬件误码率测试实例
利用IBERT IP核实现GTX收发器硬件误码率测试实例
作者:潘文明
引言
Vivado中提供了1种IBERT工具用于对Xilinx FPGA芯片的高速串行收发器进行板级硬件测试。通过IBERT我们可以获取误码率,观察眼图,调节串行收发器的参数,从而有助于判断可能存在的问题,便于验证硬件的稳定性和信号完整性。本测试实例教程使用IBERT工具对与SFP连接的GTX进行5 Gbps速率下的测试。从误码率和眼图两个角度来验证电路板GTX部分工作的稳定性和可靠性。本测试实例基于Vivado 2019.1版本开发。
本测试实例是在购买的明德扬(MDY) K7核心板上进行的,这款核心板能够方便二次开发利用。在FPGA 芯片的HP 端口上挂载了4片DDR3存储芯片,每片DDR3 容量512 MB 字节,组成64bit 位的数据位宽。4个板对板连接器扩展出了276个IO,全部IO的电平可以通过更换核心板上的磁珠来修改,满足用户对+3.3V、+2.5V、+1.5V电平接口的需求,另外也扩展出了16对高速收发器GTX接口。供电范围大,5-12V电压均可。通过手册了解到同一个BANK管脚到连接器接口之间走线做了等长和差分处理。该核心板的结构示意图如图1。
图1 该核心板结构示意图
测试原理
IBERT中的BERT是Bit Error Ratio Test的缩写,指比特出错概率测试,简而言之就是误码率测试。误码率(Bit Error Rate,BER)作为高速数据传输技术中的重要指标,它代表了数据传输的可靠性。对于数字通信系统,BER可以定义为出现错误码的估计概率。这意味着任何通过系统传输的比特都可能被错误地接收。因此,发送的“1”接收到为“0”,或传输为“0”被接收到的为“1”。在实际测试中,误码率是通过系统传输一定比特的比特数和计算接收到的不正确的比特数来测量的。误码率是接收到的错误比特数与传输的总比特数之比。利用累积分布函数定义置信系数SLC(Statistical Level of Confidence):
式中,N为传输中发生错误的比特数,n为传输的总的比特数,p = 10-12,通过置信系数得到在传输n bit后误码率为:
式中,BER 传输n bit发生错误概率,ln[.]是自然对数。当没有检测到错误(N = 0)时,式5.7中的第二项等于零,方程的求解得到了很大的简化。
首先对明德扬Xilinx K7核心板光纤接口进行了误码率。Vivado中IBERT工具的测试原理是通过收发器由外部回环进行自收自发而实现。就是将同一组收发器的TX和RX进行短接,TX发送端通过发送某种特定序列的数据流,在RX接收端接收后,通过比对发送和接收的数据,从而得出接收端误码的统计值。将光模块插入SFP屏蔽笼内,然后通过单根光纤将光模块的TX和RX短接,便可以通过IBERT工具对GTX进行测试。
QUAD(GTX BANK)、CHANNEL、GTX间的关系
首先可以从图2中看到XC7K325T中共有16个GTX,每4个GTX组成一个Bank,称为Quad,即XC7K325T芯片共有4个Quad。
图2 Kintex-7 FPGA(XC7K325T)GTX结构图
如图3所示,具体看Quad布局图,可以看到一个Quad包含4个GTX_channel(简称GTX或channel)和一个QPLL。
图3 Quad布局图
所以Kintex-7 FPGA(XC7K325T)中quad、channel、GTX相互关系如图4所示。1个Quad中有2个参考时钟(REFCLK0,REFCLK1),根据板卡设计图可知具体使用REFCLK0还是REFCLK1,参考时钟频率应根据核心板实际晶振频率来选择。
图4 quad、channel、gtx相互关系
测试结果
通过新建IP核工程,为IBERT协议配置定义界面,IP核有一些预置的协议,如收发器线速率选择,位宽选择,收发器参考时钟来源和频率等。本设计SFP+来自Quad116,参考时钟来自MGTREFCLK1_116。本设计将GTX收发器参考输入时钟作为其系统时钟。之后例化,生成bit流文件,完成FPGA配置文件生成。按照测试原理,我们将SFP+的光纤模块的TX和RX短接,如图5所示。连接好硬件,将bit文件下载到硬件电路板。
图5 硬件实物图与连接
选择需要查看眼图的链路,眼图参数可以使用默认参数,收发器眼图测试结果如图6所示。
图6 测试收发器眼图
利用单根光纤将光模块输入输出短接进行回环测试,使用IBERT IP核测试,通过Xilinx下载器将数据读出。回环测试序列使用PRBS-31。每2小时记录一次数据,总共测试48小时。测试结果如图7所示,横坐标为时间,连续运行48小时后,纵坐标为误码率,光纤通信误码率为2 × 10-15,速率稳定在5 Gbps,除去编码开销实际速率为4 Gbps,满足一般的速率需求。
图7 误码率测试
总结
通过环回方式的误码率测试,可判断出存在的问题以及测试出板卡实际支持的速率。IBERT可在运行过程中设置高速串行收发通道的各项参数,并提供了多种环回模式及多种测试激励源,并可通过自动扫描测试,确定收发的最佳参数。可以满足硬件测试时对高速串行收发通道信号测试的大部分需求,在故障定位等场合均可使用。
-
发表了日志:
利用IBERT IP核实现GTX收发器硬件误码率测试实例
- 2022-08-12
-
发表了日志:
支持jesd204b协议高速DAC芯片AD9144-FMC-EBZ配置笔记
-
发表了主题帖:
支持jesd204b协议高速DAC芯片AD9144-FMC-EBZ配置笔记
一、背景
AD9144是一款支持jesd204b协议高速DAC芯片。AD9144-FMC-EBZ是基于AD9144的评估板(Evaluation Board),它是主要由AD9144,AD9516,与PIC16F单片机组成的系统。工程上使用AD9144具有时钟时序要求很高和寄存器配置复杂的难点。
配置AD9144-FMC-EBZ,有两种途径:
1、通过FPGA母板,经由FMC接口,使用SPI配置寄存器
2、通过ADI提供的软件工具,配合母板(ADS7)来配置寄存器,如图所示:
官方的指导说明链接:https://wiki.analog.com/resources/eval/dpg/ad9144-fmc-ebz
遇到问题:
我们在尝试第一种方法的时候,遇到了SPI寄存器写不进的情况和读写不一致的情况。
而第二种方法则需要ADS7用作母板。
二、调试
在明德扬潘老师的帮助下,完成了以KC705作为母板,正确配置AD9144,并输出62.5MHz正弦波。
整个流程需要先在KC705上运行提供的HDL工程,随后进入软件工具配置流程。这里的HDL工程主要完成的是:Jesd204发送端的配置与正弦余弦信号的输出。另外,这里的软件工具配置流程既使用ADI官方提供的工具对AD9144和AD9516分别进行配置。
在调试开始前,硬件链接如下图所示:
1、AD9516寄存器配置获得
AD9516的作用是对输入时钟分频,为AD9144分别提供:sysref(3.91M),和refclk(125M)。
这里使用了AD9516-Evaluation-Software完成配置。软件下载链接:
https://www.analog.com/en/design-center/evaluation-hardware-and-software/evaluation-boards-kits/eval-ad9516-4.html#eb-relatedsoftware
在安装结束后,打开软件并选择正确的型号,这里选AD9516-1
分别按下图所示进行配置:输入时钟(来自KC705)设置为2500;分频系数如图设置:最后得到两组频率为120M和3.9063M的时钟;点击左下角的橙色框(RGISTER W/R)中的WRITE。
点击“file”,点击“Save Setup”,导出“stp”文件,如下图所示。
打开导出的.stp文件,如图:这个文件记录了寄存器地址与对应的值,将于后续步骤导入。
2、AD9144&AD9516寄存器配置:
A、首先到AD公司官网搜索DAC Software Suite和Analysis Control Evaluation软件,下载并安装;
B、打开已经安装好的ACE软件,界面如下图所示。在硬件连接正确的情况下,图中红圈会检测到所连接的硬件板卡,点击图中绿圈的LED状按钮,AD9144-FMC-EBZ板卡上的蓝色LED灯会随之闪烁,说明连接成功。
C、双击打开“AD9144-FMC-EBZ”板卡。在“initial configuration”界面中按如图所示进行设置,点击“summary”并“apply”,双击右侧红色图框中的AD9144芯片。
D、在打开的界面中按图中配置设置DAC calibration,选择“DAC3 DAC2”并点击“calibrate”。
E、点击上图右下角的“Proceed to memory map”,按照项目所需配置好AD9144相关的寄存器表的值,点击右上apply selected将对应的寄存器值写入AD9144芯片。
F、在电脑开始菜单>Analog Devices寻找“AD9144&AD9135&AD9136 SPI”并打开,软件界面如图所示:
G、在上方框中点击“read all registers”,然后点击“save registers to file”得到“.csv”文件,右键将其用记事本打开,如图所示,找到AD9516芯片开头的寄存器区域,将之前通过AD9516 Evaluation Software得到的stp文件中的寄存器值添加进.csv文件中并保存。
如图所示,第一列是AD9144/AD9516的芯片,第二列是对应芯片的寄存器地址,第三列是寄存器对应的值,将AD9516所有寄存器的值添加进来并保存。
H、打开“AD9144&AD9135&AD9136 SPI”软件并选择“restore registers from file”,将上一步中修改保存好的.csv文件导入。
I、将vivado中的工程bit流文件烧录到板子上,通过ila抓取并观察tx_sync信号,发现信号持续拉高,返回AD9144&AD9135&AD9136 SPI软件read all registers,观察如图区域,如果图中所示四个寄存器值都为0F,vivado tx_sync持续拉高,并且txdata有数值输出,则说明AD9144与JESD204B同步成功,此时用示波器测量AD9144板卡输出可观测到波形输出。
三、调试过程中遭遇问题
1.SPI配置失败问题?
2.AXI-Lite的参数设置?
通过在Analysis Control Evaluation软件中读取AD9144寄存器表值,查询0x453-0x45A寄存器值,得到关键参数L,SCR,F,K,M,N,N’,S,CF,HD等的值。
通过文档PG066 P27-P28中所示的值,计算出AXI协议所需要的每个寄存器地址的值。填入到vivado工程模块中的AXI协议部分。
Vivado工程中的AXI协议部分:地址填入PG066 P27-P28中的寄存器地址,值填入更据关键参数算出来的值。
- 2022-08-02
-
发表了主题帖:
AD9144-FMC-EBZ ADI数据转接板四通道数模转换器评估板子模块转换
- 2022-07-12
-
发表了主题帖:
光纤项目概述
光纤项目系统概述
--作者:潘文明
项目背景
光纤项目是明德扬承接自某研究所的项目。该项目功能是接收4路光纤数据,经过内部DDR3缓存后,通过PCIE接口上送到电脑保存。其中光纤采集到数据后,需要做一定的算法处理,该算法处理由客户实现,明德扬保留易修改、易插入的模块接口。
该项目实质就是一个数据采集卡功能:采集到高速数据并保存到电脑本地,具有速率高、数据量大的特点。采集卡项目均可参考此方案实现。
该项目使用到光纤接口,可以学习到光纤IP核的应用。
本项目可以通过PCIE,实现对FPGA的配置。特别是实现了可分别配置和读取1路接收FPGA、4路发送FPGA寄存器的功能。关于上位机,如DSP、ARM、单片机、电脑 ,如何与FPGA通信交互的,可以参考此方案。(在优化版本中,也提供了通过串口配置的方案,即将PCIE配置改为用串口配置。)
PCIE部分不作讲解,要注意。
该项目有对应的视频专题课,并提供代码学习。
系统功能和架构
上图是本项目整体的简图,包括4个发送板、1个接收板和PC电脑。其中本项目主要实现提接收板功能。
接收板包括四片的DDR3、一个PCIE接口、四路光纤接口。当然接收板上还有很多其他接口,但是对于我们的项目来讲,主要的就是这三种接口。
接收卡通过PCIE接口,直接插到PC的插槽上,跟PC进行相连。
发送板可以通过光纤口发送数据,从接收板看来,可以认为外部有四路光纤口,接受这四种光纤的数据。
本项目中,四路发送板,每一个发送板其实它是一个AD采集卡。每个发送板它大概有16路的AD的采集,采集好数据汇总通过光纤送到这个接收卡。
接收卡从光纤接受到数据后,把数据汇聚起来,做适当的处理后,将数据保存到DDR3中,等待被读出送给PCIE接口,然后上送给PC电脑 ,这个就是我们整体的功能。
FPGA架构
上图是FPGA的内部实现架构。根据功能,可以大概划分成光纤功能、存储控制功能、PCIE功能三大部分。
光纤功能
本项目通过光纤模块,实现接收板和发送板的通信,通信速率是2.5Gbps,采用XILINX的官方IP核:7 Series FPGAs Transceivers Wizard(以下简称:GTX IP核)。关于该IP核的设置,有兴趣的读者,可以阅读我们之前发表的文章《XILINX(K7)和CycloneV之间的光纤通信设置》一文。
由于使用到4路光纤,在设置高速收发器IP核 时,注意要生成4路通道。当生成后,每路通道给用户侧的数据发送接口只有两个:发送数据tx_data和K码指示tx_kchar。同理,接收方向则是rx_data和rx_kchar。
我们注意到,数据接口只有数据和K码指示,而不是明德扬常见的包文形式。事实上,两个较高级的设备之间通信,一般就是采用包文的形式,一次发一组数据,每组数据可以达到几千字节。为实现分组发送,特自定义了光纤协议层包文格式,如下表。
包文头
数据长度
校验和
无效值
数据
16位
16位
16位
16位
数据长度个数据
上面是光纤协议层的包文格式,其有一个16位的包文头(固定为0x55d5),一个16位的长度指示(指示后面数据的长度,单位为字节),一个16位的校验码,一个16位的无效值,以及数据。
在FPGA内部架构图中的光纤打包模块,当从上游模块收到一个包文时,就计算该包文的长度、校验和,然后产生包文头+数据长度+校验和+无效值字段,再加上输入的包文数据,送给GXT IP核。GTX IP核再通过光纤送给发送板。
同理,发送板那里,也应该有一个打包模块,其要发送数据给接收卡,就会将包文封装成上面格式,再通过光纤传输到接收板。接收板从GTX IP核接收数据,在光纤解包模块中,搜索包文头55D5。如果搜索到包文头,下一状态就获取数据长度和校验和。根据数据长度,接收后面的数据。边接收数据边计数数据的校验和。当接收数据完毕,校验和也计算完了。这个时候,就对比收到的校验和与计算的校验和,是否相同。如果相同,说明包文是正确的;如果不同,说明包文是错误的。
上面就是光纤的基本功能,主要涉及到光纤打包、光纤解包等。
事实上,如果光纤采用的是Aurora协议,那么推荐采用另一个IP核:Aurora 8B10B。这个IP核使用AXI4-stream总线接口,并且已经是包文的格式。因此使用起来更加简单。
存储控制功能
本项目接收光纤数据后,首先会保存到DDR3中,等存够一定数据时,读出数据,送到PCIE。
接收板一共有4片DDR3,每片DDR3的数据位宽是16位。要注意的是,虽然有4片DDR4,但这4片DDR3不是各自独立工作的。在硬件设计时,将DDR3的地址线、控制线共用,数据线分开。也就是说,4片DDR3同时进行读写,对FPGA来说,这相当于一片64位的DDR3。
由于光纤数据一共有4路,并且4路数据都同时过来的,但只有一片64位的DDR3,如果不做处理,必须会有冲突。所以必须要做一个调度模块:4路光纤数据,首先会保存到内部的写FIFO中;调度模块判断4路FIFO的空闲情况,从而决定读取哪一路数据,存到DDR3中。没有被读取的,则继续保存在FIFO中,直到被调度出来。
在设计调度模块时,要注意如下几点:
调度的优先级
一共有4路数据,那么调度器的优先级如何选择,即如果4路中有多于1路均同时有数据,那么该如何选择哪一路。例如,您可以指定第0~3路优先级依次由高变低,即当第0路有数据,一定选择0路;当第0路没有数据了,再决定看下一路。当采用此方式时,就要考虑是否存在如下情况:第0路一直有数据,导致其他路一直无法读出送到DDR3呢,这是要思考的问题。
调度的单位
调度的单位是指:选择了一路数据后,会读取多少个数据才结束。可供选择是1个数据、多个数据,或者是读到FIFO空为止。这里要思考的是,1个数据最灵活,但是最繁琐,会出现频率调度的情况;如果是越多的数据,调度没有那么繁琐了,但也意味着写FIFO要临时存比较多的数据才行,所以这里要有一个平衡。
调度的起启水线
调度的起启水线:当FIFO存够多少个数据,才可以被调度器调度。这个是要考虑DDR的写速度、光纤的输入速度、以及调度单位的。例如,如果调度单位为1024个数据,起启水线100,当DDR写速度比光纤速度快时,就可能会存在DDR写到一半时,新的数据还没有来的情况。
当然,最省事的,就是将起启水线设置为跟调度单位一样,这样就绝对不存在问题,但这会存在一定的浪费。为什么呢?我们设想如下场景,当往DDR写数据的同时,光纤也会同时有新的数据送到写FIFO。我们可以计算DDR的写速度,以及新数据输入速度,根据速度差,得到起启水线。最理想的情况,就是当最后一个数据写到FIFO时,刚好也要将该数据写到DDR,然后调度结束。这样做的好处,就是将FIFO的深度设置为最适合的大小,从而节省资源。
在FPGA领域,貌似还不能理解FIFO深度多一点或者少一点有什么所谓。但在芯片设计领域则是经常考虑的点。笔者在做芯片设计时,经常要花很多精力去计算出最省资源的方案。其实这也说明了FPGA设计和芯片设计的区别,区别是做得更细、设计得更好。
by the way,就如我一直在强调的,FPGA和芯片是一个讲究做“细节”的技术,很多人可以做很粗的功能,但很少人可以做很细的功能,例如图像显示很多人都会,但用较少资源来实现图像显示,那就不会了。
PCIE功能
PCIE实现FPGA与上位机通信的功能,通信包文有两种,一种是业务包文,一种是配置包文。
配置包文是用来对接收卡、发送卡内的寄存器读写的包文。例如上位机对接收卡通道的开户和关闭,对发送卡的数据收发控制、上位机读取接收卡的内部状态等,均是由配置包文来实现的。
业务包文是指发送卡里的AD采集的数据,是真正上位机要保存的数据。
下面上位机和FPGA的通信格式。
包文类型
(16b)
读写属性
(1b)
板卡编号
(15b)
寄存器地址
(16b)
寄存器数据
(32b)
无效填充
(48b)
包文类型:用来指示是业务包文还是配置包文。业务包文的包文类型为16'h55AA;配置包文的类型为16'hF8F8。
读写属于:用于上位机指示对FPGA的寄存器进行写,还是读其值 。
板卡编号:用来指示当前包文是对哪个板卡进行配置,可以理解为设备地址。例如是对接收卡或具体的一个发送卡进行寄存器读取。编号为0~3表示发送板0~3,编号4为接收卡。
寄存器地址:这个可以理解 为寄存器地址。
寄存器数据:对寄存器配置的数据,如果是读的话,则填0。
上位机当要配置或者读取寄存器时,会按格式产生一个配置包文,通过PCIE传给FPGA。FPGA的内部有一个PCIE IP核。该IP核支持AXI4并且是包文形式,从PCIE里接收到包文数据,并送往协议解析模块。
协议解析模块分析该包文,特别是对包文编号进行识别。根据编号,如果是接收卡配置包文,则直接对内部的寄存器进行读取;如果是某一路发送板配置包文,则将该包文转发到该路光纤接口。
如果是读取寄存器数据,则会将配置包文返回给上位机,具体路径是:协议解析模块处理后,将寄存器数据补充到包文的数据域,然后读该包文转给6选1 SP调度模块。在该调度模块中,从6路包文(1路是业务包文,1路是接收卡返回的配置包文,其他4路是4个光纤返回的配置包文),选取一路发给PCIE IP核。
上位机从包文类型中,识别出业务包文还是配置包文,做相对应的处理。