还剩7页未读,继续阅读
文本内容:
使用Xilinx Vivado设计套件创建一个简单的HelloWorld项目什么是是GAXilinx以制造可编程门阵列FPGA而闻名,它是基于一个通过可编程接点连接的可配置逻辑块CLBs矩阵根据Control EngineeringEurope中的“FPGA的优点Advantages ofFPGA”这篇文章,多种控制回路能够以不同但是十分快的速度在FPGA设备上运行FPGA也可以在制造后再编程以达到别种应用或是功能需求,这使它在专业工程师中非常流行许多工程师都把这种技术应用到机械学习,无线通信,嵌入式视觉和云计算应用中什么是ZYNQXilinx Zynq®-7000全可编程系统芯片AP SoC系列包含了基于嵌入式处理器的软件可编程性和FPGA的硬件可编程性这个技术使得我们在单一设备上集成DSP,ASSP和混合信号功能时进行关键分析和硬件加速安装SDK和板支持文件Vivado,在创建数字或系统设计前你首先需要安装Xilinx Vivad设计套件Xilinx VivadoWebpack这个版本是免费的,通过Digilent Wiki上提供的使用指导也可以帮助你快读安装和运行Vivado在下载Vivado时,确保你使用设计工具Design Tools栏目中的“软件开发套件Software DevelopmentKit”来安装SDK为了防止你忘了这个步骤,你也可以返回安装软件来安装“软件开发套件Software DevelopmentKit”内容一旦你下载并安装了Vivado,你需要把ZYB0板文件放入本地Xilinx Vivado文件夹,它定义了ZYB0板上的不同界面和协议之后你就可以成功建立IP和SDK了Diligent提供了一个教程:.digilentinc.com/reference/software/vivado/board-files o..o注意在Vivado board文件安装指导中,你需要把头文件board_files放入你的本地文件夹然后,我会推茬你复制独立的board文件例如,一旦你下载了vivdado board文件,找到vivado-boards-master ewoard_files并复制“zybo文件夹”否则你可能会在设计中碰到一些不必要的错误创建项目我将会使用Digilent ZYBO并根据他们的开始指南getting startedguide来创建一个简单的HelloWorld项目项目概要在这个项目中你将会学到如何用四个板上的开关来控制板上的LEDo当你按下四个不同的按钮后,你可以看到来自电脑端的多种信息设计流程打开Vivada并选择Zybo板创建一个新的Vivado项目在新的项目中创建一个空的板块设计工作区使用IP集成工具添加需要的IP模块并创建硬件设计验证并保存板块设计创建HDL系统封装运行设计综合与实现生成Bit文件导出包含了bit源文件的硬件设计到SDK工具开启SDK硬件设计概要你可以根据开始指南getting startedguide中的步骤2-6来创建硬件设计,以下是一些说明自动运行模块Run BlockAutomation对话框可以让你提供微处理器系统需要的一些基础特性输入
3.4双击新的axi_gpio_0内核可以弹出自定义窗口在IP设置页检查启动双通道,并点击0K”,你可以创建两种输入-SW和BTN每一个axi_gpio内核都支持32位单双GPI0通道在这个项目中,每个通道我们只需要向位你可以在AXI GPIOGuide中找到详细信息“
3.5重复步骤
3.3可以添加另一个GPI0内核,但是不要启动双通道”,你将会创建一个输出-LED自动运行连接可以帮助你hook界面和外部I/O接旦默认,UART界面中的一种已经被放置在ZYNQ IP中了请参考:.dev-flow.com/en/8-first-use-of-the-zynq-7000-processor-system-on-a-zynq/oRe-customize IPZYNQ7Processing System
5.5呦Documentation,Presets1P Locabon
⑥Import XPSSettingsPage Navigator«MIO Configuration软件设计概要Zynq BlockDesignBank0I/O VoltageLVCMOS
3.3V Bank1你可以根据开始指南getting startedguide中的步骤7T0来PS-PL Configuration创建软件设计,以下是一些说明Penpheral I/O Pins当Peripheral你打开“src”文件夹中的MIO ConfigurationMemory Interfaces□I/O“helloworld,c文件后参考开始指Peripherals南getting startedClockConfigurationguide i囹0ENETO中的步骤
9.4,MIO
16..27你可以通DDR Configuration过以下步骤在用户界面看到一些|@□ENET1预设功能和库的详细内容MIO
28..39SMC TimingCalculatxx!00US80:f□USB1±0SDOInterruptsMIO40••45!®□SD1|由□UARTO|由0UART1MIO
48..491-□I2C0i□I2C1曲□I SPI0®□SPI1♦□CANO・|@□CAN1S GPIO标记功能/库Lo system.hdf lnl\system.mss|x*helloworld.c区1/6/14:Created byMarshallW****************************************************/*include librariesfrom Xilinx*/#include stdio.h#include platform.h#include xgpio.h°xparam#include eters•h#include-sleep.hwint mainXGpio inputs output;/*Declare t\^o structure inputoutpL/***The XGpiodriver instancedata•The useris requiredt1*variable ofthis typefor everyGPIO devicein thesys*to avariable ofthis typeis thenpassed to the drivei*/typedef struct{u32BaseAddress;/*Device baseaddress*/*32IsReady;/*Device isinitialized andread;int InterruptPresent;/*Are interruptssupported iiint IsDual;/*Are2channels supportedin h/w*/}XGpio;init_platform;亭57Problems
⑥Tasks目Console1Properties TerminalTCF Debug VirtualTerminal-ARM Cortex-A9MPCore#1右击预设功能/库并打开新选项看到声明rc/neuowona.c-AiunxzSearch ProjectX UndoTyping Ctrl+ZRevert File[
③,▼夕闻ffiSave Ctrl+SLgj田system.hdfOpen DeclarationF31/6/14:GreatOpen Type Hierarchy OpenF4*************Call HierarchyQuick CtrkAltH/*include libOutlineCtrkO#include stdQuickTypeHierarchyCtrM#include°pl#include aExplore MacroExpansion Ctrl*##include xgpToggleSource/Header CtrkTab#include MxpaMsleOpenWith-int mainShowIn Alt+Shift+W XGpioinpuoutput.XGpio is*/|tonCut Ctrl*Xint button value*/Itch value*/int switchCopy Ctrl+Cpio_Initialize*/Paste CtrkVIQuickFix Ctrl+1XGpio-Init;Source Att+Shifts SXGpio2InitRefactor*£**XGpio-SetD petfirst channelXGpio2SetD Declarations上ket secondchannelReferences trisXGpio-SetDSearch Textfirstchannel5yotuMake TargetsResourceConfigurations原庭^曰▼「Problems Taskj▼o□TCFDebugVirtual TerrrProfile AsDebugAsRun AsProfilingToolsClean SelectedFiles以下是代码和注释//si*✓TsXTSXTVXT%✓TVZIX✓TS✓TS si*XTXXTX✓TSXTSXTVXT%ZJX✓TS✓TS XTXXTX^TS✓TS✓TXXTXTXZTSTSTS slzXTSxjxGetting StartedGuide forZyboThis demodisplays thestatus ofthe switcheson theLEDsand printsa messagetotheserial communicationwhena button is pressed.Terminal Settings-Baud115200-Data bits8-Parityno-Stop bits11/6/14Created byMarshal1WZT%^TSXTSZTSZTS#TS^7%^TS^TS^TSX7X^TST%^TS#TS^TX^TSZTS#TS#T%^TS^TS slzxlzx^l Tz%x^l TzSxlzsi^*TSXTS^TST%^TS#TS^TX XTHT%✓TSZTSXJX///*include librariesfrom Xilinx*/#include#include“platform,h”WincludeWinclude^xparameters.h^include“sleep.hint mainXGpioinput,output;/*Declare twostructureinputoutput.XGpio is*/int buttondata=0;/DeclareDefine initialbuttonvalue*/int switch_data=0;/*DeclareDefine initialswitch value*//*Initialize theXGpio instanceprovided bythe callerbased onthegiven DevicelD.*/XGpio_Initialize input,XPAR_AXI_GPI0_0_DEVICE_ID;/*We defineAXI_GPI0_0as inputs-BTNSW*/XGpio_Initialize output,XPAR_AXI_GPIO_1_DEVICE_ID;/*We defineAXIGPIO1as inputs-LED*/XGpio SetDataDirection input,1,OxF;Aset firstchannel ofinputtristate bufferto input*/XGpio_SetDataDirectioninput,2,OxF;Aset secondchannel ofinputtristate bufferto input*/XGpio_SetDataDirection feoutput,1,0x0;/*set onlychannel ofoutputtristate bufferto output*/init_platform;/*Initialize theplatform hardwareresources*//Indefinite loop-running forever*/while1{switchdata=XGpioDiscreteRead input,2;/*Read theswitch SWvalue*/XGpio DiscreteWriteoutput,1,switchdata;AWrite theswitch SWvalueto LEDLD*/buttondata二XGpioDiscreteRead input,1;/*Read thebutton BTNvalue*//*Set upif-else-if statementto printmessage in the*UART terminal.This dependson whetherone or*more buttonsare pressedifbutton_data==0x0{}/*If nobuttonis pressed,do nothing*//*If buttonvalue isbinary0001decimal1,button0BTN0is pressed.Use pre-defined functionXil-printf*to printthe messagein theterminalelse ifbutton data二二0x1xilprintfbutton0pressed;/*If buttonvalue isubinary0010decimal2,button1BTN1ispressed.Use pre-defined functionXil-printf*to printthe messagein theterminal*/else ifbuttondata==0x2xil_printfbutton1pressed;/*If buttonvalue isubinary0100decimal4”,button2BTN2is pressed.Use pre-defined functionXil-printf*to printthe messagein theterminal*/else ifbuttondata==0x4xilprintfbutton2pressed;/*If buttonvalue isabinary1000decimal8,button3BTN3ispressed.Use pre-defined functionXil-printf*to printthe messageintheterminal*/else ifbuttondata二二0x8xil_printfbutton3pressed;elsexil_printfmultiple buttonspressed;/*A11other values,printumultiple buttonspressed*/usleep200000;/Delay200000us*/c1eanup_p1atform;/*Clean upall caches*/return0;运行项目你可以根据步骤11来运行项目在你对FPGA进行编程并成功创建应用后,你可以看到以下
1.试着按下四个开关,并且各自相对应的LED会亮起
2.在串口端,按下每一个按钮,会弹出“按钮已被按下”的信息。