PCIE_DMA實例一:xapp1052詳細使用說明

一:前言

很多和我一樣初學pcie的硬件工程師都會遇到這樣一個問題,看了不少pcie相關的資料,還是搞不清這玩意兒到底該怎麼用。於是我們打開ISE的core_generator工具,生成了一個pcie的ip核,用modelsim仿真一下example design,仔細分析一下,好像對協議部分理解更深了。至於怎麼用,呵呵……

當然,多數硬件工程師都是有上進心的!於是我們上網找資料,發現了一個xilinx官方出品的demo:xapp1052。全稱是Bus Master DMA Performance Demonstration Reference Design for the Xilinx Endpoint PCI Express® Solutions。高大上啊,終於知道用在什麼地方了,果斷下載下來。打開一看,東西不少,按照裏面xapp1052.pdf的說明,一步一步生成bit,下載到開發板裏,然後安裝上位機軟件,最後測試並且用chipscope抓信號分析。但事實上,你愚蠢得連bit都生成不了(遇到相同情況的朋友請默默爲我點贊)。就在你乾着急的時候,你看到了這篇偉大的博客……接下來,我將手把手教你如何使用這個xapp1052。

 

二:前期準備

1、pcie基礎還是要有,尤其是協議部分。推薦一本電子書,很經典,請耐心讀它(Addison.Wesley.PCI.Express.System.Architecture.eBook-LiB.chm)下載地址:http://download.csdn.net/download/yuzeren48/7723815

2、一塊開發板,我使用的是Xilinx ML605。

3、一臺帶PCIE插槽的主機。

4、Xapp1052 Demo(http://download.csdn.net/download/yuzeren48/7723795)

5、ISE14.1套件

 

三:使用說明

1、打開coregenerator生成一個4通道gen2的pcie ip核,配置部分見下圖,尤其注意classcode必須是’h058000,否則無法正常安裝驅動。除圖中幾處需要更改外,其餘均爲默認設置

圖1 配置1

2 配置2

圖3 配置3

圖4 配置4

圖5 Pcie核目錄

 

2、建立BMD_Dsign 工程。完整工程文件下載地址(http://download.csdn.net/download/yuzeren48/7723831)。下載需要積分,推薦大家按照以下說明一步一步自己建立。首先打開ise,新建工程,添加文件。文件來自:

..\v6_pcie_v1_7\source全部

..\v6_pcie_v1_7\example_design中的xilinx_pcie_2_0_ep_v6_04_lane_gen2_xc6vlx240t-ff1156-1_ML605.ucf和xilinx_pcie_2_0_ep_v6.v

..\xapp1052\dma_performance_demo\fpga\BMD\common全部

..\xapp1052\dma_performance_demo\fpga\BMD中的BMD_64_RX_ENGINE.v和BMD_64_TX_ENGINE.v和v6_pci_exp_64b_app.v

然後編譯,由於要先編譯BMD_PCIE_20.v,所以右鍵選擇manual compile order,如圖6所示。

圖6 編譯工程

選中所有.v和.ucf文件,完成綜合以及佈局佈線,並生成bit文件,如圖7所示。

圖7 生成bit文件

注意:如果覺得這樣編譯不舒服,看不清層次結構。可以將BMD_PCIE_20.v刪除,並把所有文件中的`ifdef PCIE2_0去掉。

 

3、modelsim仿真

很多人覺得直接把bit寫入開發板,用chipscope在線調試即可。小編覺得最好還是先用modelsim做一下仿真,確定邏輯沒有問題再燒板子。小編曾好幾次燒了錯誤的bit,用chipscope怎麼都抓不到信號。接下來我們講如何仿真。

首先將..\v6_pcie_v1_7\example_design文件夾下的文件(除xilinx_pcie_2_0_ep_v6.v以外)全部刪除,將..\dma_performance_demo\fpga\BMD\common下的全部文件以及..\dma_performance_demo\fpga\BMD下的BMD_64_RX_ENGINE.v和BMD_64_TX_ENGINE.v和v6_pci_exp_64b_app.v複製到..\v6_pcie_v1_7\example_design文件夾下。

然後修改..\v6_pcie_v1_7\simulation\functional下的board.f文件,注意BMD_PCIE_20.v必須放在最前面編譯,修改後的board.f文件如圖8所示:

圖8 修改後的board.f

最後,打開Modelsim SE10.1b軟件,更改目錄至. .\v6_pcie_v1_7\simulation\functional

輸入腳本do simulate_mti.do 仿真結果如圖9圖10所示

圖9 仿真結果1

圖10 仿真結果2

備註:這裏的modelsim仿真並沒有用到DMA功能,只是測試我們的代碼完整性。如果需要仿真DMA功能,可以自己調用pci_exp_usrapp_tx.v中的函數,往DMA控制寄存器中寫入地址、長度等數據,然後啓動DMA讀或者寫。

 

4、Chipscopes抓包分析

首先需要在ise工程裏添加chipscope核,chipscope的使用方法詳見(http://download.csdn.net/download/yuzeren48/7705033),這裏給出帶有chipscope核的ise工程文件下載地址(http://download.csdn.net/download/yuzeren48/7723831)

插入cdc,生成了bit之後,下載到開發板中,將開發板插入主機的PCIE插槽,上電設備管理器檢測到有PCI內存控制器。用xapp1052.pdf中的步驟,強制安裝驅動。安裝完驅動後打開軟件如圖11所示

圖11 上位機軟件

先測試write:

將pattern to write 改成0x01020304,其餘保持默認設置。點擊start,在chipscope中我們就可以看到DMA控制寄存器一共收到了來自主機的多個數據包,如圖12所示(注意,將windows設成8,depth設成8,同時設置觸發信號如圖13所示)。

圖12 主機寫DMA控制寄存器

圖13 設置觸發信號

這些包都是用來寫DMA控制寄存器的,這幾個包的發包順序如下:

 當主機向偏移地址爲04的寄存器寫入0x00000001時,DMA啓動寫內存模式,如圖14所示。(我們可以通過設置觸發信號trn_rd的低32位爲0x01000000來檢測DMA寫開始)

圖14 DMA寫內存 

同樣的方法,測試read。我們可以通過DMA來讀內存。如圖15所示

圖15 DMA讀內存

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章