1. 程式人生 > >Zedboard學習(四):PS+PL搭建SoC最小系統

Zedboard學習(四):PS+PL搭建SoC最小系統

zynq最核心的設計理念就是軟體加硬體,即PS+PL。通過軟硬體協同設計,結合了FPGA與雙arm9核心,對於嵌入式擁有極大的優勢。

SoC:System on
Chip的縮寫,稱為晶片級系統,也有稱片上系統,意指它是一個產品,是一個有專用目標的積體電路,其中包含完整系統並有嵌入軟體的全部內容。

整個片上系統主要使用資源:ZYNQ系列FPGA XC7Z020、2片DDR、串列埠晶片(USB轉UART)。zedboard板子自帶了這些資源,不需要另外新增模組。

PL部分(VIVADO):

新建工程,工程名為min_system,步驟省略,與前一篇部落格建立工程步驟相同。(開啟連結


這裡寫圖片描述

建好工程後,點選Create Block Design。
這裡寫圖片描述

名字取為soc_system。
這裡寫圖片描述

剛建好的Block Design。
這裡寫圖片描述

點選這裡寫圖片描述,新增IP核。

在彈出的搜尋框中輸入zynq,查詢zynq7處理器。雙擊選中即可新增入Block Design。
這裡寫圖片描述

新增完成後,點選上方出現的Run Block Design,自動進行配置。載入vivado軟體自帶的官方配置。

直接點OK。
這裡寫圖片描述

載入好的zynq處理器系統。
這裡寫圖片描述
其相當於一個CPU。現在在vivado中配置的是基礎的硬體配置,屬於PL;後面可以在SDK中對其進行軟體程式設計,屬於PS。

給處理器連上時鐘,才可以工作。用滑鼠左鍵長按拖動即可連線。
這裡寫圖片描述

雙擊ZYNQ7 Processing System模組,可以自定義硬體配置,新增或刪減CPU的硬體功能。這裡不做修改。
這裡寫圖片描述

儲存當前設計,之後可以看到多出了一個design,如下所示:
這裡寫圖片描述

在soc_system上,即之前建立的Block Design,右鍵–>Generate Output Products。
這裡寫圖片描述
點選generate產生模擬模型。
這裡寫圖片描述
官方的配置檔案一般都不會出錯,如果是自己設計的,最好還是模擬一下,避免有bug。

回到前面新建好的Block Design,右鍵–>Create HDL Wrapper,建立頂層verilog HDL檔案。
這裡寫圖片描述

選上面的,建立的Verilog HDL檔案使用者可以自己修改;選下面的,不可以修改。一般選上面的就行了。
這裡寫圖片描述

隨後自動生成頂層的Verilog HDL檔案。
這裡寫圖片描述

產生位元流檔案,作為FPGA的底層硬體配置。
這裡寫圖片描述

等待vivado分析綜合完,不過編譯得挺慢的,喝杯茶休息一下吧。

產生了位元流檔案之後就要匯出了。
File–>Export–>Export Hardware
這裡寫圖片描述
注意Include Bitstream也要選勾,要把生成的位元流檔案匯出到sdk,不然怎麼下載都不會成功的,因為沒有底層硬體配置好CPU,軟體程式怎麼可能跑的起來。

PS部分(SDK):

接下來,啟動SDK進行軟體部分的設計。
File–>Launch SDK
SDK介面。
這裡寫圖片描述

新建工程。
File–>New–>New Appilcation Project
這裡寫圖片描述
選項解釋:

OS Platform:作業系統平臺,有三種可選:standalone(裸機)、freertos823_xilinx、linux。選standalone。
Hardware Platform:選擇的就是之前匯出的硬體平臺,當然也可以選擇其他軟體自帶的配置好的硬體平臺。預設已經選擇好了我們自己建立的硬體平臺。
Processor:zynq自帶的兩個arm9處理器,選擇其中一個即可。預設選擇好了,不改動。
Language:可以選擇c語言或者c++,選預設的c語言。
Board Support Package:板級支援包,名字取為Hello_bsp。

Next,選擇Hello World工程模板。
這裡寫圖片描述

點選Finish後,建立工程。
這裡寫圖片描述

修改Hello_World.c檔案。

/******************************************************************************
*
* Copyright (C) 2009 - 2014 Xilinx, Inc.  All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* Use of the Software is limited solely to applications:
* (a) running on a Xilinx device, or
* (b) that interact with a Xilinx device through a bus or interconnect.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* XILINX  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
* OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
* Except as contained in this notice, the name of the Xilinx shall not be used
* in advertising or otherwise to promote the sale, use or other dealings in
* this Software without prior written authorization from Xilinx.
*
******************************************************************************/

/*
 * helloworld.c: simple test application
 *
 * This application configures UART 16550 to baud rate 9600.
 * PS7 UART (Zynq) is not initialized by this application, since
 * bootrom/bsp configures it to baud rate 115200
 *
 * ------------------------------------------------
 * | UART TYPE   BAUD RATE                        |
 * ------------------------------------------------
 *   uartns550   9600
 *   uartlite    Configurable only in HW design
 *   ps7_uart    115200 (configured by bootrom/bsp)
 */

#include <stdio.h>
#include "platform.h"
#include "xil_printf.h"


int main()
{
    init_platform();

    print("Hello Zedboard\n\r");

    cleanup_platform();
    return 0;
}

程式就是從串列埠列印字串:”Hello Zedboard\n\r”。
預設設定波特率為115200。
這裡寫圖片描述

下載測試:

SDK自帶串列埠除錯助手,點選+號,新建一個連線:
這裡寫圖片描述
填入對應的埠號。
這裡寫圖片描述

右鍵Hello工程,Run as–>Run Configuration
雙擊下面選中的項,新建一個下載配置。
這裡寫圖片描述
如下都是預設配置:
指定了硬體平臺、處理器、位元流檔案、tcl檔案。bit檔案為之前vivado下生成的位元流檔案。
這裡寫圖片描述
工程名、可執行檔案。elf檔案是SDK中工程編譯後生成的可執行檔案。
這裡寫圖片描述

最後可以下載程式進板子了。
首先配置底層硬體。
xilinx tools–>program fpga
由於之前已經匯出了位元流檔案,所以預設已經選好了位元流檔案。
點選Program。

然後下載軟體程式。
之前在Run Configuration已經配置好,可以直接Run了。
點選這裡寫圖片描述 的小箭頭,選擇之前配置好的下載配置。等一下子程式會下載進去。

執行結果:
這裡寫圖片描述