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连接。
最新文章
- Level Of Management Protocols - SNMP Tutorial
- Linux WebServer WebRoot Path Identification
- JS(javascript) 将网站加入收藏夹
- IOS第八天(1:UITableViewController团购,数据转模型,xib显示数据)
- BZOJ2757 : [SCOI2012]Blinker的仰慕者
- 《A Tour of PostgreSQL Internals》学习笔记——进程间通信
- 168. Excel Sheet Column Title
- POJ 1006 Biorhythms(中国剩余定理)
- ios专题 - GCD(2)
- 关于Android WebView内容不同屏幕兼容处理
- scala学习笔记——类和对象
- cordova-plugin-app-version插件使用
- Umbraco扩展开发
- HDU 1724 Ellipse 自适应simpson积分
- 在程序中用new ClassPathXmlApplicationContext()的注意事项
- JAVA中接口的使用
- Dynamics CRM2016 Web API之通过实体的primary key查询记录
- 第1章 Linux内核简介
- js 通过url获取里面的参数值
- Vuejs学习笔记(一)
热门文章
- (@WhiteTaken)设计模式学习——观察者模式
- 通过xrdp服务实现windows远程桌面连接树莓派
- mysql的并发处理机制_下篇
- APP在模拟器崩溃,提示__gcd_queue_item_enqueue_hook_block_invoke
- LeetCode 581. Shortest Unsorted Continuous Subarray (最短无序连续子数组)
- LeetCode 461. Hamming Distance (汉明距离)
- LeetCode 111. Minimum Depth of Binary Tree (二叉树最小的深度)
- asp.net在类库中使用EF 6.0时的相关配置
- 转载——yum源的超级简单配置
- HDU 6143 Killer Names