赛灵思7系列FPGA基于PCIe_2_1硬核和GTP的PCIe端点
PCIe Endpoint on Xilinx 7-Series FPGAs with PCIe_2_1 Hard Block and GTP

原始链接: https://github.com/regymm/pcie_7x

本项目在Xilinx 7系列FPGA上实现了一个PCIe端点,利用PCIE_2_1硬块和GTP收发器,同时避免使用专有的Vivado IP核,并确保与openXC7兼容。该设计使用`pipe_clock.v`生成所有必要的时钟,源自100MHz PCIe refclk,并使用MMCM产生125MHz、250MHz和用户可配置时钟。GTP收发器由`pipe_wrapper.v`管理,通过PIPE接口与PCIE_2_1模块通信,处理从上层物理层到事务层的各个层。数据通过AXIS接口与用户设计进行传输。该实现支持PCIe Gen1 x1和Gen2 x1。配置目标是Alinx AC7100B SoM(Artix 7 100t)和Wavelet uSDR(Artix 7 35t)板卡,使用openXC7快速启动部署比特流。该设计包括MSI中断支持和相应的内核驱动程序。

Hacker News 最新 | 过去 | 评论 | 提问 | 展示 | 招聘 | 提交 登录 Xilinx 7 系列 FPGA 上使用 PCIe_2_1 硬块和 GTP 的 PCIe 端点 (github.com/regymm) 8 分 transpute 2 小时前 | 隐藏 | 过去 | 收藏 | 讨论 加入我们,参加 6 月 16-17 日在旧金山举办的 AI 初创公司学校! 指南 | 常见问题 | 列表 | API | 安全 | 法律 | 申请 YC | 联系我们 搜索:

原文

PCIe Endpoint on Xilinx 7-Series FPGAs using the PCIE_2_1 hard block and GTP transceivers. No proprietary Vivado IP cores! Compatible with openXC7!

src/pipe_clock.v generates all the clocks.

                          +-------------+
(PCIe refclk) sys_clk_p>--| IBUFDS_GTE2 |
100 MHz       sys_clk_n>--|             |--> sys_clk --> Goes to GTPE2_COMMON
                          +-------------+
                         
(from GTPE2_CHANNEL) +------+                    BUFG
TXOUTCLK ---|>-------| MMCM |-->125 MHz-----------|>---+--DCLK (dynamic reconfig)
100 MHz    BUFG      |      |                   BUFGCTRL
                     |      |-->125 MHz-Gen1------+\___+--RXUSRCLK (clk for RX data)                             
                     |      |-->250 MHz-Gen2------+/   +--OOBCLK (out of bond)
                     |      |                          +--PCLK (main PCIe logic)
                     |      |-->user1* 
                     |      |-->user2* 
                     +------+
                                   *usually 62.5 MHz/125 MHz for Gen1/Gen2

src/pipe_wrapper.v contains the GTP transceiver. It's connected to the PCIE_2_1 src/pcie_block.v via the PIPE interface. PCIE_2_1 handles from upper physical layer, data link layer, up to transaction layer.

 To User Design                                                         To PCIe Lane
                     +---------------+  PIPE interface +---------------+ TX pair
AXIS TX/RX  +------+ |  PCIE_2_1     |-------/---------| GTPE2_CHANNEL |------/-----
=/==========| TRN2 |=|  Hard Block   |                 |               |------/-----
=/==========| AXIS |=|               |              +--|               | RX pair
            +------+ |               |              |  +---------------+ CLK pair
-/-------------------|               |              |+--| GTPE2_COMMON |------/-----
Configs              +---------------+              ||  |              |
                     |  RX   |  TX   |              ||  +--------------+
                     | BRAMS | BRAMS |              ||
                     +---------------+             +-------+
Reset                                              | Reset |
---------------------------------------------------|       |
                                                   +-------+

For PCIE_2_1 parameters and port definitions, please refer to UG477.

PCIe Gen1 x1, PCIe Gen2 x1

Alinx AC7100B SoM (Artix 7 100t), Wavelet uSDR (Artix 7 35t)

Bitstream with openXC7 quickstart!

docker run -it --rm -v .:/mnt regymm/openxc7 make -C /mnt -f Makefile.alinx_100t.openxc7

Build and run: Artix 7 PCIe

PCIe Gen2 / board without reset: uSDR Guide

MSI interrupt / kernel driver: MSI Interrupt

This project is funded through NGI0 Entrust, a fund established by NLnet with financial support from the European Commission's Next Generation Internet program. Learn more at the NLnet project page.

NLnet foundation logo NGI Zero Logo

联系我们 contact @ memedata.com