使用Xilinx K7 KC705开发板调试PCIe中的问题【持续更新】

news/2025/1/11 7:58:36/

开发板:Xilinx K7 KC705

软件:ISE14.7


1.由于应用需求,我们要将开发板作为主机端,通过PCIe接口转接板外接一个NVMe PCIe SSD。并由FPGA控制SSD的数据读写。

因此我们例化生成了一个作为主机端的 PCIe IP核。

类型选择为Root Complex

这里我们将可设置的几项配置成抓取到的PCIe NVMe SSD的内部相应参数。

生成pcie核之后,在其目录下将example文件夹中的例程导入ISE中。

阅读其ucf文件,发现其中并没有约束sys_clk_p和sys_clk_n这一组差分时钟信号。取而代之的是如下的代码:

# SYS clock 100 MHz (input) signal. The sys_clk_p and sys_clk_n
# signals are the PCI Express reference clock. Virtex-7 GT
# Transceiver architecture requires the use of a dedicated clock
# resources (FPGA input pins) associated with each GT Transceiver.
# To use these pins an IBUFDS primitive (refclk_ibuf) is
# instantiated in user's design.
# Please refer to the Virtex-7 GT Transceiver User Guide
# (UG) for guidelines regarding clock resource selection.
#
INST "refclk_ibuf" LOC = IBUFDS_GTE2_X0Y3;

这样的配置就可以了吗?还需要添加或修改什么代码吗?

参考网上的一些类似问题:如http://www.newsmth.net/nForum/#!article/FPGATech/45472?au=biscuit123。

我们推断,这里约束了buffer "refclk_ibuf"的位置,即同时将sys_clk_p和sys_clk_n的LOC确定了。因为在顶层文件xilinx_pcie_2_1_rport_7x中例化了

IBUFDS_GTE2 refclk_ibuf (.O(sys_clk), .ODIV2(), .I(sys_clk_p), .CEB(1'b0), .IB(sys_clk_n));

ucf中的上述约束即为将refclk_ibuf确定为IBUFDS_GTE2_X0Y3,而这个buffer的位置是固定的,因而输入端的sys_clk_p和sys_clk_n也就确定了,不需要再进行约束。

上述分析纯属个人推断,如有误,还请留言指出。

同时在综合之后,打开PlanAhead以查看管脚映射:

发现sys_clk_p的管脚位置确实已经配置。并且修改IBUFDS_GTE2_X0Y3的值,综合后得到的管脚映射位置不一样,如下:

                                                                FPGA管脚号     Bank            时钟来源位置

IBUFDS_GTE2_X0Y0:sys_clk_p       R8                                         未连接

IBUFDS_GTE2_X0Y1:sys_clk_p       V8                    115               PCIE_8LANE_EDGE

IBUFDS_GTE2_X0Y2:sys_clk_p       L8                    116               SI5324C-C-GM

IBUFDS_GTE2_X0Y3:sys_clk_p       N8                   116               FMC接口

IBUFDS_GTE2_X0Y4:sys_clk_p       G8                   117              

IBUFDS_GTE2_X0Y5:sys_clk_p       J8                    117               FPGA管脚J16

IBUFDS_GTE2_X0Y6:sys_clk_p       C8                   117               HPC接口

IBUFDS_GTE2_X0Y7:sys_clk_p       E8  

具体连接位置可参照开发板的原理图。

在这里我们应该写成INST "refclk_ibuf" LOC = IBUFDS_GTE2_X0Y1;

这样两个输入时钟信号将接到金手指上,其输入来源是PCIe插槽转接板上的100MHz时钟。

具体PCIe接口信息可参见博文:http://blog.csdn.net/michaelcao1980/article/details/42778405


2.PCIe和NVMe的初始化完成,CSTS.RDY信号拉高,按照协议要求,我们想发送第一个指令:Identify。按照要求,我们修改了Admin SQ Doorbell寄存器。想要等待SSD给主机返回 读TLP包,但是在PCIe核的数据返回接口并没有抓到数据,过了一段时间之后,收到一个MXI中断包。

这是什么问题?



http://www.ppmy.cn/news/452379.html

相关文章

Xilinx(K7)和CycloneV之间的光纤通信设置

Xilinx(K7)和CycloneV之间的光纤通信设置 本文为明德扬原创文章,转载请注明出处! 今天跟大家分享基于Xilinx K7和C5之间的光纤通信,本工程是K7例化四个速率都是3.125Gbps的光纤GTX的IP核的设置,C5例化的是…

K7 GTX在SDI中的使用解析

UG476是GTX的数据手册。 详细解析xapp592 先来看看kc705_sdi_demo.v 一方面,是进行各个时钟的BUFFER处理。 IBUFDS_GTE2用来缓冲MGTbank上的输入的两路时钟, BUFG用来缓冲各个工作时钟。 例如ODIV2输出的时钟,用BUFG来缓冲, GTX…

驱动——K7-DMA-PCIe

在做Windows系统PCIe驱动时,遇到的一些硬件驱动有关的问题总结一下: 一、K7 K7处理器:信号采集卡 K7系列CPU是AMD公司推出的高性价比CPU。 结构 3个并行的X86指令解码器;9个为高频率优化的超标量微结构;动态推测时…

C6678+K7+AD9253/AD9783 8路AD高速信号处理板

C6678K7AD9253/AD9783 8路信号处理板介绍 功耗≤35W 重量≤150g 尺寸105mm*180mm 供电电压:5V 所选用器件都是进口工业级 A /D: 2片AD9253(125MHz采样,共8路同轴电缆SSMA) (与AD9653兼容,16bits&#x…

XILINX FPGA K7配置启动流程(官方手册整理)

1.在配置过程中,7系芯片需要的电压有,Vcco0,Vccaux,Vccbram和Vccint。 所有的Jtag配置引脚在一个独立的专用bank上,使用的电源也是专用电源Vcco0。多功能pin在14和15bank。bank0,14和15上的专用输入输出引脚…

K7 IDELAY2 仿真实验

FPGA类型 xilinx K7 仿真记录 模块例化 IDELAYE2 #(.CINVCTRL_SEL("FALSE"), // Enable dynamic clock inversion (FALSE, TRUE).DELAY_SRC("IDATAIN"), // Delay input (IDATAIN, DATAIN).HIGH_PERFORMANCE_MODE("FALSE"…

Flink状态编程:为什么不建议在ValueState里面存Map?

文章目录 先说结论性能:TTL: State需要存什么数据Heap 模式 ValueState 和 MapState 如何存储StateBackend模式 如何存储和读写State 数据1. RocksDB 模式 ValueState 和 MapState 如何存储1.1 ValueState如何映射为RocksDB的kv1.2 MapState如何映射为Ro…

【WebPack】前端工程化

文章目录 前端工程化一、前端工程化概念二、前端工程化优点三、前端工程化解决方案四、webpack 的基本使用4.1 什么是 webpack4.2 创建列表隔行变色项目4.3 安装 webpack4.4 配置 webpack4.5 自定义 打包入口与出口 五、webpack 的插件使用5.1 webpack 常见插件5.2 webpack-dev…