1. 程式人生 > >FPGA實踐教程(三)系統搭建與燒錄

FPGA實踐教程(三)系統搭建與燒錄

本文件系列是我在實踐將神經網路實現到Xilinx 的zynq的FPGA上遇到的問題和解決方法。

背景:我們用vivado HLS對相關軟體生成了相應的IP core,現在我們需要將IPcore整合為系統模式,整合為系統才能燒錄到FPGA上。

目的:用vivado軟體搭建相應的系統,生成位元流並燒錄入FPGA

可以參考文件UG871中Chapter9.10.11中的部分。

1.用vivado開啟工程

1.1解壓資料夾(是否每次都要開啟新的工程,才能保證燒寫成功?)

解壓後的工程包含的processing system正是我們的FPGA對應的,所以必須用此資料夾

1.2開啟vivado,開啟解壓後的資料夾的位置,並開啟工程

由於版本問題會缺失一些檔案,此問題不大,會出現一些提示資訊,這些提示資訊都是正常的,我們把相應的IP更新,更新為當前版本的IP。

是否out-of-context,我們選擇per IP

2.搭建系統

2.1新增IP

vivado可能在新增IP時候閃退,所以我們要保持良好的習慣,一是時時crtl+s,二是加完IP再改管腳。

2.1.1匯入IP庫,我們建立的IPcore就在這個庫裡面(注意點進去solution2這個資料夾新增,下面這種可能新增不進去)

2.1.2在block design中加入IP

需要加入三個,一個是axi direct memory access,一個是我們的IPcore cnn

2.1.3 修改system IP管腳

首先system裡面AXI通訊用的這兩個,GPmaster和HP slave,master與slave分別是主與從,master與

然後是clock configuration中的fabric clock,幾乎所有的輸出用的都是這個clk,100MHz

2.1.4修改DMA的管腳

取消勾選scatter gather engine,這個沒有用並且能減少很多管腳。

最大並行兩個都改成256,上面BufferLength改為23,這樣能夠更快的實現資料的傳輸。

2.2連線相應的IP

bug容易出現在這一步,所以這一步一定要小心,在之前工程的基礎上最好把相應的連線都去掉,然後重新連線。

2.2.1 點選run connection automation

2.2.2 連好後cnn的出連DMA入,DMA入連cnn出,用的axis通訊

  • DMA的記憶體方式為MM:memory map, IPcore的記憶體方式為S:stream,所以S2MM與MM2S一定要搞清楚。
  • 雖然介面的綜合被自動進行,但是我們還是需要了解下,PS的GP輸出資料流給AXI Interconnect,這個AXI Interconnect的出連線DMA的AXI Lite入
  • DMA的M_S2MM與MM2S都連在AXI Interconnect進而接入PS的HP
  • 我們看到cnn與DMA相連,DMA的入與出都與PS之間接了AXI Interconnect

2.2.3 cnn的clk和rst連到對應的位置

  • ProcessorSystemReset的ext_reset_in連繫統rst的出,
  • ProcessorSystemReset的出有兩個,一個interConnectRst一個peripheralRst,分別表示內部連線與外設的復位
  • cnn算外設,連在peripheralRst,DMA,兩個AXI interconnect都與peripheralRst相連
  • interConnect的兩個reset只連在兩個interconnect的IPcore上

2.2.4 給ap_start加入constant,值為1保證工作

2.3 生成位元流

2.3.1 validate不報錯和警告,然後regenerate layout

2.4 create HDL wrapper,點選生成位元流,這個過程大概耗費20分鐘

3.位元流燒錄入FPGA

3.1在工程目錄裡面找到剛剛生成的.bit檔案,然後拷貝到SD卡里面,命名為7z020.bit,把SD卡插入FPGA,然後FPGA一旦啟動就會自動根據相應的.bit檔案進行燒寫。

3.2可以不看。另一種方法是用SDK軟體,這種方法暫時不用(Export the hardware to SDK)

當位元流生成之後,硬體設計就完成了,我們我們就可以在processor上執行相應的code了。這部分工作會在Xilinx SDK(Software Developer Kit)上執行。所以我們先要從vivado上將相應的專案export到SDK上。(SDK有點liscence問題打不開,並且直接通過SD卡可能更加簡單一些,所以我們用SD卡來進行相應的位元流操作)

4.啟動arm執行程式並驗證

先啟動FPGA並連線片上ARM,執行相應的arm程式進行驗證,這部分工作見:

相應linux指令:

cd  /mnt/mmblk1p1

./dmabench  16200  9600

表明執行成功。