小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

試著新建一個(gè)vivado項(xiàng)目

 goandlove 2019-08-01
打開vivado,打開了xapp1052的參考設(shè)計(jì)。此時(shí)需要新建項(xiàng)目,可以直接從file->Project->new啟動(dòng)新建項(xiàng)目
給新建的工程命名(默認(rèn)名字好像是project_1),并指定工程存放路徑,默認(rèn)選擇為工程創(chuàng)建子目錄:
由于是第一次學(xué)習(xí)vivado,新建工程類型,選擇“Example Project”:

快速創(chuàng)建一個(gè)基于Microblaze的工程,所以選擇的工程模板是“Base Microblaze”:

進(jìn)入下一步,要為工程選擇一個(gè)板卡,隨便弄一個(gè):

完成一步步后,點(diǎn)擊finish開始創(chuàng)建新工程,之后得到新工程框圖如下:

下面再為這個(gè)軟核添加其它IP或外圍:

首先,我們手動(dòng)添加axi_memory_maped_to_pcie,如上圖所示,點(diǎn)擊+號(hào),在彈出的IP列表中找到AXI MM to PCIe

雙擊上圖列表中的AXI MM to PCIe組建后,一個(gè)AXI MM to PCIe模塊自動(dòng)添加到了工程的Diagram里:

用同樣的方法,再添加另外一個(gè)組件-AXI BRAM CONTROLLER。然后選擇執(zhí)行自動(dòng)連接:

自動(dòng)連接后的地址編輯器如下所示:

添加組件的時(shí)候沒有顯示出參數(shù)配置的界面,也就是說之前添加的兩個(gè)組件目前是默認(rèn)配置,為了按照自己的要求對(duì)組件進(jìn)行配置,研究了一個(gè)下午,一直沒有找到入口,囧!其實(shí)最終發(fā)現(xiàn)和Altera的原理圖編輯一樣,在Diagram頁對(duì)目標(biāo)組件雙擊就可以進(jìn)入組件參數(shù)設(shè)置窗口(Xilinx叫重定制 IP(即:Re-customize IP)窗口),下面將加入到系統(tǒng)的pcie(應(yīng)該算Root端吧?!)核進(jìn)行配置,具體配置如下:

  • 鏈路采用4x,5G;
  • 參考時(shí)鐘100M;
  • Bar0空間64K
  • 地址寬度32位,
  • 數(shù)據(jù)寬度128位,
  • C_AXIBAR2PCIEBAR_0=0xFFFF0000(EP端的bar0地址),
  • C_PCIEBAR2AXIBAR_0=0x06000000(RP端的BRAM基地址)

記得上圖中的“Device/Port Type”要選擇“Root Port of PCI Express Root Complex”。

研究了半天,才終于找到怎么設(shè)置C_AXIBAR2PCIEBAR_0=0xFFFF0000(EP端的bar0地址)和C_PCIEBAR2AXIBAR_0=0x06000000(RP端的BRAM基地址),如下圖所示:

設(shè)置gpio為output,32bit。設(shè)置bram為128位。

------------------------------------------------

以上創(chuàng)建Microblaze工程是參考這篇文章https://www.cnblogs.com/yuzeren48/p/6680062.html進(jìn)行的;此時(shí)有個(gè)流程問題,該文章說接下來就可以將系統(tǒng)設(shè)計(jì)導(dǎo)入硬件到SDK了,但是我這邊的結(jié)果是導(dǎo)出硬件到SDK之前必須“Generate Block Design”。仔細(xì)閱讀這篇文章,確實(shí)提到了有此一步,但是是在導(dǎo)出硬件到SDK之后。我猜測該博主是先做項(xiàng)目,后寫博文,所以在參考其博文進(jìn)行設(shè)計(jì)的時(shí)候,應(yīng)該會(huì)有些許不一樣的地方。下面按照步驟繼續(xù)完成SDK里的任務(wù)。

生成系統(tǒng)框架設(shè)計(jì)之后,導(dǎo)出硬件到SDK,這樣就為該系統(tǒng)框架設(shè)計(jì)生成了一個(gè)hdf文件,從Vivado的file菜單里可以直接切換到SDK工具。進(jìn)入SDK之后從SDK的file菜單里file-new-board support packet,在該硬件平臺(tái)上生成BSP。

生成bsp之后的SDK如下圖所示:

繼續(xù)跟著前人步伐,在BSP的基礎(chǔ)上搭建一個(gè)C-project,這里就不新建工程了,而是使用pcie的example來舉例,點(diǎn)開下圖中紅框import example,選擇RC枚舉的例子。

如上圖所示點(diǎn)擊導(dǎo)入例程,彈出下圖所示窗口,選擇RC枚舉例子,然后點(diǎn)擊“OK”

樣例成功導(dǎo)入后,直接右擊工程,從彈出的下拉菜單里選擇“Build Project”:

Build project后就可以在debug目錄下看到相應(yīng)的elf文件了,如下圖所示。需要注意的是,對(duì)于像我這樣的新手來說,下圖中的目錄結(jié)構(gòu)也是需要留意的,由于一路創(chuàng)建硬件、軟件工程都是按照默認(rèn)設(shè)置,所以下圖中看到SDK目錄位于硬件工程目錄下,導(dǎo)入的BSP樣例則位于SDK目錄下,在BSP樣例目錄下就能找到Debug目錄了:

到此似乎RP端已經(jīng)圓滿結(jié)束了,但是原文里是在上述樣例基礎(chǔ)上進(jìn)行了修改;有點(diǎn)疑問的是修改是直接在樣例上修改,還是另建工程進(jìn)行修改呢?看行問后面出現(xiàn)了“build project,在project_2.sdk\helloword_bsp_xaxipcie_rc_enumerate_example_1\Debug目錄下生成elf文件。”也就是有了新的“project_2.sdk”,我的理解是不是新建了一個(gè)bsp?如果想要新建工程,可以在SDK里從file菜單的new下新建了一個(gè)工程:

這里由于還不太確定,所以還是在樣例的基礎(chǔ)上試著按照原文進(jìn)行如下修改:
修改rc_enmuerate_example.c文件(注:樣例工程的src目錄下只有xaxipcie_rc_enumerate_example.c文件)。需要修改以下幾個(gè)地方:
  • 1,去掉所有打印,使用gpio輸出替代printf;(此處暫不修改
  • 2,參考xgpio_example.c ,在rc_enmuerate_example.c中增加gpio初始化,輸出方向等設(shè)置;此處暫不修改
  • 3,將PCIE_CFG_BAR_0_ADDR改為0xFFFF0000,確保在枚舉的時(shí)候?qū)懭?span lang='EN-US'>EP端配置空間的bar0基地址是PCIE_CFG_BAR_0_ADDR;
  • 4,修改PcieInitRootComplex函數(shù)中關(guān)于link_up的部分,使用do while語句來確保RP和EP能link_up;此處該如何修改?
  • 5,從SDK安裝目錄E:\Xilinx\SDK\2015.4\data\embeddedsw\XilinxProcessorIPLib\drivers\axidma_v9_0\src中把所有.h文件copy到SDK工程所在的bsp\microblaze_0\include下,把所有.c文件copy到src目錄下,參考xaxidma_example_simple_intr.c文件配置dma,特別注意我們要根據(jù)自己ep端的設(shè)計(jì)來修xaxidma_g.c中的XAxiDma_ConfigTable。DMA這一塊需要修改的東西比較多,主要是DMA收發(fā)數(shù)據(jù)時(shí)的幾個(gè)Rxbuffer和Txbuffer地址要搞清楚,因?yàn)?span lang='EN-US'>microblaze在RP端而DMA在EP端。本例中,我們一開始通過micro blaze往Txbuffer填數(shù)時(shí),Txbuffer地址用的是RP端看過去的EP端BRAM地址。而DMA發(fā)送數(shù)據(jù)時(shí),Txbuffer地址用的是EP端看過去的BRAM地址。
  • 6,修改部分定義,代碼里有很多for循環(huán),次數(shù)太多影響仿真。
上面第4步,我試著修改如下:
/*
 Status = XAxiPcie_IsLinkUp(AxiPciePtr);
 if (Status != TRUE ) {
  xil_printf('Link is not up\r\n');
  return XST_FAILURE;
 }
 xil_printf('Link is up\r\n');*/
 /*Above was commented by Jerry, and which was changed to do-while statements*/
 do {
   Status = XAxiPcie_IsLinkUp(AxiPciePtr);
   if (Status != TRUE ) {
    xil_printf('Link is not up\r\n');
    return XST_FAILURE;
   }
 } while(Status != TRUE); 
 xil_printf('Link is up\r\n');
而第5步,從EDK安裝目錄下拷貝文件,由于版本不同,我安裝目錄下沒有axidma_v9_0,但是有好幾個(gè)不同的版本,最小版本是v9_3,還有v9_4到v9_8,那么就從最小的版本號(hào)里拷貝。
關(guān)于第6步的問題有:
  • xaxidma_example_simple_intr.c文件在哪兒?
  • 如何根據(jù)自己ep端的設(shè)計(jì)來修xaxidma_g.c中的XAxiDma_ConfigTable?
上面第一個(gè)問題的答案,應(yīng)該是在v9_3目錄下的examples目錄里能找到xaxidma_example_simple_intr.c文件。
接下來完成RP端最后一步(注意上面對(duì)于軟件的修改并未完成,先放一放),原文的描述是“打開vivado,右鍵board design,把elf文件關(guān)聯(lián)到我們的RP端board design里,RP端的軟硬件設(shè)計(jì)就算完成了。”,所謂的“右鍵board design”應(yīng)該是回到vivado之前RP的系統(tǒng)框圖設(shè)計(jì),右擊框圖里的microblaze,如下圖所示,選擇“Associate ELF Files...”:

之后彈出對(duì)話框,點(diǎn)擊瀏覽按鈕,搜索并找到之前剛剛生產(chǎn)的ELF文件,建立軟硬件之間的關(guān)聯(lián):

到此,按照原文,RP端已經(jīng)建立,下面開始第二部分,即EP端。

------------------------------------------------------------------------------分割線---------------------------------------------------------

在上面的基礎(chǔ)上,使用ip integrator – create block design,命名為Pcie_ep_dma。具體操作是在vivado的Flow菜單里:Flow->IP Integrator

可能是版本的問題,上述操作或者描述有誤,具體操作應(yīng)該是在vivado的Flow菜單里:Flow->Create Block Design,打開創(chuàng)建設(shè)計(jì)框圖,

在彈出的對(duì)話框里對(duì)設(shè)計(jì)進(jìn)行命名,設(shè)計(jì)存放地址保持默認(rèn)即可:

點(diǎn)擊OK給工程添加一個(gè)空的框圖設(shè)計(jì)架構(gòu),如下圖所示:

添加ip核:axi_memory_maped_to_pcie,axi_abram_ctrl,axi_direct_memory_access,axi_interconnect。這些IP核可以在IP Catalog里找到,可能名字在不同版本里不太一樣,在2018.3里,沒有下劃線,直接是空格代替,這也導(dǎo)致我在IP Catalog里搜索了半天沒有找到對(duì)應(yīng)IP:

設(shè)置EP端pcie核,本設(shè)計(jì)中鏈路采用4x,5G,參考時(shí)鐘100M,Bar0空間64K,地址寬度32位,數(shù)據(jù)寬度128位,C_AXIBAR2PCIEBAR_0=0xEEEE0000(RP端的bar0地址),C_PCIEBAR2AXIBAR_0=0x08000000(EP端的BRAM基地址)。設(shè)置bram數(shù)據(jù)位寬128bit。其余連線如下。

連線搞了半天,發(fā)現(xiàn)DMA自動(dòng)使能了SG,需要將其禁止,這樣才能和原文一致:

在配置地址空間的發(fā)現(xiàn)居然還存在未連接的slave:

上述問題通過比較RP添加的pcie核,不同的地方在AXI:System頁面里的S AXI ID WIDTH,RP里是4,而EP是2,而且還不能修改;只能刪除后重新添加,發(fā)現(xiàn)變成了4.

重新添加pcie核后,完成各個(gè)端口連接,運(yùn)行“Validate Design”的時(shí)候提示下面的錯(cuò)誤,該錯(cuò)誤似乎很多人遇到過,有人說是版本問題,解決的方案,有人換版本,有人是刪組件重新添加:

刪除該元件,然后重新添加并按照要求連接各個(gè)端口后,EP系統(tǒng)框架如下圖所示:

執(zhí)行Validate Design命令后不再出現(xiàn)之前的錯(cuò)誤了,但是所有地址都提示unmapped slaves

我不知道這是怎么發(fā)生的,但是試著找到一個(gè)方法來解決:即將每個(gè)unmapped slave先轉(zhuǎn)入exlcude(右擊目標(biāo)組件,選擇exlude segment命令):

這樣在Address Editor里會(huì)出現(xiàn)一個(gè)Exluded Address Segments,之前操作的組件就位于這里了,而且可以進(jìn)行地址映射:

然而,再鼠標(biāo)右擊這個(gè)位于Excluded里的組件,選擇Include Segment命令,這樣該組件就map好了:

依次方法,將所有組件map好,完整的地址映射如下圖所示,唯一的問題是,為何原文要將Data_S2MM以及Data_MM2S里的S_AXI_LITE接口要Exluded?

Validate Design終于沒有錯(cuò)誤和Critical Warning了:

為何剛剛建立的RP和EP框圖設(shè)計(jì)創(chuàng)建HDL Wrapper文件:


完畢后,分別對(duì)EP和RP兩個(gè)block design進(jìn)行generate output product(如上圖所示,選擇“Generate Output Products”)。選global綜合。


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多