XILINX的GTX官方例程的讲解

本文详细介绍了如何理解和使用XILINX的IP核,包括配置过程、例程结构(如支持模块、frame_gen和数据检验模块),以及如何修改发送和接收数据。作者强调了理解程序结构和信号作用的重要性,对初学者提供实用指导。
摘要由CSDN通过智能技术生成

        写这篇文章的时候一直在想哪些东西要讲哪些不要讲,怎么用一条线去把这些东西串起来。刚开始学的时候其实就是想修改这个程序,让它满足自己的需求。那就得知道这个程序的总体流程,哪个地方负责什么功能,具体是靠哪些信号线进行操作的,改了这部分会不会影响其他的部分等问题。

        所以我写的时候也是按这个思路来写的,先介绍整个程序的结构,然后再把一些很可能要使用的信号重点讲一下。  

程序讲解

配置好IP核以后(可以参考XILINX的IP核GTX的配置),打开例程

        得到例程,包括仿真程序(若是直接在这个例程上修改IP核的配置,可能会导致错误,因为生成的例程会把之前IP没有配置的信号线隐藏)

下面我们来介绍一下这个例程

        程序的总体框架如下:

        XILINX已经为我们搭建好了一个完整测试系统,IP核的时钟,复位等,数据发送给IP核的并行口,串行口输出数据回到串行接收口,并行输出的数据以后和原始数据对比。

Support模块:

IP核是包含support里面的

GT核的时钟和复位都是比较复杂的,这几个程序正是帮我们解决这部分的问题,如果没有特殊的需求的话,建议不要对此进行改动。

support模块可以算是这个核的“最小工作系统”了。信号线是真的多,从77行到170都是信号线,一开始学的时候直接给吓到了。

但其实这里面的大部分线是用不到的,不去管它们也不会有什么影响。比如这里输出的gt0_rxcharisk_out的作用是告诉你接收到k码了,如果你不需要用它进一步开发的话不用管它就好了。正因为这个原因,所以外层的程序exdes很多信号线输出了。

frame_gen(信号发送模块)

先来看看它的端口:

module gtwizard_0_GT_FRAME_GEN #

(

    // parameter to set the number of words in the BRAM

    parameter   WORDS_IN_BRAM =   512

)

(

   // User Interface

output reg  [79:0]  TX_DATA_OUT,

output reg  [7:0]   TXCTRL_OUT,

      // System Interface

input  wire         USER_CLK,

input  wire         SYSTEM_RESET

);

        TX_DATA_OUT是发送给IP核数据,它有80位是为了考虑数据拓展的需求,我给IP核设置数据宽度为16位,实际上它也只把16位数据给了IP核,但IP核的数据宽度是可以设置更大的。

        TXCTRL_OUT是控制符,表示现在输入的数据还是对齐码。

        USER_CLK是IP核给到外部的时钟

        可以看到用的是txusrclk2,也就是IP核希望我们以这个时钟的速率给IP核输入并行数据。

        SYSTEM_RESET:也是IP核给的复位信号,这个信号一来就说明IP核的发送端已经准备好了,你快点把数据传过来吧。

可以看到它连接的是TX(发送端)的复位状态机输出 。

Check(数据检验模块)

这部分程序用来检查接收到的数据和刚开始发送的数据是不是一致的,发生不一致的时候ERROR_COUNT_OUT会+1。我没有检验接收数据的需求,所以这部分程序没有使用,也就不多讲了。不过看一下它的编程逻辑,代码还是很有帮助的。如果你需要对接收到的数据再进行下一步处理可以好好看看这部分的程序。

Exdes:

这是整个例程的顶层程序,它负责把support,gen,check等模块连接起来,然后把时钟信号引进来(复位是在support里面的reset做的),把差分输入输出端口引出去。如果你需要对IP核进行进一步的开发可以直接在这里编程,但现在它做的事情很少,所以给外部接口的信号线非常简单

module gtwizard_0_exdes #

(

    parameter EXAMPLE_CONFIG_INDEPENDENT_LANES     =   1,//configuration for frame gen and check
    parameter EXAMPLE_LANE_WITH_START_CHAR         =   0,         // specifies lane with unique start frame char
    parameter EXAMPLE_WORDS_IN_BRAM                =   512,       // specifies amount of data in BRAM
    parameter EXAMPLE_SIM_GTRESET_SPEEDUP          =   "TRUE",    // simulation setting for GT SecureIP model
    parameter EXAMPLE_USE_CHIPSCOPE                =   0,         // Set to 1 to use Chipscope to drive resets
    parameter STABLE_CLOCK_PERIOD                  = 10

)

(

    input wire  Q0_CLK1_GTREFCLK_PAD_N_IN,
    input wire  Q0_CLK1_GTREFCLK_PAD_P_IN,
    input wire  DRP_CLK_IN_P,
    input wire  DRP_CLK_IN_N,
    output wire TRACK_DATA_OUT,
    input  wire         RXN_IN,
    input  wire         RXP_IN,
    output wire         TXN_OUT,
    output wire         TXP_OUT

);

        差分时钟Q0_CLK1_GTREFCLK_PAD_N_IN和Q0_CLK1_GTREFCLK_PAD_P_IN它们的数值和IP核配置界面里面的参考时钟一致。

        差分时钟DRP_CLK_IN_P和DRP_CLK_IN_N在第三页的配置中

        

        使用差分时钟是因为它更稳定,它后面也是转换为了单端时钟输入给IP核了,如果你的时钟足够稳定,就不用进行这个操作了。

         RXN_IN, RXP_IN, TXN_OUT, TXP_OUT分别是串行的差分输入和输出信号,后面的仿真模块中把它们直接连起来了。

        TRACK_DATA_OUT是一个指示信号,拉高的时候证明当前接收信号有效。

        最后再说说仿真模块,它其实就是给了exdes相应的时钟信号,然后把差分输入和输出端口连接起来了。

Run Simulation仿真

数据发送端:

在gt0_txresetdone_out拉高,也就是TX复位成功后,可以看到差分输出端口已经在发送数据了,此时发送的是0000对应的8B/10B编码。过了若干个周期后,发送程序的system_reset_r2拉低,开始改变传输数据。

数据接收端:

接收端也是在gt0_rxresetdone_out拉高之后开始正常识别数据,在识别到K码信号对齐,也就是rxbyteusaligned_out拉高后信号对齐了,可以看到gt0_rxdata_out上显示了02bc,bc就是我们设置的K码。

怎么改发送的数据内容

最简单的是打开数据来源的gt_rom_init_tx.dat文件,16进制的数据。

改速率的话可以调整frame_gen里的计数器。

或者你也可以直接重新写一个发送程序,使用和它一样的时钟和复位信号就是了。

 写在最后

        刚开始学这个IP核的时候,跟着手册看GT的内部结构,令人头大,后来如果只需要简单跑起来,了解配置的意义和会修改例程就行了,希望这篇文章对大家去修改使用例程有所帮助

        大家有什么问题欢迎和我一起讨论~

Xilinx FPGA工程例子源码 VERILOG设计源码78个合集: 1024点FFT快速傅立叶变换.zip AD7266的Verilog驱动程序.zip BOOTLOADER (基于Platform Flash).rar ChipScope使用示例.zip DDR SDRAM控制器verilog代码.zip DDR SDRAM控制器参考设计VHDL.zip DDR2 Controller.zip EDK9.1嵌入式开发实验代码.zip EDK中PS2自定义IP.zip FFT变换的IP核的源代码.zip FM收音机的解码及控制器VHDL语言实现.zip FPGA实现CAN总线控制器源码.rar FPGA语音通信平台设计实例.zip IP camera的开源系统.zip LCD IP CORE.zip LCD12864 在Spartan-3E实现代码.zip PCI Express IP核应用参考设计.zip PCI Express标准概述.zip PCIE DMA例子.zip PCI总线IP核(华为的商用).zip PCI的核.zip PICOBLAZE控制LCD1602的源码.zip PS2键盘控制程序.zip Sparten3E的EDK实验.zip System Generator的设计实例.rar The SDRAM controller is designed for the Virtex V300bg432-6.zip ucos_ii 在microblaze平台上的移植.zip USB IP核.zip USB2.0 IP核源代码.zip USB大容量存储开发板CPLD代码.zip USB接口应用系统设计实例.zip USB接口控制器参考设计VHDL代码(Xilinx).zip USB通信全套资料.zip Verilog实现闰年的判断(ISE8.21中调试通过).zip Verilog编写的信道估计.zip Verilog编写的基于SPARTAN板的VGA接口显示程序.zip VGA显示IP核(包括驱动).zip VHDL实现对图像的采集和压缩.zip VHDL编写的PCI代码(PCI2.2兼容).zip xilinx 3s400开发板厂家光盘源码(按键防抖动).zip Xilinx DDR2存储器接口调试代码.rar Xilinx DDR3最新VHDL代码(通过调试).rar Xilinx EDK工程一例MicroBlaze内置USB固件程序.rar Xilinx EDK设计试验.rar Xilinx ISE9.x FPGA_CPLD设计指南(原书光盘上的源码).zip Xilinx Sdram 参考设计:含Verilog和VHDL版本级详细说明文档.rar Xilinx SPARTAN-3E入门开发板实例.zip Xilinx sparten3E 键盘和开发板的通信和LCD的字符显示.zip Xilinx spratan3 xcs100E(VGA PS2).zip Xilinx TCP_IP协议实现.rar Xilinx 公司BASYs开发板自带的Demo程序.zip Xilinx 公司的加法器核.rar Xilinx 官方网站提供的一个利用DCT进行图像压缩的设计参考.rar Xilinx 提供的频率发生器的VHDL源码.zip Xilinx 提供的高速多状态编码8b_10b编码器.zip Xilinx 的Basys板VGA显示图片原码.zip Xilinx 的I2C工程.zip Xilinx 的IP:1024点FFT快速傅立叶变换.rar Xilinx 的用于设计SMBus控制器的源程序.zip Xilinx 高级试验的代码.rar Xilinx.CPLD源码参考设计.zip 兼容opencores.org的I2C slave的RTL代码.zip 在FPGACPLD中实现AD或DA的文章(英文Verilog).zip 在FPGA上实现CRC算法的程序.zip 基于FPGA_CPLD和USB技术的无损图像采集卡.zip 基于FPGA实时处理的双目测距系统.zip 基于Spartan3E的串口调试和检测程序.rar 基于Spartan3火龙刀系列FPGA开发板制作的VGA实验例程.rar 基于XILINX的SPARTAN板的VGA接口显示程序.rar 基于XILINX的XC3系列FPGA的VGA控制器的VHDL源程序.rar 实现在Sparton-3E板卡上的按键及开关的控制.zip 实现基于spartan3与CAN总线连接后的的汽车时速的模拟仿真.zip 扩频接收机设计实例.zip 摄像头的硬件函数(IP核).zip 用FPGA实现数字锁相环.zip 用FPGA模拟VGA时序,PS_2总线的键盘接口VHDL源
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值