PCIE高速串行数据总线
当拿到一块板子 比如你要用到PCIE 首先要看这块板子的原理图 一般原理图写的是 PCI express 表示PCIE
以下是Netfpga为例下的PCIE插口元件原理图
一般主要用到
TX发射端 RX接收端
以及 差分时钟线和复位线
(锁相环PLL:作用主要有频率合成和CDR(时钟数据恢复)。
频率合成是指PLL反馈时钟和输入参考时钟锁定,由于在反馈回来中加入了分频电路,所以VCO可以产生是输入参考时钟倍数的时钟。分频电路如果是整数分频,VCO的输出时钟就是参考时钟的整数,如果是小数分频,输出时钟理论上来说可以是任意频率的时钟。
利用PLL实现CDR有两种方法,一是将数据作为PLL的输入信号,环路锁定在输入信号的边沿上以恢复出对数据重新采样的时钟;二是PLL产生多相位的时钟,对输入数据进行过采样,利用数字电路判断数据边沿,最终产生对数据重新采样的时钟。)
作用其实就是两点
- 产生参考时钟的整数倍频率
- 和参考时钟同步
差分时钟线是什么
差分传输是一种信号传输的技术,区别于传统的一根信号线一根地线的做法,差分传输在这两根线上都传输信号,这两个信号的幅度相同,相位相反。在这两根线 上传输的信号就是差分信号。
简而言之,差分信号是两个信号,他们幅度相同、相位相反。
扩展
FPGA差分时钟转换为单端时钟 ?
为什么要转成单端时钟 :差分信号传输技术通过将一个普通的单端信号拆分成两个相位相反的信号,在高速传输过程中可以大大减小信号干扰的影响。但在实际使用中,由于某些原因,如外部设备只支持单端时钟输入,所以就需要将差分时钟信号转换成单端时钟信号。
步骤
IP核(clocking wizard)
在vivado中使用clocking wizard IP核
选择MMCM(Mixed-Mode Clock Manager)
设置输入时钟的频率(所用开发板时钟频率为200MHz);因为输入为差分时钟,故source中选择Differential clock capable pin(差分时钟引脚);
设置输出时钟的频率(50MHz),其他端口根据自己需求设置
生成IP后可以找到他的例化模板
以上操作实现了差分时钟转换为单端时钟,并进行了分频操作。
相位差 幅度
PCIe 规定了一对差分参考时钟信号 (REFCLK),该时钟由 RC (例如计算机主板) 提供给 EP (FPGA) ,用来驱动 EP 内的 PCIe core 工作。在图1 中的网络名为 PCIE-CLK_P 和 PCIE-CLK_N 。
要区分好RX TX的方向
注意!!! 一个非常重要的事是搞清楚信号线 TX (transmit) 和 RX (receive) 方向是相对于谁而言的。RC (主机) 的 TX 对于 EP (FPGA) 来说是 RX ; RC 的 RX 对于 EP 来说是 TX 。画原理图的人可能根据自己的喜好给信号线起名,有的人把 RC 的 TX 叫 TX ,有的人把 EP 的 TX 叫 TX ,容易造成阅读者的混淆。
一种靠谱的区分方法是看 PCIe 插口元件上的引脚排布:PCIe 参考时钟 (REFCLK) 和复位 (PERST#) 一定和 RC 的 RX (EP 的 TX) 处于同侧。
例如在图1中,参考时钟和复位在右侧,则右侧这些差分信号线都是 RC 的 RX ,也就是方向是从 FPGA 到计算机主板。而左侧这些差分信号就都是 RC 的 TX ,也就是方向是从计算机主板到 FPGA 。
总结 就是与差分时钟线 与 复位同一侧的是 电脑端RC的RX 也就是fpga板子上的TX
对应寻找PCIe引脚 找到对应fpga的引脚位置
因为第一张图是PCIe的模块的引脚 要找到PCIe这个模块与fpga板子相连的引脚也就是图中的XC7VX690T-3FFG1761Ⅰ 这个就是板子上的引脚。
找好对应的引脚位置后 编写约束文件 .xdc文件 例如
约束文件将verilog中定义的端口号与FPGA板子上的IO口建立起联系,也同样是告诉软件该如何分
配你所定义的端口号以生成对应的bit文件。 这里约束文件一般按照fpga的视角进行约束 RC的RX就是EP(FPGA)的TX