Xilinx PCIe IP核示例工程代码分析与仿真

该博客详细介绍了PCIe的基础知识和Xilinx相关IP核的使用,包括PCIe数据链路与拓扑结构、PCIe IP核配置、工程仿真以及测试案例。通过分析PCIe IP核的配置参数和工程仿真过程,展示了如何进行PCIe BAR的读写测试,同时提供了PCIe配置空间的解析和相关任务的功能说明。通过仿真,验证了PCIe链路速度、宽度的检查以及BAR空间的正确映射和读写操作。

PCIe学习笔记系列:

  1. PCIe基础知识及Xilinx相关IP核介绍
    概念了解:简单学习PCIe的数据链路与拓扑结构,另外看看有什么相关的IP核。
  2. 【PG054】7 Series Integrated Block for PCI Express IP核的学习
    基础学习:关于Pcie IP核的数据手册,学习PCIe相关的IP核的配置参数及其对应的含义。
  3. Xilinx PCIe IP核示例工程代码分析与仿真
    基础学习:关于PCIe IP核的仿真,学习PCIe的配置流程以及应用过程。
  4. Xilinx XDMA 例程代码分析与仿真结果
    应用学习:关于Xilinx PCIe DMA IP核的仿真,学习 PCIe DMA 的配置过程以及具体的数据传输流程。
  5. XDMA linux平台调试过程记录
    应用学习:关于XDMA的实际调试过程,可在此基础上定制自己的需求。

【PG054】7 Series Integrated Block for PCI Express IP核的学习中学习了7 Series Integrated Block for PCI Express IP核的一些基础知识,下面通过仿真进一步理解。

1 工程建立

只进行仿真设计,随便配置成Endpoint器件就行。

1 page1:Basic

在这里插入图片描述

2 page2: IDs

在这里插入图片描述

3 page3: BARs

在这里插入图片描述

4 page4: Core Capabilities

在这里插入图片描述

5 page5: Interrupts

在这里插入图片描述

设置好IP核之后,右击IP核打开示例工程:

在这里插入图片描述

示例工程的文件结构:

 xilinx_pcie_2_1_ep_7x
 |
 |--pcie_7x_0_support
 |  |--pcie_7x_0_pipe_clock                                      
 |  |--pcie_7x_0 (Core Top level module Generated by Vivado in synth directory)
 |     |--pcie_7x_v3_3_4_top (Static Top level file) 
 |        |--pcie_7x_v3_3_4_core_top
 |           |
 |           |--pcie_7x_0_pcie_top
 |           |  |
 |           |  |--pcie_7x_0_axi_basic_top
 |           |  |  |
 |           |  |  |--pcie_7x_0_axi_basic_rx
 |           |  |  |  |
 |           |  |  |  |--pcie_7x_0_axi_basic_rx_pipeline
 |           |  |  |  |--pcie_7x_0_axi_basic_rx_null_gen
 |           |  |  |
 |           |  |  |--pcie_7x_0_axi_basic_tx
 |           |  |     |
 |           |  |     |--pcie_7x_0_axi_basic_tx_pipeline
 |           |  |     |--pcie_7x_0_axi_basic_tx_thrtl_ctl
 |           |  |
 |           |  |--pcie_7x_0_pcie_7x
 |           |  |  |
 |           |  |  |--pcie_7x_0_pcie_bram_top_7x
 |           |  |  |  |
 |           |  |  |  |--pcie_7x_0_pcie_brams_7x (an instance each for Rx & Tx)
 |           |  |  |     |
 |           |  |  |     |--pcie_7x_0_pcie_bram_7x
 |           |  |  |
 |           |  |  |--PCIE_2_1 (Integrated Block Instance)
 |           |  |
 |           |  |--pcie_7x_0_pcie_pipe_pipeline
 |           |     |
 |           |     |--pcie_7x_0_pcie_pipe_misc
 |           |     |--pcie_7x_0_pcie_pipe_lane (per lane)
 |           |
 |           |--pcie_7x_0_gt_top
 |              |
 |              |--pcie_7x_0_gt_rx_valid_filter
 |              |
 |              |--pcie_7x_0_pipe_wrapper
 |              |  |
 |              |  |--pcie_7x_0_pipe_reset
 |              |  |--pcie_7x_0_qpll_reset
 |              |  |--pcie_7x_0_pipe_user
 |              |  |--pcie_7x_0_pipe_rate
 |              |  |--pcie_7x_0_pipe_sync
 |              |  |--pcie_7x_0_pipe_drp
 |              |  |--pcie_7x_0_pipe_eq
 |              |  |  |--pcie_7x_0_rxeq_scan
 |              |  |  |
 |              |  |--pcie_7x_0_gt_common
 |              |  |  |--pcie_7x_0_qpll_drp
 |              |  |  |--pcie_7x_0_qpll_wrapper
 |              |  |
 |              |  |--pcie_7x_0_gt_wrapper
 |
 |--pcie_app_7x (PIO design, in example_design directory)
    |
    |--PIO
       |
       |--PIO_EP
       |  |
       |  |--PIO_EP_MEM_ACCESS
       |  |  |
       |  |  |--EP_MEM
       |  |     |
       |  |     |--RAMB36
       |  |
       |  |--PIO_RX_ENGINE
       |  |--PIO_TX_ENGINE
       |
       |--PIO_TO_CTRL

2 工程仿真

2.1 代码分析

再回顾一下示例程序的结构:

在这里插入图片描述

首先打开testbench中的文件pci_exp_usrapp_tx.v, 层次路径为:board/RP/tx_usrapp, 重点关注一个initial块:

在这里插入图片描述

  • 308行:这里指定了测试任务的名称为pio_writeReadBack_test0
  • 324行:这里通过调用TSK_USR_DATA_SETUP_SEQ任务对DATA_STORE进行初始化。
  • 332行:这里通过文件包含命令``include "tests.vh"添加了有关测试任务的具体内容。注意verilog的文件包含与c有区别,verilog是直接把tests.vh中的内容直接搬过来,打开tests.vh可以看到只有一句代码:\include “sample_tests1.vh”, sample_tests1.vh中的就是具体的每个测试任务的内容了:

在这里插入图片描述

其中,名为pio_writeReadBack_test0的测试任务的具体内容为:

else if(testname == "pio_writeReadBack_test0")
begin

    // This test performs a 32 bit write to a 32 bit Memory space and performs a read back

    board.RP.tx_usrapp.TSK_SIMULATION_TIMEOUT(10050);

    board.RP.tx_usrapp.TSK_SYSTEM_INITIALIZATION;

    board.RP.tx_usrapp.TSK_BAR_INIT;

//--------------------------------------------------------------------------
// Event : Testing BARs
//--------------------------------------------------------------------------

        for (board.RP.tx_usrapp.ii = 0; board.RP.tx_usrapp.ii <= 6; board.RP.tx_usrapp.ii =
            board.RP.tx_usrapp.ii + 1) begin
            if (board.RP.tx_usrapp.BAR_INIT_P_BAR_ENABLED[board.RP.tx_usrapp.ii] > 2'b00) // bar is enabled
               case(board.RP.tx_usrapp.BAR_INIT_P_BAR_ENABLED[board.RP.tx_usrapp.ii])
                   2'b01 : // IO SPACE
                        begin

                          $display("[%t] : Transmitting TLPs to IO Space BAR %x", $realtime, board.RP.tx_usrapp.ii);

                          //--------------------------------------------------------------------------
                          // Event : IO Write bit TLP
                          //--------------------------------------------------------------------------



                          board.RP.tx_usrapp.TSK_TX_IO_WRITE(board.RP.tx_usrapp.DEFAULT_TAG,
                           
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ChipWeaver

觉得有用的话点个赞吧 :)

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值