這一節的目的是使用XPS為ARM PS?處理系統?添加額外的IP。從IP Catalog 標簽添加GPIO,并與ZedBoard板子上的8個LED燈相連。當系統建立完后,產生bitstream,并對外設進行測試。
硬件平臺:Digilent ZedBoard
開發環境:Windows XP 32 bit
軟件:?XPS 14.2 +SDK 14.2
一、硬件配置
1、創建硬件工程
啟動XPS,創建Lab3工程。因為PS系統和FPGA連接是采用AXI接口,因而選擇內部互聯類型(Interconnect Type) 為AXI。
選擇設計平臺為Zynq ZC702
到外設配置界面,系統會默認有GPIO_SW 和 LEDs_4bits 這兩個外設,我們不需要,remove之
2、添加AXI GPIO外設
工程建立后,在IP Catalog中,找到General Purpose IO,找到 AXI GPIO,雙擊添加到系統中。
修改元件實例化名稱為axi_LDs,這個名稱就是將要實例化連接到PS的元件。將長度改為8,其他默認。
?
點開Bus Interfaces標簽,可以看到系統匯總現在有PS(這里是processing_systems7_0) 、添加的外設axi_LDs 和AXI內部互聯總線axi_interconnet_1。可以看到對于?axi_interconnet_1來說,PS是AXI主設備,外設是AXI從設備。
在Port標簽,將IO_IF中的GPIO_IO_O(output)設置為External Ports,將Port名稱改為LD。LD就是頂層對外的引腳名稱
3、設定引腳約束
在project標簽中,找到system.ucf約束文件,
將其內容改為
NET LD[0] LOC = T22 | IOSTANDARD=LVCMOS33; # "LD0"
NET LD[1] LOC = T21 | IOSTANDARD=LVCMOS33; # "LD1"
NET LD[2] LOC = U22 | IOSTANDARD=LVCMOS33; # "LD2"
NET LD[3] LOC = U21 | IOSTANDARD=LVCMOS33; # "LD3"
NET LD[4] LOC = V22 | IOSTANDARD=LVCMOS33; # "LD4"
NET LD[5] LOC = W22 | IOSTANDARD=LVCMOS33; # "LD5"
NET LD[6] LOC = U19 | IOSTANDARD=LVCMOS33; # "LD6"
NET LD[7] LOC = U14 | IOSTANDARD=LVCMOS33; # "LD7"
4、點擊Generate BitStream,生成bitstream
如果沒有錯題,控制臺會提示信息如下,表明成功生成了FPGA的配置bitstream文件
"*********************************************"
"Running Bitgen.."
"*********************************************"
cd implementation & bitgen -w -f bitgen.ut system & cd ..
Release 14.2 - Bitgen P.28xd (nt)
Copyright (c) 1995-2012 Xilinx, Inc. All rights reserved.
PMSPEC -- Overriding Xilinx file
with local file
Loading device for application Rf_Device from file '7z020.nph' in environment
C:Xilinx14.2ISE_DSISE;C:Xilinx14.2ISE_DSEDK.
"system" is an NCD, version 3.2, device xc7z020, package clg484, speed -1
Opened constraints file system.pcf.
Mon Oct 08 09:13:57 2012
Running DRC.
DRC detected 0 errors and 0 warnings.
Creating bit map...
Saving bit stream in "system.bit".
Bitstream generation is complete.
Done!
5、將硬件配置導入到SDK,啟動SDK。這里需要將bitstream和BMM文件同時包括到SDK中。
?
?
二、創建軟件程序
為了方便項目管理,在SDK目錄下建立sw文件夾,作為workspace
?使用新建工程向導。注意,這里使用工程模板為Memory Tests。個人經驗是使用Hello World會出現XMD錯誤,原因不明白,可能是工程的配置不同。
新建工程后,會有幾個存儲空間測試的文件,我們不需要,刪掉。
?
修改main文件,內容如下
#include
#include "xparameters.h"
#include "xil_types.h"
#include "xstatus.h"
#include "xil_testmem.h"
#include "xgpio.h"
#include "platform.h"
void print(char *ptr);
int main()
{
static XGpio LED_Ptr;//定義GPIO指針
int XStatus;//函數返回狀態
init_platform();
print("ZedBoard LAB3: PS_AXI_LDs
");
print("超群天晴 2012年10月7日22:12:31
");
XStatus = XGpio_Initialize(&LED_Ptr,XPAR_AXI_LDS_DEVICE_ID);
if(XST_SUCCESS != XStatus)
print("GPIO INIT FAILED
");
XGpio_SetDataDirection(&LED_Ptr, 1,0x00);//通道1;設置方向 0 輸出 1輸入
XGpio_DiscreteWrite(&LED_Ptr, 1,0xaa);
cleanup_platform();
}
在下載軟件程序前,需要將bitstream文件燒如FPGA,對FPGA進行配置。在工具欄中Xilinx tools->Program FPGA,也可以使用XPS中的Device Configuration->Download Bitstream等其他配置FPGA的方式。
配置完FPGA后,下載軟件程序,可以看到超級終端顯示調試信息:
同時,Zedboard上的8個LED亮起
注意:
如果run或者debug軟件程序提示
ERROR : Unexpected error while launching program. java.lang.RuntimeException: ?ERROR: Elf Verify failed at Address:?? ? 0x0060d77b
at com.xilinx.sdk.targetmanager.internal.TM.verifyELF(Unknown Source)
at com.xilinx.sdk.debug.core.internal.AppRunner.run(Unknown Source)
則很有可能是因為工程建立的問題,建議使用Memory Tests模板,然后再加以修改
評論
查看更多