轉載來自:http://blog.csdn.net/xiaoyangger/article/details/7970142
Zedboard是第一款面向開源社區的Zynq-7000系列開發板,而Zynq-7000系列FPGA,也稱爲完全可編程(All Programable)SoC,是Xilinx一個有重大意義的產品系列。
在FPGA裏集成高性能的處理器內核一直是衆多FPGA廠商以及客戶的需求,Zynq-7000的面世標誌着Xilinx在SoC集成度上的一個突破,實現了雙核Cortex-A9 MPcore和最新的28nm 7系列可編程邏輯的緊密集成。
上圖可以看出Zynq芯片內部可以分爲兩部分PS(Processing System)和PL(Programmable Logic),其中PS部分有點像傳統的處理器內部結構,包括CPU核、圖形加速、浮點運算、存儲控制器、各種通信接口外設以及GPIO外設,而PL部分就是傳統的可編程邏輯和支持多種標準的IO,它們之間通過內部高速總線互聯。這種架構既提高了系統性能(處理器和各種外設控制的”硬核“),又簡化了系統的搭建(可編程的外設配置),同時提供了足夠的靈活性(可編程邏輯)。
Zedboard的一個簡單框圖,板上的外圍功能都是圍繞Zynq芯片
Zynq芯片的配置
因爲是最新的芯片和開發套件,資料還是比較少的,而且基本都是大部頭的英文。要用FPGA進行開發,首先要了解FPGA的配置過程。傳統的SRAM型FPGA都是通過JTAG接口、外置非易失性存儲器(PROM、FLASH)或者外部處理器一次性將程序下載到FPGA中配置。而Zynq芯片則不同,其內部集成了處理器硬核和可編程邏輯,所以它的配置啓動是分階段的。
- Stage 0:bootROM過程,Zynq芯片PS部分有片上ROM和RAM,在芯片上電或者復位後,其中一個處理器會執行片上ROM的代碼進行初始化,判斷啓動設備(boot device),將啓動設備上的FSBL(first boot loader)代碼拷貝到片上RAM內。
- Stage 1:啓動設備包括SPI FLASH、SD和JTAG,FSBL代碼是用戶自己定製的,拷貝到片上RAM後執行。包括初始化PS部分配置、配置PL部分邏輯、加載和執行SSBL(second boot loader)或應用程序。
- Stage 2:上一階段後硬件已經配置完成。這一階段是可選的,完成Linux系統啓動過程(U-BOOT)。
通過Zynq芯片的啓動過程可以看到上電或者復位後片內處理器首先啓動,然後根據MODE引腳判斷啓動方式,Zedboard的啓動可以通過Quad-SPI FLASH、SD卡或者JTAG接口,如下表:
管腳 |
MIO6
|
MIO5 | MIO4 | MIO3 | MIO2 |
跳線 | JP11 | JP10 | JP9 | JP8 | JP7 |
JTAG Mode | |||||
Cascade JTAG | 0 | ||||
Independent JTAG | 1 | ||||
Boot Device | |||||
JTAG | 0 | 0 | 0 | ||
Quad-SPI | 1 | 0 | 0 | ||
SD card | 1 | 1 | 0 | ||
PLL Mode
|
|||||
PLL used | 0 | ||||
PLL bypass | 1 |
Zedboard上有兩個JTAG,一個可以接Xilinx編程電纜,一個是USB轉JTAG
Demo演示
Zedboard的附件中的4G SD卡預裝了一個演示的Linux文件系統,而且板載的SPI FLASH上也有一個簡單的Demo程序,下面我們來看看這些demo程序的功能,能夠很快熟悉Zedboard的使用和板上的外設功能。
1. Quad-SPI啓動
板載SPI FLASH中預置了一個非常簡單的程序,SPI-FLASH啓動過程可以分爲:
- 上電後,片上ROM程序執行,初始化後判斷從SPI FLASH啓動。
- 從SPI FLASH拷貝FSBL到片上RAM執行
- FSBL執行,處理器從SPI FLASH讀取比特流(bitstream)配置Zynq的PL部分
- PL配置完成後執行,點亮LED
首先要MODE跳線選擇在SPI FLASH啓動模式,如下圖所示:
接通Zedboard電源,程序啓動,因爲是一個非常簡單程序,所以啓動配置過程非常快,藍色LED(LD12)變亮說明Zynq芯片配置完成,程序執行後按照(10101010)邏輯點亮用戶LED。
2. SD驅動
隨板附送的SD卡中有一個演示的Linux文件系統,而且在Linux系統下有一些腳本例程用來控制Zedboard板上各種外設的功能,這與之前的FPGA調試很不一樣,顯示了Zynq芯片軟硬件開發的強大和靈活性。
首先搭好Zedboard平臺,連接12V電源(J20)、USB-UART接口(J14)到計算機、插上SD卡(J12)、VGA(J19)或者HDMI(J9)。
上圖看到跳線J6必須短接,MODE跳線選擇SD啓動。
該Linux文件系統沒有圖形界面或者控制檯,所以必須通過串口或者ssh訪問。如果沒有安裝過USB-UART驅動,可以先通電後安裝USB串口驅動。安裝好驅動後打開一個串口監視器,可以使用XP的超級終端或者其他的串口調試工具。
用putty來監視串口,串口參數設爲波特率115200、數據位8、停止位1、校驗無。
準備好以後,可以接通電源,從SD卡啓動過程可以分爲:
- 上電後,片上ROM程序執行,初始化後判斷從SD卡啓動。
- 從SD卡拷貝FSBL到片上RAM執行,FSBL配置FPGA,藍色LED(LD12)變亮說明配置完成。
- 從SD讀取SSBL,開始Uboot過程(啓動Linux),啓動過程中VGA輸出了一個Demo演示圖像。
- 串口監視程序會顯示Linux啓動過程(需要上電前打開putty窗口),啓動完成後,板上OLED會顯示一個Digilent demo圖像。
Putty監視窗口如下,可以看到Linux系統已經啓動了文件系統、telent終端、HTTP、FTP、SSH服務以及開始了OLED顯示,而且Zedboard的網口IP固定爲了192.168.1.10。
Linux系統啓動後,現在可以上面做一些演示的實驗以體驗下Zynq芯片的應用。
1)控制GPIO
在/usr/bin目錄下有一些腳本文件用來控制或讀取一些外設的狀態。
腳本read_sw用來讀取板上8個開關的狀態,在命令行輸入read_sw會顯示輸出開關的狀態值(16位進制和10進制)。
腳本write_led用來控制板載8個用戶LED燈(LD0~LD7)的顯示,輸入write_led 後面加一個數值(可以是16位進制或者10位進制數,最大255),例如write_led 0xFF與write_led 255效果一樣,都是點亮8個LED。
2)OLED
系統啓動時在OLED有一個默認的Digilent公司logo顯示,可以通過腳本unload_oled和load_oled掛載和關閉OLED顯示。
VGA顯示一個默認的條紋碼圖像
HDMI輸出也顯示一個默認的小企鵝畫面
3)網口
Linux系統啓動是初始化了Zedboard上的網口,設定固定IP192.168.1.10。演示系統的網絡參數不能修改,因此並不能真正連到互聯網遠程訪問。輸入ifconfig查看Zedboard此時網絡設置:
可以通過網線連接一臺主機,然後修改主機的網絡設置:
設置好了,在主機瀏覽器輸入192.168.1.10,可以看到一個Http頁面:
前面我們看到Linux啓動了ssh服務,這裏也可以通過ssh訪問Zedboard,打開putty:
確定後進入登陸窗口,用戶root,密碼root,這樣我們就能夠訪問Zedboard上的Linux了。
現在和串口訪問模式一樣,也可以輸入腳本控制Zedboard上的外設了。
在Linux下還有一些實驗,可以參考Zedboard的入門手冊。
小結
瞭解了Zynq芯片的配置啓動過程,演示了從Quad-SPI FLASH啓動和通過SD卡啓動Zedboard過程,完成了在Linux下的一些演示實驗。後續會介紹通過JTAG啓動Zedboard以及用ISE開發程序流程。
Zedboard上板載有一個USB轉UART串口,採用了Cypress公司的USB-UART控制器CY7C64225。CY7C64225提供了一個非常簡潔的USB串口方案,片內集成了USB2.0全速控制器、UART收發器、晶振以及EEPROM等各種功能,而只採用了28腳的SSOP封裝。
Zedboard的USB驅動安裝很簡單,首先下載USB驅動程序,解壓縮後會有3個子目錄分別對應Windows XP、Windows Vista和Windows 7系統,根據自己的計算機系統選擇。
Zedboard上的J14 USB口(有UART標識)作爲USB-UART接口,連接Micro USB到計算機。
接通電源,系統會識別USB設備,這裏我們需要安裝兩次驅動。首先識別設備Cypress-USB2UART-0123456,
安裝驅動之後會產生一個USB設備Cypress Virtual Comm Port00,這裏繼續選擇剛纔的驅動程序位置
安裝完成之後打開設備管理器可以看到USB串口端號。