PYNQ2之ZYNQ的PS讀寫DDR
阿新 • • 發佈:2018-12-18
1、前期準備
和前面的不一樣這裡需要用到DDR,所以需要在PS中正確配置DDR,這也是看別人zedboard板卡教程自己卻一直實行不了的原因。
問題一:串列埠列印問題
首先是串列埠驅動問題,網上下載驅動,安裝一直提示未正確安裝驅動,裝置工作不正常。
解決方法:板卡接上電腦,開機,然後聯網,開啟360驅動大師,然後會出現一個未安裝驅動的USB裝置,然後點選安裝驅動,有時候可能需要反覆安裝多個驅動,直到提示正確安裝驅動。
問題二:PYNQ2板卡的預配置設定問題
首先需要PYNQ2的配置檔案,這個可以在tul官網下載。然後將資料夾pynq-z2放在如下目錄:
這時候去新建工程,在選擇FPGA晶片型別的時候,選擇board,我的vivado版本為17.2 如下圖所示:
然後在新增ZYNQ後,點選run block automation時候會發現,已經配置好。如果沒有配置,需要關機重啟,然後新建工程。
2、新建工程
首先新建一個工程。然後Create Block Design,然後右擊Add ip,選擇zynq,編譯,將輸出時鐘接在輸入時鐘後,generate outputs products,create HDL wrapper,編譯,生成bit,export加bit檔案,launch SDK。注意不需要xdc檔案!具體過程和上篇一樣。
3、SDK端設計
SDK的介面類似於eclipse,新建APP,然後輸入隨意的名稱,選擇hello world的工程。
首先什麼也不改,首先下載bit,然後執行dubug,串列埠列印hello world。
修改main檔案如下所示: #include "stdio.h" #include "platform.h" #include "xparameters.h" #include "xparameters_ps.h"<br>#include "xil_printf.h" #include "xil_io.h" #define DDR_BASEARDDR XPAR_DDR_MEM_BASEADDR + 0x10000000 int main() { init_platform(); int i; int rev; xil_printf("Hello World\n\r"); for(i=0; i<32; i++) { Xil_Out32(DDR_BASEARDDR+i*4,i); } for(i=0; i<32; i++) { rev = Xil_In32(DDR_BASEARDDR+i*4); xil_printf("the address at %x data is : %x \n\r" ,DDR_BASEARDDR+i*4, rev); } cleanup_platform(); return 0; }
執行,輸出如下所示: