操作环境:Windows7_64bit旗舰版,Vivado2014.4
参考资料:ZedBoard_HW_UG_v1_1,
自制ZYNQ核心板原理图,
Zynq-700 EPP CTT
ZYNQ 7000系列是一Cortex A9双核心ARM部分即PS部分+FPGA部分即PL部分,PL和PS部分都是可以自由配置的。
由于项目需要,公司自制了ZYNQ核心板,由于从Altera转过来,此前没有ISE的基础,因此上手还是有一定的难度。在开发过程中出过一些低级错误。呵呵一下。。。。。。
这次学习主要还是按照网上大神们推荐的方法,利用Vivado创建一个嵌入式软件,并使用串口输出程序人员都使用的“Hello World”输出。
第一步:打开Vivado 2014.4
这个不用多说的,都会滴。
点击Create New Project;出现对话框,直接点击Next
工程名字随个人喜好,这里我就没有更改,使用了默认的Project_1;点击Next;
这一步需要选择第一个选项,RTL Project,选择好后点击Next;
由于我使用的芯片是XC7Z010,因此这里我选择Parts ,然后选择XC7Z010clg400,然后点击Next;
直接点击Finish,好了,工程建立完成,开始进行设计。界面如下:
首先,需要新建一个Block Design 模块,点击“Create Block Design”,这里我使用的都是默认名称,可以根据需要自行更改。
点击OK,然后选择“Open Block Design” ,进行系统设计配置。
刚打开的Block是空的,需要自己进行添加;
选择使用Diagram窗口中的“Add IP”或者使用右键菜单Add IP,弹出IP选择对话框,在对话框中输入ZYNQ,选择第一个“ZYNQ Processing System”;双击选择,并自动打开;
这时可见已经把ZYNQ Processing添加进来了。
点击RUN Block Automation,直接点击OK,自动添加端口。
双击Processing System7_0,进行IP配置。打开后发现里面是空的,没有进行其他配置;
点击左边的PS-PL Configuration->General->UART0 Baud Rate,设置为115200;
PS-PL Configuration->General->Enable Clock Resets->FCLK_RESET0_N,取消选择;
PS-PL Configuration->GP Master AXI Interface->M AXI GP0 Interface,取消选择;
MIO->Configuration->I/O Peripherals选择SD 0和UART0 ,配置管脚如图;
此处需要根据板子选择Bank0 和Bank1的I/O端口电压;
Clock Configuration->PL Fabric Clocks->FCLK_CLK0取消选择;
DDR Configuration->Enable DDR 取消选择;
点击OK按钮,返回Vivado界面,此时系统自动更新,发现DDR管脚是多余的,直接删除,不用管它;
然后在Source界面,右键点击Design_1,在出现的菜单中点击“Create HDL Wrapper”弹出菜单;
直接点击OK,
然后再次右键点击design_1,选择Generate Output Products,点击Generate,产生SDK需要的文件。
在这里我犯了一个错误,就是按照上面的步骤进行设计完成后,直接点击Export->Export Hardware,结果在Launch SDK 时出错。因此需要注意,最好是生成bitstream后在进行Export Hardware操作。
等待系统输出完成后,点击File->Export->Export Hardware,然后点击Launch SDK 。打开SDK进行系统编程;如图,默认打开SDK的样子,系统已经自动把Vivado中产生的文件加入进来。
其实我们主要也就是使用PS7_init.c和ps7_init.h,其实我也不是很明白,就是按照这样一步一步来进行设计的。有时间再研究一下。
选择file->new->New Application Project,Project名称写上Helloworld,点击Next,选择Hello World模板。
点击Finish;
看,系统已经自动把Hello World加载进去了。
打开Helloworld->src->helloworld.c,看到系统已经自动添加了一个print("Hello World\n\r");是不是和C语言入门中一样呀。
在Helloworld工程上点击右键,选择“Clean Project”或者点击Project->Clean,进行程序编译。
编译完成后,右键Helloworld 或者Tools中Debug Configurations,
在Xilinx C/C++ application(GDB)上右键,选择New。
如图所示。
Target Setup ,Application ,Source,Debugger Options,Common,我都是使用的默认项,其中STDIO Connection如果使用Debug下的Terminal进行观察,则需要选中并进行配置,否则如果使用电路板上串口输出,使用串口助手进行接收查看,则不需要。
然后点击Debug按键,进行程序下载运行。等待下载完成,点击Resume进行程序运行,这时就可以在串口助手中看到Hello World输出。
我在这里运行了很长一段时间,就是没有看到串口助手输出信息,后来经过仔细摸索和查看资料,发现有一处需要进行配置。因为Zedboard使用的是UART1,所以不需要配置。我使用的是UART0,与默认不相配,导致我很久都没有调试通过。
打开system.mss文件,打开Modify This BSP’s Settings 界面,选择Overview->standalone,然后在右面更改stdin和stdout为ps7_uart0如图:
点击OK,然后再次Debug->Resume
哈哈,Hello World终于出来了!