查看: 15457|回复: 3

一步一步学ZedBoard & Zynq(三):使用自带外设IP让ARM PS访问FPGA

[复制链接]
  • TA的每日心情
    奋斗
    2020-9-28 10:10
  • 签到天数: 1018 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2013-1-5 09:06:24 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 xinxincaijq 于 2013-1-9 10:27 编辑

    一步一步学ZedBoard & Zynq(三):使用自带外设IP让ARM PS访问FPGA

    转自博客:@超群天晴 http://www.cnblogs.com/surpassal/
    找工作已经告一段落,今天捡起之前丢下的东西,接着做ZedBoard。


    这一节的目的是使用XPS为ARM PS 处理系统 添加额外的IP。从IP Catalog 标签添加GPIO,并与ZedBoard板子上的8个LED灯相连。当系统建立完后,产生bitstream,并对外设进行测试。


    更多更新请关注我的博客:@超群天晴 http://www.cnblogs.com/surpassal/

    硬件平台:Digilent ZedBoard

    开发环境:Windows XP 32 bit

    软件: XPS 14.2 +SDK 14.2

    一、硬件配置

    1、创建硬件工程

    启动XPS,创建Lab3工程。因为PS系统和FPGA连接是采用AXI接口,因而选择内部互联类型(Interconnect Type) 为AXI。

    2012100809010335.jpg
    选择设计平台为Zynq ZC702
    2012100809113154.jpg
    到外设配置界面,系统会默认有GPIO_SW 和 LEDs_4bits 这两个外设,我们不需要,remove之
    2012100809122156.jpg
    2、添加AXI GPIO外设

    工程建立后,在IP Catalog中,找到General Purpose IO,找到 AXI GPIO,双击添加到系统中。
    2012100809122891.jpg

    修改元件实例化名称为axi_LDs,这个名称就是将要实例化连接到PS的元件。将长度改为8,其他默认。
    2012100809124026.jpg
    点开Bus Interfaces标签,可以看到系统汇总现在有PS(这里是processing_systems7_0) 、添加的外设axi_LDs 和AXI内部互联总线axi_interconnet_1。可以看到对于 axi_interconnet_1来说,PS是AXI主设备,外设是AXI从设备。
    2012100809125938.jpg
    在Port标签,将IO_IF中的GPIO_IO_O(output)设置为External Ports,将Port名称改为LD。LD就是顶层对外的引脚名称
    2012100809132098.jpg
    3、设定引脚约束

    在project标签中,找到system.ucf约束文件,

    2012100809132650.jpg
    将其内容改为
    1. NET LD[0] LOC = T22  | IOSTANDARD=LVCMOS33;  # "LD0"
    2. NET LD[1] LOC = T21  | IOSTANDARD=LVCMOS33;  # "LD1"
    3. NET LD[2] LOC = U22  | IOSTANDARD=LVCMOS33;  # "LD2"
    4. NET LD[3] LOC = U21  | IOSTANDARD=LVCMOS33;  # "LD3"
    5. NET LD[4] LOC = V22  | IOSTANDARD=LVCMOS33;  # "LD4"
    6. NET LD[5] LOC = W22  | IOSTANDARD=LVCMOS33;  # "LD5"
    7. NET LD[6] LOC = U19  | IOSTANDARD=LVCMOS33;  # "LD6"
    8. NET LD[7] LOC = U14  | IOSTANDARD=LVCMOS33;  # "LD7"
    复制代码
    4、点击Generate BitStream,生成bitstream
    2012100809443996.jpg
    如果没有错题,控制台会提示信息如下,表明成功生成了FPGA的配置bitstream文件
    1.   "*********************************************"
    2.   "Running Bitgen.."
    3.   "*********************************************"
    4.   cd implementation & bitgen -w -f bitgen.ut system & cd ..
    5.   Release 14.2 - Bitgen P.28xd (nt)
    6.   Copyright (c) 1995-2012 Xilinx, Inc.  All rights reserved.
    7.   PMSPEC -- Overriding Xilinx file <C:/Xilinx/14.2/ISE_DS/EDK/zynq/data/zynq.acd>
    8.   with local file <C:/Xilinx/14.2/ISE_DS/ISE/zynq/data/zynq.acd>
    9.   Loading device for application Rf_Device from file '7z020.nph' in environment
    10. C:\Xilinx\14.2\ISE_DS\ISE\;C:\Xilinx\14.2\ISE_DS\EDK.
    11.     "system" is an NCD, version 3.2, device xc7z020, package clg484, speed -1
    12. Opened constraints file system.pcf.

    13. Mon Oct 08 09:13:57 2012

    14. Running DRC.
    15. DRC detected 0 errors and 0 warnings.
    16. Creating bit map...
    17. Saving bit stream in "system.bit".
    18. Bitstream generation is complete.
    19. Done!
    复制代码
    5、将硬件配置导入到SDK,启动SDK。这里需要将bitstream和BMM文件同时包括到SDK中。
    2012100809462278.jpg
    二、创建软件程序

    为了方便项目管理,在SDK目录下建立sw文件夹,作为workspace

    2012100809471272.jpg
    使用新建工程向导。注意,这里使用工程模板为Memory Tests。个人经验是使用Hello World会出现XMD错误,原因不明白,可能是工程的配置不同。
    2012100809503052.jpg
    新建工程后,会有几个存储空间测试的文件,我们不需要,删掉。
    2012100809561114.jpg
    修改main文件,内容如下
    1. //@超群天晴 http://www.cnblogs.com/surpassal/
    2. #include <stdio.h>
    3. #include "xparameters.h"
    4. #include "xil_types.h"
    5. #include "xstatus.h"
    6. #include "xil_testmem.h"
    7. #include "xgpio.h"
    8. #include "platform.h"

    9. void print(char *ptr);

    10. int main()
    11. {
    12.      static XGpio LED_Ptr;//定义GPIO指针
    13.      int XStatus;//函数返回状态

    14.      init_platform();

    15.      print("ZedBoard LAB3: PS_AXI_LDs\n\r");
    16.      print("超群天晴 2012年10月7日22:12:31\n\r");

    17.      XStatus = XGpio_Initialize(&LED_Ptr,XPAR_AXI_LDS_DEVICE_ID);
    18.      if(XST_SUCCESS != XStatus)
    19.          print("GPIO INIT FAILED\n\r");

    20.      XGpio_SetDataDirection(&LED_Ptr, 1,0x00);//通道1;设置方向 0 输出 1输入

    21.      XGpio_DiscreteWrite(&LED_Ptr, 1,0xaa);

    22.      cleanup_platform();

    23. }
    复制代码
    在下载软件程序前,需要将bitstream文件烧如FPGA,对FPGA进行配置。在工具栏中Xilinx tools->Program FPGA,也可以使用XPS中的Device Configuration->Download Bitstream等其他配置FPGA的方式。
    2012100809574134.jpg
    配置完FPGA后,下载软件程序,可以看到超级终端显示调试信息:
    2012100809595494.jpg
    同时,Zedboard上的8个LED亮起
    2012100810004036.jpg
    注意:

    如果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模板,然后再加以修改

    ================================================================

    完整工程下载: Lab3.rar (4.18 MB, 下载次数: 238)
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2015-8-7 21:35
  • 签到天数: 340 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2013-1-5 09:28:42 | 显示全部楼层
    沙发………………
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2014-7-16 09:10
  • 签到天数: 361 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2013-1-5 09:43:09 | 显示全部楼层
    板凳喽......
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2013-9-5 12:08
  • 签到天数: 57 天

    连续签到: 1 天

    [LV.5]常住居民I

    发表于 2013-1-14 23:13:52 | 显示全部楼层
    学习学习。。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-4-29 03:47 , Processed in 0.139582 second(s), 22 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.