一:前言windows
不少和我同樣初學pcie的硬件工程師都會遇到這樣一個問題,看了很多pcie相關的資料,仍是搞不清這玩意兒到底該怎麼用。因而咱們打開ISE的core_generator工具,生成了一個pcie的ip核,用modelsim仿真一下example design,仔細分析一下,好像對協議部分理解更深了。至於怎麼用,呵呵……app
固然,多數硬件工程師都是有上進心的!因而咱們上網找資料,發現了一個xilinx官方出品的demo:xapp1052。全稱是Bus Master DMA Performance Demonstration Reference Design for the Xilinx Endpoint PCI Express® Solutions。高大上啊,終於知道用在什麼地方了,果斷下載下來。打開一看,東西很多,按照裏面xapp1052.pdf的說明,一步一步生成bit,下載到開發板裏,而後安裝上位機軟件,最後測試而且用chipscope抓信號分析。但事實上,你愚蠢得連bit都生成不了(遇到相同狀況的朋友請默默爲我點贊)。就在你乾着急的時候,你看到了這篇偉大的博客……接下來,我將手把手教你如何使用這個xapp1052。函數
二:前期準備工具
一、pcie基礎仍是要有,尤爲是協議部分。推薦一本電子書,很經典,請耐心讀它(Addison.Wesley.PCI.Express.System.Architecture.eBook-LiB.chm)下載地址:http://download.csdn.net/download/yuzeren48/7723815佈局
二、一塊開發板,我使用的是Xilinx ML605。測試
三、一臺帶PCIE插槽的主機。spa
四、Xapp1052 Demo(http://download.csdn.net/download/yuzeren48/7723795).net
五、ISE14.1套件3d
三:使用說明調試
一、打開coregenerator生成一個4通道gen2的pcie ip核,配置部分見下圖,尤爲注意classcode必須是’h058000,不然沒法正常安裝驅動。除圖中幾處須要更改外,其他均爲默認設置
圖1 配置1
圖2 配置2
圖3 配置3
圖4 配置4
圖5 Pcie核目錄
二、創建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去掉。
三、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讀或者寫。
四、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讀內存