第一章 MIZ701 VIVADO 搭建SOC最小系統HelloWorld


 

本章內容是MIZ701中的第五章,本來也是要過渡一下FPGA部分的,但是由於MIZ701沒有單獨提供PL部分的晶振時鍾,時鍾必須通過PS產生,所以本章內容作為Miz701的第一章內容。本章的目的是搭建一個最小的SOC系統,並且測試串口輸出,千兆以太網回路測試。本章先讓PS部分搭建最小系統,這樣可以從PS部分獲取到時鍾,然后為后面章節中PL部分提供時鍾源。

1.0本章難度系數★★☆☆☆☆☆

1.1最小系統分析

這張圖展示了我們需要構建的最小系統。並且下面的嵌入式實驗會基於這個最小系統進行添加外設。

wpsCAF7.tmp

本實驗中將會只使用到PS部分資源包括了ARM Cotrex-A9、 DDR3內存、一個UART串口。這就是我們的最小系統。首先我們程序會加載到DDR內存中,然后CPU一條一條執行,那么執行的情況我們可以通過串口打印觀察。

1.2板子使用的硬件

紅色線框內就是本次實驗需要用到的資源,分別為CPU XC7Z010、2片512MB內存、一個Micro接口的USB 轉 UART,內存型號實際焊機MT41K256M16RE-125 M

wpsCB08.tmpwpsCB09.tmpwpsCB0A.tmp

1.3新建一個VIVADO工程

Step1:新建一個名為為Miz701的工程

wpsCB0B.tmp

Step2:

wpsCB1C.tmp

Step3:

wpsCB1D.tmp

Step4:

wpsCB1E.tmp

1.4使用IP Integrator創建硬件系統

Step1:單擊Create Block Design

wpsCB1F.tmp

Step2:輸入system

wpsCB2F.tmp

Step3:單擊下圖中wpsCB30.tmp添加IP按鈕

wpsCB31.tmp

Step4:搜素單詞z選擇ZYNQ7 Processing System,然后雙擊

wpsCB32.tmp

Step5:添加進來了ZYNQ CPU IP,然后雙擊下圖

wpsCB43.tmp

Step6:修改時鍾輸入為50MHZ,可以看到ARM時鍾為650MHZ DDR為525MHZ(1050MHZ),並且修改FCLK_CLK0 為100MHZ

wpsCB44.tmp

Step7:修改MIO的配置 修改IO電壓,增加ENT0 和UART1接口,下面會測試這2個接口,之后單機OK.

wpsCB45.tmp

wpsCB46.tmp

Step8:修改內存型號為MT41K256M16RE-125 M

wpsCB47.tmp

Step9:單機Run Block Automation 進行自動連線,VIVADO軟件會根據信號的命名規則智能連線。

wpsCB57.tmp

Step10:勾選如下,直接單機OK

wpsCB58.tmp

Step11:在你點擊了OK后,你會發現DDR以及FICED_IO自勱的延伸出來,然后把時鍾FCLK_CLK0和M_AXI_GPI0_ACLK連接。方法:當把鼠標靠近的時候會自動連接。

wpsCB59.tmp

Step12:為了讓以太網PHY RTL8211E-VL可以工作,必須讓其復位PIN腳設置為1,只要簡單添加一個常量IP並且映射到PL部分的PIN腳(復位腳在FPGA 部分(PL)),和添加CPU方法一樣

wpsCB6A.tmp

Step13:雙擊設置常量為1

wpsCB6B.tmp

Step14:右擊PIN腳選擇Make External

wpsCB6C.tmp

wpsCB6D.tmp

Step15:取個有意義的名字如下圖,只要單擊相應的模塊就可以在右手邊修改

wpsCB6E.tmp

Step16: 右擊 system.bd, 單擊Generate Output Products

wpsCB7F.tmp

Step17:支部操作會產生執行、仿真、綜合的文件,可以看出來最后的硬件設計步驟還是回到了我們前面的FPGA開發上來了。

wpsCB80.tmp

Step18:右擊system.bd 選擇 Create HDL Wrapper 這步的作用是產生頂層的HDL文件

wpsCB81.tmp

Step19:選擇Leave Let Vivado manager wrapper and auto-update 然后單擊OK

wpsCB82.tmp

Step20:之后我看下源碼的層次結構,可以看到system_wrapper.v就是頂層文件,調用了CPU.

wpsCB83.tmp

Step21:查看system_wrapper.v源碼

//Copyright 1986-2015 Xilinx, Inc. All Rights Reserved.

//--------------------------------------------------------------------------------

//Tool Version: Vivado v.2015.4 (win64) Build 1412921 Wed Nov 18 09:43:45 MST 2015

//Date        : Sun Aug 28 12:47:04 2016

//Host        : Administrator running 64-bit Service Pack 1  (build 7601)

//Command     : generate_target system_wrapper.bd

//Design      : system_wrapper

//Purpose     : IP block netlist

//--------------------------------------------------------------------------------

`timescale 1 ps / 1 ps

module system_wrapper

   (DDR_addr,

    DDR_ba,

    DDR_cas_n,

    DDR_ck_n,

    DDR_ck_p,

    DDR_cke,

    DDR_cs_n,

    DDR_dm,

    DDR_dq,

    DDR_dqs_n,

    DDR_dqs_p,

    DDR_odt,

    DDR_ras_n,

    DDR_reset_n,

    DDR_we_n,

    FIXED_IO_ddr_vrn,

    FIXED_IO_ddr_vrp,

    FIXED_IO_mio,

    FIXED_IO_ps_clk,

    FIXED_IO_ps_porb,

    FIXED_IO_ps_srstb,

    PHY_Rst);

  inout [14:0]DDR_addr;

  inout [2:0]DDR_ba;

  inout DDR_cas_n;

  inout DDR_ck_n;

  inout DDR_ck_p;

  inout DDR_cke;

  inout DDR_cs_n;

  inout [3:0]DDR_dm;

  inout [31:0]DDR_dq;

  inout [3:0]DDR_dqs_n;

  inout [3:0]DDR_dqs_p;

  inout DDR_odt;

  inout DDR_ras_n;

  inout DDR_reset_n;

  inout DDR_we_n;

  inout FIXED_IO_ddr_vrn;

  inout FIXED_IO_ddr_vrp;

  inout [53:0]FIXED_IO_mio;

  inout FIXED_IO_ps_clk;

  inout FIXED_IO_ps_porb;

  inout FIXED_IO_ps_srstb;

  output [0:0]PHY_Rst;

  wire [14:0]DDR_addr;

  wire [2:0]DDR_ba;

  wire DDR_cas_n;

  wire DDR_ck_n;

  wire DDR_ck_p;

  wire DDR_cke;

  wire DDR_cs_n;

  wire [3:0]DDR_dm;

  wire [31:0]DDR_dq;

  wire [3:0]DDR_dqs_n;

  wire [3:0]DDR_dqs_p;

  wire DDR_odt;

  wire DDR_ras_n;

  wire DDR_reset_n;

  wire DDR_we_n;

  wire FIXED_IO_ddr_vrn;

  wire FIXED_IO_ddr_vrp;

  wire [53:0]FIXED_IO_mio;

  wire FIXED_IO_ps_clk;

  wire FIXED_IO_ps_porb;

  wire FIXED_IO_ps_srstb;

  wire [0:0]PHY_Rst;

  system system_i

       (.DDR_addr(DDR_addr),

        .DDR_ba(DDR_ba),

        .DDR_cas_n(DDR_cas_n),

        .DDR_ck_n(DDR_ck_n),

        .DDR_ck_p(DDR_ck_p),

        .DDR_cke(DDR_cke),

        .DDR_cs_n(DDR_cs_n),

        .DDR_dm(DDR_dm),

        .DDR_dq(DDR_dq),

        .DDR_dqs_n(DDR_dqs_n),

        .DDR_dqs_p(DDR_dqs_p),

        .DDR_odt(DDR_odt),

        .DDR_ras_n(DDR_ras_n),

        .DDR_reset_n(DDR_reset_n),

        .DDR_we_n(DDR_we_n),

        .FIXED_IO_ddr_vrn(FIXED_IO_ddr_vrn),

        .FIXED_IO_ddr_vrp(FIXED_IO_ddr_vrp),

        .FIXED_IO_mio(FIXED_IO_mio),

        .FIXED_IO_ps_clk(FIXED_IO_ps_clk),

        .FIXED_IO_ps_porb(FIXED_IO_ps_porb),

        .FIXED_IO_ps_srstb(FIXED_IO_ps_srstb),

        .PHY_Rst(PHY_Rst));

endmodule

可以看到頂層文件的源碼調用了CPU接口,所有外設的接口也都是通過頂層文件引出來的。

Step22:單機Add Sources

wpsCB93.tmp

Step23:選擇Add or create constraints

wpsCB94.tmp

Step24:選擇Create File

wpsCB95.tmp

Step25:輸入zynq_pin

wpsCB96.tmp

Step26:如圖,單擊Finish

wpsCBA7.tmp

Step27:雙擊打開zynq_pin.xdc文件,添加PIN腳約束

wpsCBA8.tmp

Step28:雙擊打開zynq_pin.xdc文件,添加PIN腳約束

set_property PACKAGE_PIN E17 [get_ports PHY_Rst[0]]

set_property IOSTANDARD LVCMOS33 [get_ports PHY_Rst[0]]

Step25:執行->產生bit文件wpsCBA9.tmp

1.6導出SOC硬件到SDK

Step1:File->Export->Export Hardware

wpsCBAA.tmp

Step2:勾選Include bitstream 直接單擊OK

wpsCBAB.tmp

Step3:File->Launch SDK加載到SDK

wpsCBBB.tmp

Step4:單擊OK

wpsCBBC.tmp

1.6 HelloWorld程序

Step1:導出完成后如下圖

1、硬件部分,這部分就是從VIVADO定制好的SOC硬件

2、這部分是硬件的地址空間分配

wpsCBBD.tmp

Step2:選擇File->New->Application Project

wpsCBBE.tmp

Step3:工程命名為HelloWorld,創建的bsp包取名為Miz702_bsp,然后單擊NEXT

wpsCBBF.tmp

Step4:系統里面有很多自帶的測試程序,本次就用自帶的Helloworld程序做測試,單擊Finish

wpsCBD0.tmp

Step5:完成后

wpsCBD1.tmp

Step6:右擊HelloWorld->Generate linker Script

wpsCBD2.tmp

Step7:可以看到所有可用內存的情況,代碼、數據、堆棧運行所在內存的情況。不做人后改動,關閉。

wpsCBD3.tmp

Step8:右擊HelloWorld->

wpsCBD4.tmp

Step9:單擊這個位置新建

wpsCBD5.tmpStep10:然后進行如下設置

wpsCBE6.tmp

Step11:設置調試信息輸出的端口可以到支持串口和JTAG方式,如果使用串口先確保串口已經接通到電腦,並且開發板已經通電。這里選擇串口,這樣可以測試我們的串口是否正常工作了。如果以后調試可以直接使用JTAG調試更加方便並且波特率設置到115200之后單擊Apply。之后單擊Debug(注意開發板必須通電,另外TF卡確保拔掉)

wpsCBE7.tmp

Step12:進入SDK調試界面

1、啟動2、暫停3、停止4、代碼5、信息控制台6、調試變量

wpsCBE8.tmp

Step13:單擊運行輸出結果

wpsCBE9.tmp

1.7 MemTest內存測試程序

Step1:新建一個名為MemTest的工程

wpsCBF9.tmp

Step2:任然采用自帶的測試函數測試

wpsCBFA.tmp

Step3:測試結果

wpsCBFB.tmp


1.8 DRAMTest內存測試程序

Step1:新建一個名為DRAMTest的工程

wpsCBFC.tmp

Step3:新建一個名為MemTest的工程

wpsCBFD.tmp

Step4:測試結果

根據提示可以在控制台中輸入相關序號按回車進行(r,i測試會有一部分錯誤,還以和程序空間有關系)

wpsCC0E.tmp

1.9 LWIP協議對千兆網口測試

Step1:新建一個名為LWIP_Test的工程

wpsCC0F.tmp

Step2:選擇LWIP Echo Server 之后單擊Finish

wpsCC10.tmp

Step3:運行之后的串口打印信息

wpsCC11.tmp

Step4:用網絡助手實現回傳測試

wpsCC12.tmp

1.10使用快捷按鈕調試

wpsCC13.tmp

使用這兩個圖標,一個是debug一個是運行模式可以方便調試。

1.11 本章小結

本章詳細講解了定制一個SOC最小系統,並且運行了自帶的HelloWorld工程、MemTest內存測試工程、DRAMTest內存測試工程、LWIP網絡協議工程對千兆網口測試。本章讓初學者可以搭建一個最小的SOC系統,並且教會讀者利用軟件自動的工程對SOC的基本外設進行測試。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM