1. 程式人生 > >PYNQ2之ZYNQ的PS讀寫DDR

PYNQ2之ZYNQ的PS讀寫DDR

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;
}

執行,輸出如下所示: