FPGA调试光纤模块

利用FPGA调试光纤接口接口:

由于与项目需要,前段时间调试了光纤接口,记录一些设计经验。

设计中采用FPGA控制光纤模块完成光纤数据的收发,FPGA采用Xilinx公司的Spartan6 LX45T,由于其内部自带的2个GTP收发器,能作为多种高速通信协议(千兆以太网、PCI-E,SATA等)的桥梁,且Xilinx提供了免费的IP核,设计比较方便。

首先,建立ISE工程,添加GTP核,(该过程可参考Xilinx提供的文档:LogiCORE IP Spartan-6 FPGA GTP Transceiver Wizard v1.11User Guide)

选择Spartan6 GTP收发器1.11版本,接下来进行GTP核的设置,

Spartan6 LX45T系列FPGA内部有2个GTP核,每个核又具有两个独立的通道,因此可根据自己的需要选择,

接下来配置GTP速率以及数据协议,很多高速传输中都采用的是aurora-8b10b协议(https://en.wikipedia.org/wiki/8b/10b_encoding),速率以及参考时钟都可以根据需要设置(本项目光纤最高速率1.25Gbps),

接下来是协议的一些配置选项,各个选项的含义可以参考RocketIO™ Transceiver User Guide 和 Spartan-6 FPGA GTP Transceivers,里面有这些选项的详细说明,

这里选择数据传输中的逗号对齐,比较重要,主要是用于数据告诉传输中的数据对齐,后面几页的配置默认就可以。

最后工程生成以后可以直接打开GTP核工程,编译后便可进行modelsim仿真,仿真结果一般都不会出现问题。

最后,可根据自己的需要修改源代码,其中,比较关键的地方需要注意:

1、  TXCHARISK参数,该参数用于指明当前数据是否为对齐字符(K28.5,即0xBC),当发送对齐字符时,必须TXCHARISK=1,当然0xBC也可以作为实际数据,只要TXCHARISK=0,就不会认为该数据为对齐字符;

2、  数据宽度问题,在设置GTP速率及协议的时候,注意数据宽度的选择,若选择16bits或者32bits,则数据在接收端可能会发生错位现象,(发送0x0102,接收到为0x0201),仿真时不会出现问题,因为在Frame_check中进行了判断,若发生错位,会得到纠正,但选择8bits则不会出现该问题,省去了后续的纠错任务;

3、  约束文件问题,打开GTP核工程后,可以看到有两个约束文件,一个是GTP属性,一个是顶层约束,

INST mgt1_0t1r_i/tile0_mgt1_0t1r_i/gtpa1_dual_i CLKINDC_B_0

NET "tile0_txusrclk0_i" TNM_NET = "tile0_txusrclk0_i";

TIMESPEC "TS_tile0_txusrclk0_i" = PERIOD "tile0_txusrclk0_i" 8.0;

若设计者希望建立自己的顶层文件,并在顶层文件中例化GTP核,则需要在约束语句上加上顶层例化名称:

INST gtp_top_i/mgt1_0t1r_i/tile0_mgt1_0t1r_i/gtpa1_dual_i CLKINDC_B_0

NET " gtp_top_i/tile0_txusrclk0_i" TNM_NET = "tile0_txusrclk0_i";

TIMESPEC "TS_tile0_txusrclk0_i" = PERIOD "tile0_txusrclk0_i" 8.0;

其中,具体设计细节可参考上面提到的3个参考文档。在硬件实现上,主要需要配置GTP的差分时钟,光纤的RX、TX和GTP的RX、TX连接。

时间: 2024-07-29 12:43:50

FPGA调试光纤模块的相关文章

Chipscope使用

作者:桂. 时间:2017-08-07  06:47:31 链接:http://www.cnblogs.com/xingshansi/p/7297482.html 前言 Chipscope在FPGA调试中被用来观察内部信号,程序里加入Chipscope相当于有了数字示波器. 本文主要记录Chipscope的基本操作,以及如何借助MATLAB对Chipscope的数据进行分析. 一.Chipscope使用 A-Chipscope简介 参考:ug029_ChipScope Pro 11.4 Soft

烦躁而无奈的一次调试-记fpga驱动ad9854

写这篇东西,主要还是要发泄心中之不爽,毕竟debug不出来很影响食欲和心情,也没心情陪妹纸了. 一个月前,师兄便开始带我fpga,先让我驱动个dds作为训练.由于暑假的原因,就停停放放的,在家先把VHDL简单过了一遍,又反复研究了一下AD9854的datasheet.什么寄存器啊,时序啊都了解的差不多了.一个星期前开始着手编. 但是菜鸟不会重头编啊,所以先拿了一个网上的驱动程序,根据板子的实际电路对程序作了修改.感觉不是很难吧,但示波器木有一丁点现象啊,芯片却在发热.然后我就开始一点一点的改啊,

《FPGA全程进阶---实战演练》第二章之焊接板子及调试注意事项

1.若是读者第一次做板子,强烈建议画完PCB板后将PCB图打印出来,然后对照你买的芯片将芯片放置对 应的位置,然后查看所有的封装格式适不适合,否则等你做出板子来后再试,为时晚矣.笔者虽然知道要这么 做,但是笔者第一次发给工厂做回来的PCB发现有一个芯片封装画大了,而且那个芯片还是贴片封装的,这让 笔者心痛不已,300多大洋就这么要毁于一旦了. 2.在参考别人的电路时一定要注意,你想用的芯片型号的电路适不适合你参考的电路图,若是完全一致,那么可以直接照抄照搬,若是不一样,这时候要非常注意电路的设计

fpga的驱动调试dev_dbg 无输出

最近需要调试一个fpga的驱动,整的很蛋疼!dev_dbg 想使用这个作为调试输出都不成功,已经被彻底打败了!反思中... 目前是根据以下相关设置后均不能打印,和网上说的有些出入,问题还得研究下. 驱动程序调用dev_dbg的地方 打卡debug功能 printk.c的console默认级别也修改为8了 device.h文件 #insmod 3s3gs.ko 3s3gs Ethernet Driver, V0.11 FPGA id 23310001 FPGA Version: 0.9b022,

FPGA DDR3调试

Spartan6 FPGA芯片中集成了MCB硬核,它可以支持到DDR3.在Xilinx的开发工具Xilinx ISE中提供了MIG IP核,设计者可以用它来直接生成 DDR3 控制器设计模块,并通过 MIG 的 GUI 图形界面完成相关配置. 首先,建立ISE工程,并添加MIG IP核, 接下来进行MIG IP核配置,这里列出主要的部分, 这里选择DDR的类型,并选择使用Spartan6的哪一个bank,一般选择左边的bank, 这里设置DDR3的时钟频率以及DDR3的设备型号,Xilinx列举

Lattice FPGA 板子 调试笔记

最近在调试LATTICE  FPGA 做的视频板子,颇不顺利,所以记录下来作为以后的参考: 1.FPGA的IO口不是所有的都是双向的,有些有特殊作用的是单向的. 在查阅 LatticeECP3-17EAPinout.CSV 之后, 发现在LEF3-17EA-FN484C中,有以下几个管脚是单向的: C4  G7  G6     : jtag 管脚 C14  C15  B15   B16  :编程管脚 K1   L5   L1   K6   N17  M18   :PLL的反馈(fb)管脚 AB2

通过FPGA驱动OV5640调试记录

最近无聊,想通过FPGA来驱动OV5640,达到高速并行的图像处理.其中使用了8个sensor.是Omnivision的500W高清摄像头.主要用于手机,pad,等移动设备的主摄像头.在网上搜索了一把,包括谷歌和百度.都没发现太有价值的信息.后面自己硬着头皮开始自己来弄.应该用fpga控制ov5640我属于首创. 经过漫长的原理图设计,原理图如下: 其中的DOVDD使用的是D1.8V,这样就可以使用内部的LDO,外部只需要2.8V和1.8V.在使用DOVDD为1.8V时,可以不连接DVDD这个电

FPGA开发全攻略—— 调试

原文链接: FPGA开发全攻略连载之十三:FPGA实战开发技巧(12) FPGA开发全攻略连载之十三:FPGA实战开发技巧(12) 5.6 大规模设计的调试经验 在大规模设计的调试应该按照和设计理念相反的顺序,从底层测试,主要依靠ChipScope Pro 工具.下面主要介绍ChipScope Pro.FPGA Editor 组件的使用方法. 5.6.1 ChipScope Pro组件应用实例 在赛灵思软件设计工具中,ISE 可集成赛灵思公司的所有工具和程序.ChipScope Pro 也不例外

DSP与FPGA通信调试笔记——通过GPMC接口用EDMA传送

硬件:TI达芬奇TMS320DM8168(以下简称DSP).EP4CE6E22C8N(以下简称FPGA) 软件:linux-2.6.37 作者:Aadtech 杭州超距科技 近期项目需要实现DSP与FPGA之间的高速数据交换,用到了DM8168的GPMC接口.这部分的中文资料网上还是比较少的,于是苦苦研究芯片的数据手册和参考指南,最近终于有所成果,在Linux下调用GPMC驱动函数调通了GPMC接口,因此发出调试过程与大家分享.目前以DSP端可以通过GPMC用EDMA的方式读取FPGA端的数据,