- 環境搭建
Zynq-7000的結構分為PS(ARM)和PL(FPGA),當然也可以理解為PL作為一種外設掛載在PS端,在正常的系統加載順序(FALSH \ SD -> FSBL -> PL ->BITSTRAM ->PS ELF)完成后重新配置PL程式,可以利用XLINX官方BSP邏輯xdecfg_polled_example的Demo例程實作PS配置PL位元流,將指定DDR空間的資料配置到FPGA,具體的平臺啟動方式如圖1-1,

1.1 Vivado工程創建
選擇create project 創建工程名稱,選擇存盤位置


選擇RTL project,勾選下方選項會省略添加源檔案和約束檔案步驟,之后直接進行芯片的選型,對照芯片絲印或者電路圖選擇合適的芯片型號即可,(在選型時可先選封裝型別)工程創建完成,


點擊Create Block Design 并設定Design name,在Digram點擊“+”,輸入Zynq添加Zynq7,


之后可以雙擊Zynq7 根據專案進行相應的配置,注意DDR的型號以及時鐘頻率的對應即可,配置完成后按F6 Validata Design,有錯誤需要仔細檢查配置問題,
生成頂層HDL模塊,
之后在hierarchy界面右擊sysstem.bd,然后生成“Create HDL Wrapper”,并確認勾選
“ Let Vivado manage wrapper and auto-update”,完成后會有品字型標志,


下面的步驟以PL的重配置為例,
本平臺的核心選擇為XC7Z045,配置掛載在PS上位UART1以及掛載在PL的UATR0,在配置完成后點擊Flow Navigator串列將決議的網表進行分析和約束,在I\O ports界面根據電路原理圖配置相應的管腳,完成配置后點擊Generate Bitstream,
為驗證可重配置結果的正確性,除了利用掛載在PL的串口完成列印作為一種PL的配置方式之外還要選擇另一種配置方式作為重配置,這里選擇掛載在PL埠的LED燈,
生成LED工程步驟如下:
? 按照上述工程創建步驟至完成工程的創建、
? 直接點擊Source欄的“+”,如下圖:

? 彈出的界面為添加或者創建檔案,由于并沒有提前撰寫的代碼,我們選擇create file創建一個新的設計檔案,
? 成功創建檔案后會彈出定義模塊界面,用于設定源檔案的模塊名稱和埠串列,如果是手動輸入代碼,這里并不需要設定,直接OK即可,之后彈出界面直接YES即可,
? 雙擊Design Sources欄內剛創建的 .v 檔案,根據需要撰寫代碼,
? Vivado會對代碼進行語法檢查,且大多數情況下IDE會自動識別設計的定成模塊,也可通過Source 欄的右擊選單選擇Set as Top手動定義頂級模塊,
? 分析與綜合 完成代碼撰寫后,點擊 Flow Navigator視窗的 Open Elaborated Design進行檢查,根據error和warning對代碼進行相應的更改,這部分完成后視窗會新增Schematic(原理圖)、Netlist(網表)等視窗,
? 之后可以進行I\O引腳的分配,但是一般選擇先對設計進行綜合,綜合之后再統一輸入時序約束和IO引腳的物理約束,
關閉分析后的界面,點擊Flow Navigator視窗中的Run Synthesis對代碼進行綜合,在彈出的視窗中直接點擊OK

約束輸入,創建約束檔案,點擊Source欄中的“+”,如下圖

成功創建 .xdc 檔案后按照設計要求和電路圖進行管腳和時鐘約束,例:

注:
時鐘周期約束 create_clock –name clk –period 20 [get_ports sys_clk]
創建一個名為clk 時鐘周期為20ms,時鐘源是sys_clk的埠,一般只對輸入的
時鐘作周期的約束,周期值設定不應太小,相對簡單的設計可以不對工程做時序
約束,并不影響功能,但是復雜設計和輸入時鐘頻率較高時不進行約束可能會產
生未知情況,
? 約束輸入完畢后進行實作設計,點擊Flow Navigator 視窗的Run Implementation根據提示完成設計,實作完成后直接Cancel提示視窗,
? 生成BitStrream

? 生成Bitstream后點擊file -> Export -> Export Handware注意在Export Handware 界面勾選 Include Bitstream,
啟動SDK,進入軟體設計,點擊file –> launch SDK,
1.2 SDK環境使用
本節將同樣以PL重配置的設計進行決議,
SDK打開后會自動顯示system.hdf的內容,此標簽頁會顯示整個PS系統的地址映射資訊,在啟動SDK之前,我們將硬體以一個ZIP壓縮檔案的形式匯出到軟體作業空間,在打開SDK時會自動解壓,得到system_wrapper_hw_platform_0檔案夾,這個檔案夾在每次硬體更新后會在軟體環境更新,我們需要盡量保證只有一個,可以在軟體環境中洗掉或直接在資源管理器中洗掉多余的,此檔案夾前4個檔案包含Zynq SoC處理系統的初始化代碼,以及DDR、時鐘、PLL、MIO的初始化設定資訊,在初始化程序中,SDK使用這些資訊去配置相應的模塊,使得應用程式能夠在PS上運行,

創建SDK工程
? 選單欄 File -> New -> Application Project,創建一個SDK應用工程,
? 按照提示設定工程名,注意不要直接finish,點擊Next
? 在彈出界面選擇 空工程, Empty Application
? 創建后SDK會創建一個name應用工程以及name_bsp的板級支持包(BSP)工程,且會自動編譯生成name.elf檔案
? 最后在name工程下的src檔案夾添加相應的源檔案和頭檔案進行下載驗證即可,
- PS重配置PL的實作
所謂重配置,即在當前硬體位元運行期間,有一份新的位元通過網路、串口等等其他方式傳輸到平臺,平臺將其存盤在Falsh、DDR等外部存盤介質中,隨后將硬體在不斷電的情況下配置成新的位元流,
對bitstream可以大致分為以下幾種情況:
? 除錯階段,來自環境 (JTAG)
Vivado下載:Program and debug –> Open Hardware Manager -> open target -> auto connect -> program device 在彈出界面選擇bit檔案下載即可
SDK環境可在run configuration界面選擇需要的配置
? 固定啟動,來自外部存盤設備,將位元流固化到存盤介質,并選擇相應的啟動方式,
? 動態配置,即上述所說的不斷電更新,資料來源一般是下圖中的DRAM,

上圖的Secure安全啟動是指位元流會經過AES等安全模塊的校驗,再配置到硬體,
在搭建好硬體及軟體環境后,要實作PS重配置PL我們需要2個條件,其一是兩份不同表現的PL實作的Bin檔案,其二是軟體部分DEVC 的正確配置使用,
2.1 Bin檔案的制作
要想順利進行PL的程式替換,我們首先需要準備一份用來替換的bin檔案,因為加載所需的檔案不能使 .bit 檔案,在目前的系統中對于Bin檔案的制作需要注意下列幾個問題,
首先,Bin檔案的制作方式問題,目前為止已知的Bin檔案制作方式主要有以下3種方式,
SDK環境下的Create boot Image,打開SDK環境后按照正常流程新建工程,選擇下圖的工程型別


創建完成后等待自動編譯完成,之后打開Xilinx Tools中的Create Boot Image開始創建Boot.bin,打開原工程檔案partitions 會自動列出name.elf和name.bit,需要把fsbl.elf添加進第一項,順序不能錯,點擊create image即可

? Vivado生成設定,右擊Program And Debug -> bitstream setting -> 勾選-bin_file,即可
? TCL腳本陳述句生成,生成陳述句及引數
write_cfgmem -format bin -loadbit “up 0x0 Led1_Blink.bit” -file LED.bin -size 128 -force -interface SMAPx32 -disablebitswap

對于本系統來說這種生成方式是唯一可以順利配置的方式,即只能使用TCL陳述句生成的Bin檔案,
還需注意一點的是bit檔案的大小,在此版本中默認bit檔案不壓縮,不壓縮的bit檔案無法使用,需要在tools-> settings的界面進行壓縮設定,


注:不能直接進入setting界面,需要先對專案進行編譯之后點擊Open Elaborated Design之后進入,同時網路上描述的添加壓縮約束陳述句對本系統無效,
由此我們可以順利制作兩份Bin檔案,一份UART串口列印功能,一份點亮LED功能(更好是閃爍,但是本平臺并沒有焊接晶振,為保證結果準確性并沒有采用從PS拉時鐘的方法),
2.2 DEVC配置使用
首先是對兩個工程進行功能性驗證,勾選run configuration欄中的reset entire system和 Program FPGA下載LED的Bitstream,平臺LED燈順利點亮,
進行UART驗證時,需要的表現是在SDK的串口視窗進行雙串口資訊的列印,但是根據Xil_printf() 函式的實作底層

輸出地址為UART0的默認地址,所以無法進行雙串口的資訊列印,這里采用取巧的是實作方式,實作自己的列印函式如以實作雙串口,

由此,兩個驗證性功能測驗完畢,可以進行DEVC的配置和使用,
位元流從存盤加載到PS中,之后進入PCAP是由處理器系統PS中的PCAP bridge負責,“橋”在PS的DevCfg中,此外設的使用和其他類似,根據官方Demo就可以進行配置,

PCAP(processor Configuration Access Port)處理器配置介面,“橋”的兩端連接PS AXI和PL PCAP,溝通軟體和硬體,位元流的搬運由專用DMA完成,提高速率,可以更快的部署,
Xilinx平臺有兩種位元動態重配置,即部分重配置和完整重配置,部分重配置速度快,毫秒級,實作復雜,更多實作的是完整重配置,軟體動態重配置在Linux下可以通過DevCfg驅動進行,裸板的實作可以參考官方Demo例程,
首先進行代碼的撰寫,根據官方例程可以寫出如下的程式:
初始化函式

在原始Demo里有兩個關鍵的宏定義BIT_STREAM_LOCATION 和BITSTREAM_SIZE_WORDS,需要注意的是BIT_STREAM_LOCATION要修改為適合系統的地址,默認地址不可用,BITSTREAM_SIZE_WORDS是以32bit表示大小,所以要對bin檔案長度進行計算(length/4),在寫入bin檔案時以16進制表示長度,PL的可配置函式實作如下:

只執行此函式并不能完成對PL的重配置,解決方法參考ug585如下:

不能完成重配置原因自于沒有對PL進行復位,上述5步操作描述PS對PL執行清除位元流并復位,實作代碼如下:

完成代碼撰寫后進行板級驗證:
首先將bin檔案放置到板子的DDR,選單欄Xilinx -> Dump/Restore Memory

將LED.bin檔案寫入DDR后運行程式,注意不勾選reset entire system和 Program FPGA,順利點亮LED,然后更換UART.bin檔案,


順利重新配置PL
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/131815.html
標籤:其他
下一篇:有符號數和無符號數條件判斷時的坑
