日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

zynq学习笔记

發(fā)布時間:2024/1/8 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 zynq学习笔记 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
  • zynq-7000簡介

?? ZYNQ-7000系列是Xilinx推出的一款全可編程片上系統(tǒng)(All Programmable SoC),該芯片集成了ARM Cortex A9雙核與FPGA,即PS部分和PL部分。

結(jié)構(gòu)框圖如下:

?

1、PS部分

PS部分集成兩個ARM Cortex-A9處理器,AMBA互聯(lián),外設包括USB總線接口、以太網(wǎng)接口、SD/SDIO接口、I2C總線接口、CAN總線接口、UART接口、GPIO等。PS部分可以完全獨立使用,不依賴PL部分。

2、PL部分

PL部分實質(zhì)就是xilinx的FPGA。在ZYNQ中,我們可以把PL看成是PS的另一個具有可重配置特點的“外設”,它可以作為PS部分的一個從設備,受ARM處理器控制。也可以把PL部分看成一個不受ARM處理器控制,與ARM處理器對等的主設備,主動完成與外部芯片、接口的數(shù)據(jù)交互。更甚至PL部分也可以作為整個系統(tǒng)的主設備,主動從APU部分的存儲器中獲取、存儲數(shù)據(jù),并可控制ARM處理器的運算。所以,理論上PL部分也可以像PS部分那樣獨立運行。但限制是必須使用JTAG接口對PL部分進行配置。如果沒有JTAG接口,就無法獨立運行,因為ZYNQ的PS部分和PL部分都必須依靠PS來完成芯片的初始化配置。

3、AXI總線

AXI(Advanced eXtensible Interface)是一種總線協(xié)議,該協(xié)議是ARM公司提出的AMBA(Advanced Microcontroller Bus Architecture)3.0協(xié)議中最重要的部分,是一種面向高性能、高帶寬、低延遲的片內(nèi)總線。它的地址/控制和數(shù)據(jù)相位是分離的,支持不對齊的數(shù)據(jù)傳輸,同時在突發(fā)傳輸中,只需要首地址,同時分離的讀寫數(shù)據(jù)通道、并支持Outstanding傳輸訪問和亂序訪問,并更加容易進行時序收斂。AXI 是AMBA 中一個新的高性能協(xié)議。AXI 技術(shù)豐富了現(xiàn)有的AMBA 標準內(nèi)容,滿足超高性能和復雜的片上系統(tǒng)(SoC)設計的需求。

在ZYNQ7000中,將FPGA和ARM集成在一個芯片內(nèi)部,兩者之間的通信使用AXI_HP、AXI_GP、AXI_ACP三種接口通信,帶寬可達吉比特,基本上不會存在二者通信帶寬不足的問題。

AXI_ACP接口,是ARM多核架構(gòu)下定義的一種64位高性能接口接口,理論帶寬1200MB/s,用來管理DMA之類的不帶緩存的AXI外設,PS端是Slave接口。

AXI_HP接口,是高性能/帶寬的AXI3.0標準的64位高性能接口接口,理論帶寬1200MB/s,總共有四個,PL模塊作為主設備連接。主要用于PL訪問PS上的存儲器(DDR和On-Chip RAM)

AXI_GP接口,是通用的AXI 32位低性能接口,理論帶寬600MB/S,總共有四個,包括兩個32位主設備接口和兩個32位從設備接口。

  • Zynq7000啟動流程

詳細說明請參考官方文檔ug585第六章。

  • 階段1
  • 在Zynq上,有一塊靜態(tài)存儲區(qū)ROM,專門負責zynq剛上電時的啟動過程,這個區(qū)域稱之為boot ROM。系統(tǒng)上電后,根據(jù)用戶選擇的啟動方式,boot ROM讀取啟動方式寄存器內(nèi)容來決定用戶設置的啟動方式。不過,只有當電源復位信號PS_POR_B和系統(tǒng)復位信號PS_SRST_B沒有處于復位狀態(tài)時,boot ROM才會讀取該寄存器。這里,用戶可以選擇的啟動方式包括Quad-SPI,SD卡,NAND Flash,NOR Flash和JTAG。上電自檢完成后,boot ROM會從先前選擇的啟動設備處讀取下一啟動階段會用到的啟動鏡像(fsbl鏡像),并先讀取該鏡像文件的頭部信息,然后根據(jù)這些信息對鏡像進行認證。通過認證后,就會把鏡像從Flash加載到OCM(On-Chip Memory),然后接下來的啟動過程就由FSBL控制。

    在非JTAG啟動模式下,ARM將執(zhí)行Boot ROM中的代碼,該部分代碼負責對NAND、NOR、Quad-SPI、SD卡與PACP的基本外設控制器進行初始化,使得ARM核可以訪問這些外設。而DDR等其他外設將在Stage 1或者之后進行初始化。處于安全考慮,在PS所有主要模塊當中,CPU總是最先啟動的。Boot ROM部分的代碼并不對PL部分做任何配置。

    Boot ROM控制整個芯片的初始化過程。Boot ROM中的代碼是固化的,不可修改的,處理器在上電或者熱啟動時自動執(zhí)行這部分代碼。

  • 階段2
  • 這個階段由FSBL(First Stage Boot Loader)負責啟動過程。Xilinx提供了FSBL代碼,我們可以通過SDK生成這部分代碼,這部分代碼可以幫我們完成了PS部分必要外設的初始化工作。當然這部分的代碼我們也可以根據(jù)自己的需要在SDK中進行修改。

    FSBL主要完成以下幾項工作:

  • 根據(jù)XPS中的配置,完成PS端的初始化。
    ??? ? b、使用比特流文件對PL進行配置
    ????? c、加載SSBL或者裸跑程序到內(nèi)存空間
    ????? d、跳轉(zhuǎn)執(zhí)行SSBL或者裸跑程序
  • PL部分的比特流文件、SSBL/裸機程序需要封裝成特定格式的Flash分區(qū)鏡像或是SD卡啟動鏡像,因為FSBL會遍歷分區(qū)表來尋找比特流文件、SSBL/裸機程序,然后進行加載配置。

  • 階段3
  • 該階段是可選的。如果在ARM核上運行的是一個裸跑程序,那么該部分就可以省略了。其實,SSBL就是我們平常嵌入式系統(tǒng)開發(fā)中的Bootloader,主要負責將操作系統(tǒng)加載到內(nèi)存中。

    • FPGA原理

    FPGA內(nèi)部主要基本結(jié)構(gòu):可編程的邏輯單元、可編程的連線和可編程的IO模塊。

  • 可編程邏輯單元
  • 其基本結(jié)構(gòu)某種存儲器(SRAM、FLASH等)制成的4輸入或6輸入1輸出地“真值表”加上一個D觸發(fā)器構(gòu)成。任何一個4輸入1輸出組合邏輯電路,都有一張對應的“真值表”,同樣的如果用這么一個存儲器制成的4輸入1輸出地“真值表”,只需要修改其“真值表”內(nèi)部值就可以等效出任意4輸入1輸出的組合邏輯。

    任何的時序邏輯都可以轉(zhuǎn)換為組合邏輯和D觸發(fā)器來完成。

  • 可編程連線
  • 在這些連線上有很多用存儲器控制的鏈接點,通過改寫對應存儲器的值就可以確定哪些線是連上的而哪些線是斷開的。這就可以把很多可編程邏輯單元組合起來形成大型的邏輯電路。

    布線資源連通FPGA內(nèi)部的所有單元,而連線的長度和工藝決定著信號在連線上的驅(qū)動能力和傳輸速度。FPGA芯片內(nèi)部有著豐富的布線資源,根據(jù)工藝、長度、寬度和分布位置的不同而劃分為4類不同的類別。第一類是全局布線資源,用于芯片內(nèi)部全局時鐘和全局復位/置位的布線;第二類是長線資源,用以完成芯片 Bank間的高速信號和第二全局時鐘信號的布線;第三類是短線資源,用于完成基本邏輯單元之間的邏輯互連和布線;第四類是分布式的布線資源,用于專有時鐘、復位等控制信號線。

      在實際中設計者不需要直接選擇布線資源,布局布線器可自動地根據(jù)輸入邏輯網(wǎng)表的拓撲結(jié)構(gòu)和約束條件選擇布線資源來連通各個模塊單元。從本質(zhì)上講,布線資源的使用方法和設計的結(jié)果有密切、直接的關(guān)系。

    ?

  • 可編程IO
  • 可編程輸入/輸出單元簡稱I/O單元,是芯片與外界電路的接口部分,完成不同電氣特性下對輸入/輸出信號的驅(qū)動與匹配要求。為了便于管理和適應多種電器標準,FPGA的IOB被劃分為若干個組(bank),每個bank的接口標準由其接口電壓VCCO決定,一個bank只能有 一種VCCO,但不同bank的VCCO可以不同。只有相同電氣標準的端口才能連接在一起,VCCO電壓相同是接口標準的基本條件。

    四、開發(fā)環(huán)境

    由于ZYNQ將CPU于FPGA集成在一起,開發(fā)人員既需要設計ARM的操作系統(tǒng)應用程序和設備驅(qū)動程序,有需要設計FPGA部分的硬件邏輯設計。開發(fā)中既要了解Linux操作系統(tǒng),系統(tǒng)的構(gòu)架,也需要搭建一個FPGA和ARM系統(tǒng)之間的硬件設計平臺。所以ZYNQ得開發(fā)是需要軟件人員和硬件人員協(xié)同設計的并開發(fā),這既是ZYNQ開發(fā)中所謂的“軟硬件協(xié)同設計”。

  • 開發(fā)工具
  • ZYNQ系統(tǒng)的硬件系統(tǒng)和軟件系統(tǒng)的設計和開發(fā)需要用到以下開發(fā)環(huán)境和調(diào)試工具:

    • Xilinx vivado設計套件實現(xiàn)FPGA部分的設計和開發(fā),管教和時序的約束,編譯和仿真,實現(xiàn)RTL到比特流的設計流程。
    • Xilinx SDK是xilinx軟件開發(fā)套件,在Vivado硬件系統(tǒng)的基礎(chǔ)上,系統(tǒng)會自動配置一些重要參數(shù),其中包含工具和庫路徑、編譯器選項、JTAG和閃存設置,調(diào)試器連接裸機板支持包(BSP)。SDK也為所有支持的Xilinx IP硬核提供驅(qū)動程序。
    • 交叉編譯工具鏈是一個由編譯器、連接器和解析器組成的綜合開發(fā)環(huán)境,交叉編譯工具鏈主要由binutils、gcc、和glibc 3個部分組成。xilinx zynq平臺的交叉編譯工具是基于GNU工具的(arm-xilinx-linux-gnueabi-gcc , arm-xilinx-linux-gnueabi-gdb)。
    • FPGA的硬件調(diào)試工具有Xilinx提供的ChipScope Pro,可以在線觀察FPGA內(nèi)部的信號。

    ?

    2、交叉編譯工具鏈的安裝

  • 下載后的文件名為xilinx-2011.09-50-arm-xilinx-linux-gnueabi.bin。接下來安裝交叉編譯器,指令如下:? chmod +x xilinx-2011.09-50-arm-xilinx-linux-gnueabi.bin
  • ?
  • ?./xilinx-2011.09-50-arm-xilinx-linux-gnueabi.bin ? ? ? //開始安裝,安裝路徑可以用默認路徑,為 /root/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux

  • 安裝完后,若需要手動添加環(huán)境變量,以后每次編譯軟件的時候都需要通過export指令將編譯環(huán)境路徑加入到PATH環(huán)境變量,在終端中輸入命令如下: ? ? ? ??
  • export ARCH=arm

    exportCROSS_COMPILE=arm-xilinx-linux-gnueabi-

    exportPATH=/root/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/bin/:$PATH

    ? ? ?若不想每次都輸入,就在通過gedit /etc/bash.bashrc指令打開bash.bashrc文件,在里面加入上述指令,這樣開機就會自動執(zhí)行了。

    3、Linux編譯

    ? ?將zynq_zed_defconfig文件拷貝到arch/arm/configs目錄下

    ?? make ARCH=arm xilinx_zynq_defconfig

    ?? make ARCH=arm menuconfig

    ?? make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- UIMAGE_LOADADDR=0x8000 uImage

    ?

    4、u-boot編譯

    ?? make CROSS_COMPILE=arm-xilinx-linux-gnueabi- clean

    ?? make CROSS_COMPILE=arm-xilinx-linux-gnueabi- zynq_feima_defconfig

    ?? make CROSS_COMPILE=arm-xilinx-linux-gnueabi-

    5、根文件系統(tǒng)制作

    ? 參考 http://blog.csdn.net/asklw/article/details/52611594

    ?

    6、vivado使用

  • 打開vivado,選擇對應芯片型號,創(chuàng)建工程。
  • 添加.v源文件,編寫verilog程序,添加需要的IP。
  • 添加約束文件.xdc,編寫約束管腳。
  • 運行Run Synthesis綜合,生成網(wǎng)表文件。
  • 運行Run Implementation?布局布線。
  • 運行Generate Bitstream ?生成bit文件。
  • 7、開發(fā)流程

  • 在Vivado上新建工程,增加一個嵌入式的源文件。
  • 在Vivado里添加和配置PS和PL部分基本的外設,或需要添加自定義外設。
  • 在Vivado里生成頂層HDL文件,并添加約束文件。再編譯生成比特流文件system.bit。
  • 導出到SDK軟件開發(fā)環(huán)境,在SDK環(huán)境里可以編寫一些調(diào)試軟件驗證硬件和軟件,結(jié)合比特流文件單獨調(diào)試ZYNQ系統(tǒng)。
  • 在SDK里生成FSBL。
  • 在linux環(huán)境中生成bootloader鏡像(u-boot.elf)。
  • 在SDK里通過FSBL、比特流文件system.bit和u-boot.elf文件生成一個boot.bin文件。
  • 在linux環(huán)境里生成linux內(nèi)核鏡像文件Zimage(包含F(xiàn)PGA自定義 IP驅(qū)動)和文件系統(tǒng)ramdisk。
  • 把boot.bin、zimage和ramdisk三個文件放到SD卡(spi flash、nor ...)的FAT分區(qū)中,選擇啟動方式,啟動開發(fā)板電源。
  • ?

    總結(jié)

    以上是生活随笔為你收集整理的zynq学习笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。