当前位置: 首页 > news >正文

PCIe学习笔记

PCIE高速串行数据总线
当拿到一块板子 比如你要用到PCIE 首先要看这块板子的原理图 一般原理图写的是 PCI express 表示PCIE
以下是Netfpga为例下的PCIE插口元件原理图
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/01dc604fbdc847e8998a978c83c7b2eb.png在这里插入图片描述

一般主要用到
TX发射端 RX接收端
以及 差分时钟线和复位线

(锁相环PLL:作用主要有频率合成和CDR(时钟数据恢复)。
频率合成是指PLL反馈时钟和输入参考时钟锁定,由于在反馈回来中加入了分频电路,所以VCO可以产生是输入参考时钟倍数的时钟。分频电路如果是整数分频,VCO的输出时钟就是参考时钟的整数,如果是小数分频,输出时钟理论上来说可以是任意频率的时钟。
利用PLL实现CDR有两种方法,一是将数据作为PLL的输入信号,环路锁定在输入信号的边沿上以恢复出对数据重新采样的时钟;二是PLL产生多相位的时钟,对输入数据进行过采样,利用数字电路判断数据边沿,最终产生对数据重新采样的时钟。)
作用其实就是两点

  1. 产生参考时钟的整数倍频率
  2. 和参考时钟同步

差分时钟线是什么
差分传输是一种信号传输的技术,区别于传统的一根信号线一根地线的做法,差分传输在这两根线上都传输信号,这两个信号的幅度相同,相位相反。在这两根线 上传输的信号就是差分信号。
简而言之,差分信号是两个信号,他们幅度相同、相位相反。

扩展
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

在这里插入图片描述
在这里插入图片描述


例程一:基于 blockdesign 的 PCIe BRAM 读写


http://www.lryc.cn/news/503880.html

相关文章:

  • The Rise and Potential of Large Language ModelBased Agents:A Survey---讨论
  • C语言:const的用法
  • Redis - 集合 Set 及代码实战
  • LabVIEW面向对象编程有什么特点?
  • 配置Nginx自签名SSL证书,支持HTTPS
  • 使用Spring Boot、VUE实现SSE长连接:跟踪文件上传和任务进度
  • 计算机网络技术基础:3.计算机网络的拓扑结构
  • go-zero(十二)消息队列
  • 会议通知:人工智能通识教育与实践发展暨和鲸科技AI通识课解决方案发布会
  • UDS自动化测试-Service 0x27(CAPL调用dll实现key计算)
  • 订单编号如何实现
  • Vue3 大事件管理系统
  • IOS通过WDA自动化中遇到的问题
  • 单独测试 pyautogui 的鼠标点击功能,确保它能够在当前环境中正常工作,鼠标自动点击的录制回放功能
  • 路由引入问题(双点双向路由回馈问题)
  • 设计模式之 适配器模式 C# 范例
  • LabVIEW实现GPS通信
  • [leetcode100] 543. 二叉树的直径
  • 嵌入式学习(18)-stm32F407串口接收空闲中断+DMA
  • b站视频爬虫-词云分析
  • 如何防止订单二次重复支付?
  • LeetCode 24反转链表
  • 用python的flask写的一个MQTT中转功能,http的方式发送数据和接收数据
  • img引入svg如何修改颜色
  • 计算机毕业设计PySpark+PyFlink+Hive地震预测系统 地震数据分析可视化 地震爬虫 大数据毕业设计 Hadoop 机器学习 深度学习
  • 【Python】使用Numpy实现余弦相似度计算
  • nginx中的root和alias的区别
  • 探索Telnet:实现Windows远程登录Ubuntu的实践指南
  • 在 Vue 2 中隐藏页面元素的方法
  • 【Java】Java8的4个函数式接口简单教程