利用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连接。

最新文章

  1. Level Of Management Protocols - SNMP Tutorial
  2. Linux WebServer WebRoot Path Identification
  3. JS(javascript) 将网站加入收藏夹
  4. IOS第八天(1:UITableViewController团购,数据转模型,xib显示数据)
  5. BZOJ2757 : [SCOI2012]Blinker的仰慕者
  6. 《A Tour of PostgreSQL Internals》学习笔记——进程间通信
  7. 168. Excel Sheet Column Title
  8. POJ 1006 Biorhythms(中国剩余定理)
  9. ios专题 - GCD(2)
  10. 关于Android WebView内容不同屏幕兼容处理
  11. scala学习笔记——类和对象
  12. cordova-plugin-app-version插件使用
  13. Umbraco扩展开发
  14. HDU 1724 Ellipse 自适应simpson积分
  15. 在程序中用new ClassPathXmlApplicationContext()的注意事项
  16. JAVA中接口的使用
  17. Dynamics CRM2016 Web API之通过实体的primary key查询记录
  18. 第1章 Linux内核简介
  19. js 通过url获取里面的参数值
  20. Vuejs学习笔记(一)

热门文章

  1. (@WhiteTaken)设计模式学习——观察者模式
  2. 通过xrdp服务实现windows远程桌面连接树莓派
  3. mysql的并发处理机制_下篇
  4. APP在模拟器崩溃,提示__gcd_queue_item_enqueue_hook_block_invoke
  5. LeetCode 581. Shortest Unsorted Continuous Subarray (最短无序连续子数组)
  6. LeetCode 461. Hamming Distance (汉明距离)
  7. LeetCode 111. Minimum Depth of Binary Tree (二叉树最小的深度)
  8. asp.net在类库中使用EF 6.0时的相关配置
  9. 转载——yum源的超级简单配置
  10. HDU 6143 Killer Names