日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

zynq学习笔记

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

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

結構框圖如下:

?

1、PS部分

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

2、PL部分

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

3、AXI總線

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

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

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

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

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

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

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

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

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

    • FPGA原理

    FPGA內部主要基本結構:可編程的邏輯單元、可編程的連線和可編程的IO模塊。

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

    任何的時序邏輯都可以轉換為組合邏輯和D觸發器來完成。

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

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

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

    ?

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

    四、開發環境

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

  • 開發工具
  • ZYNQ系統的硬件系統和軟件系統的設計和開發需要用到以下開發環境和調試工具:

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

    ?

    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

  • 安裝完后,若需要手動添加環境變量,以后每次編譯軟件的時候都需要通過export指令將編譯環境路徑加入到PATH環境變量,在終端中輸入命令如下: ? ? ? ??
  • 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文件,在里面加入上述指令,這樣開機就會自動執行了。

    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、根文件系統制作

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

    ?

    6、vivado使用

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

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

    總結

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

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。