學會Zynq(1)搭建Zynq-7000 AP SoC處理器
有三四個月沒有記錄blog了,這段時間也參加了一些比賽,以及上課。Vivado的資料還沒有記錄完,不過還是先記錄下這段日子用的比較多的Zynq, 也為接下來的專案做做準備。學習主要還是看官方資料,還有黑金米聯的一些教程(雖然一些細節、概念有錯誤,但能讓入門更快也是好事)。
FPGA嵌入式開發概述
使用Xilinx FPGA進行嵌入式設計有兩種解決方案:(1).使用MicroBlaze軟核處理器進行設計,適用於純FPGA平臺;(2).基於Zynq-7000 AP SoC處理器進行設計,只適用於Zynq系列FPGA。Zynq晶片內部包括ARM處理器(通常稱為PS部分)與可程式設計邏輯部分(通常稱為PL部分)。
本系列將講述如何使用Vivado完成基於Zynq平臺的嵌入式系統設計。一個完整的嵌入式系統設計要考慮硬體、軟體、FPGA設計三個部分。Xilinx為了儘量簡化設計流程,提供如下兩個主要設計工具:
-
Vivado IDE中的IP Integrator,將基於處理器的設計連線在一起,以圖形化的方式設定器件、選擇外設、配置硬體設定。
-
Vivado開發套件中的另一款軟體開發工具SDK(Software Development Kit),對基於微處理器的系統和嵌入式軟體應用進行設計、除錯。
目前Zynq包含Zynq UltraScale+ MPSoC系列(內建Cortex-A53)和Zynq 7000 SoC系列(內建Cortex-A9雙核)。本部落格系列主要以Zynq 7000系列為主,其嵌入式開發流程相對比較簡單,開發板採用米聯的MZ7X(淘寶可購買,適合新手)和火龍果、ZedBoard(適合進階階段,較貴)。相關學習資料可以參考官方文件UG898、UG940、UG585、UG821、UG782。
嵌入式系統設計流程
Xilinx提供的工具,既支援開發無需作業系統的裸機應用,也支援開發基於開源Linux作業系統的應用。下圖給出了一個大致流程:
完成一個嵌入式處理器設計的大致步驟如下:
- 建立一個Vivado工程。
- 在IP Integrator中建立一個塊設計,例項化Zynq處理器與其它Xilinx IP和自定義IP。
- 為塊設計中的IP生成輸出產品。
- 建立頂層封裝wrapper,將塊設計例項化到頂層RTL設計中。
- 執行綜合、實現、生成bit流,匯出硬體到SDK中。
- 在SDK中建立軟體應用,將可執行的ELF檔案與硬體設計聯絡在一起。
- 下載程式到開發板中。
IP Integrator中的連線
配置好Zynq處理器後,通常還要新增一些其它IP。IP Integrator中的設計助手(Designer Assistance)特性可以幫助設計者完成系統搭建與埠之間的連線,主要包括如下兩個功能:
- Block Automation,模組自動化幫助設計者完成一些模組的配置,完成基本系統的建立,支援交叉觸發(cross-trigger)特性。
- Connection Automation,連線自動化在檢測到當前例項化的IP之間可能需要連線時,可以自動完成連線操作。
當然,連線也可以手工完成。當工具檢測到某些工作可以通過設計助手完成時,會在視窗上方給出提示,如下圖:
系統搭建完成後,最好執行DRC檢查避免設計中存在錯誤。點選上圖中的Validate Design按鈕(倒數第4個),如果沒有錯誤會彈出如下提示視窗:
把塊設計整合到頂層設計中
本節具體講述下設計步驟的3、4步。生成輸出產品會產生IP核的原始檔與約束檔案。匯出檔案的語言由工程設定決定,如果某IP核不支援該語言,匯出時會提示相關資訊。源視窗中選中IP Integrator驗證好的塊設計,右鍵->Generate Output Products,或在左側Flow Navigator中點選IP INTEGRATOR->Generate Block Design,可匯出該塊設計中所有IP的輸出檔案。
點選上圖中的Create HDL Wrapper,可以將塊設計整合到一個更高層次的設計中。Vivado提供兩種封裝方式,如下圖:
第一項允許設計者修改封裝檔案,但如果塊設計的埠發生變化,設計者要記得更新封裝檔案。第二項生成的封裝檔案為Read-Only模式,Vivado自動管理和更新該檔案。封裝好後便可以執行綜合、實現、生成bit流等操作。
硬體設計匯出到SDK
當把IP Integrator中的處理器硬體設計匯出到SDK時,會生成下表中格式的一些檔案。
檔名 | 功能 |
---|---|
system.xml | 執行SDK時預設開啟,顯示系統的地址對映相關資訊 |
Ps<#>_init.c Ps<#>_init.h | 包含Zynq處理器系統的初始化程式碼,還有DDR、時鐘、PLL和MIO的初始化設定資訊 |
PS<#>_init.tcl | 初始化檔案的Tcl版本 |
PS<#>_init.html | 描述初始化資料 |
SDK提供了為Xilinx嵌入式處理器建立軟體應用的完整開發環境,具體包括:基於GNU的編譯工具鏈(GCC編譯器、TCF系統偵錯程式、相關單元和庫)、JTAG偵錯程式、Flash程式設計器、Xilinx IP和裸機板級支援包的驅動、使用C/C++進行裸機開發或Linux應用開發的IDE。SDK基於開源的Eclipse平臺開發,還包含了C/C++開發工具箱。
當設計已經實現並生成了bit流時,通常都需要將設計匯出到SDK中進行軟體應用開發。某些設計中PL部分可能不包含任何邏輯(即單純地把Zynq當作ARM來使用),無需實現和生成bit流便可匯出設計。先點選File->Export->Export Hardware,彈出如下視窗:
選中“Include bitstream”,點選OK匯出硬體資訊。完成後再點選File->Launch SDK即可執行SDK。之後便可以在SDK中進行軟體應用設計。設計完成後還可以在SDK中除錯、下載軟體,也可以匯出ELF檔案,在Vivado中和bit流一起進行下載、測試。
Hello World例項
本文前面介紹了一些FPGA嵌入式開發的基本知識和軟體特性,本小節將以一個完整的Hellow World例項熟悉如何搭建Zynq-700 AP SoC處理器。這個過程中將運用到上述特性,也會出現一些大家不熟悉的概念。本節著重體會一個大致的流程,具體概念在下一篇著重講述。
- Vivado中建立一個工程,選擇晶片時選擇一個與開發板相符的型號。
- 點選IP INTEGRATOR->Create Block Design,為塊設計命名。
- 白板中新增IP核“ZYNQ7 Processing System”,注意上方彈出設計助手,點選Run Block Automation,彈出視窗如下:
- 設計助手提示我們會自動建立FIXED_IO和DDR,直接點選OK:
- 將M_AXI_GP0_ACLK和FCLK_CLK0手工連在一起:
- 雙擊ZYNQ,對IP核進行配置。首先在“Clock Configuration”中配置時鐘,引數要與開發板相符。這裡PS時鐘為33.3M。
- DDR Configuration中配置DDR記憶體,同樣要與開發板相符,DDR Controller Configuration->Memory Part中要選擇正確的DDR晶片型號。
- 接下來在MIO Configuration中配置PS部分的外部I/O資訊,我這裡只希望用一組串列埠列印“Hello World”,因此只配置了UART1,另外Bank0核Bank1的I/O電壓設定也要與開發板相符。
- 配置完成後,依次生成輸出產品、用wrapper封裝、生成bit流、匯出硬體、啟動SDK(注意某些開發板需要在啟動SDK前便與電腦連線好)。
- 耐心等待SDK啟動和載入完硬體,視窗如下。左側Project Explorer顯示了硬體平臺資訊,中間顯示了地址對映關係。基於建立好的硬體平臺,我們可以建立多個軟體應用。
- 點選File->New->New Application Project建立新的應用,這裡只設定了工程名,如下:
- 點選Next,選擇示例工程Hello World,點選Finish。
- 接下來對該示例工程進行除錯,選擇如下圖:
- 彈出視窗中,Xilinx C/C++ application(System Debugger)->右鍵->new:
- 彈出如下視窗。如果匯出硬體時沒有選擇Include bitstream,此處Bitstream File視窗顯示為空,點選Browse選擇即可。選中Reset entire system和Program FPGA,點選Apply,再點選Debug。
- 等待Debug載入完成。注意如果你發生這種情況:Vivado中可以檢測到FPGA且正常下載程式,但一到SDK中就檢測不到FPGA,最簡單的解決方法就是開發板上不要插入帶有作業系統程式的SD卡。很多初學者就是犯了這個錯誤,導致無法從SDK中下載程式。
- 在下方的SDK Termianl視窗中,點選“+”新增串列埠,Port為對應COM號:
- 連線成功後,SDK Terminal視窗中有相應提示,點選Resume按鈕或按F8,終端中列印出Hello World,表明功能正確。
至此便完成了一個簡單的嵌入式開發例項,接下來的文章將介紹整個流程中設計到的很多概念,以及一些選項的具體配置方法。本文實驗使用的是SDK自帶例程,後面的文章中也會講述如何自己在SDK中程式設計。
相關文章
- 學會Zynq(2)Zynq-7000處理器的配置詳解
- 學會Zynq(10)lwIP簡介
- 學會Zynq(3)Zynq的軟體開發基礎知識
- 搭建node服務(1):日誌處理
- 機器學習導圖系列(1):資料處理機器學習
- Counterpoint:2021年第三季度全球智慧手機 AP(應用處理器)/SoC(片上系統)出貨量同比增長 6%
- 學會Zynq(8)PL中斷示例(SPI)
- 學會Zynq(7)中斷系統簡介
- 學會Zynq(9)定時器使用示例(PPI)定時器
- Mean AP=-1
- 龍芯1D處理器datasheet
- 學會Zynq(5)GPIO中EMIO的使用方法
- 學會Zynq(4)GPIO中MIO的使用方法
- 學會Zynq(12)lwIP 1.4.1庫的配置與使用
- FPGADesigner《學會Zynq》系列目錄與傳送門FPGA
- Strategy Analytics:2020年Q1智慧手機應用處理器(AP)營收 高達份額高達40%營收
- (1) Pytorch深度學習—數值處理PyTorch深度學習
- 100天搞定機器學習|Day1資料預處理機器學習
- PHP視訊處理器安裝環境搭建PHP
- 學會Zynq(6)固化程式到SD卡或QSPI FlashSD卡
- 004:ZYNQ_AXI匯流排學習筆記(1)筆記
- (轉)機器學習:偏差處理(2)機器學習
- 學會Zynq(11)RAW API的TCP和UDP程式設計APITCPUDP程式設計
- 龍芯1A處理器引數介紹
- 龍芯1D晶片處理器介紹晶片
- 龍芯1B晶片處理器介紹晶片
- 異常處理1
- OpenCV影像處理學習筆記-Day1OpenCV筆記
- day1—字串處理1(python一天一學)字串Python
- 機器學習一:資料預處理機器學習
- 【AP】a pratical guide to robust optimization(1)GUIIDE
- CPU(中央處理器)和GPU(影像處理器)的區別GPU
- 機器學習筆記---資料預處理機器學習筆記
- Strategy Analytics:2019年Q2全球智慧手機應用處理器(AP)市場收益48億美元
- Strategy Analytics:2017年全球平板電腦應用處理器(AP)市場規模達到20億美元
- VMware 處理器配置
- cortex-A處理器
- CSS 前處理器CSS