用ADI官方源码构建任意Xilinx的ZYNQ平台下的ADI芯片控制程序(1)——硬件平台搭建篇.

用ADI官方源码构建任意Xilinx的ZYNQ平台下的ADI芯片控制程序(2)——软件程序调试篇.

用ADI官方源码构建任意Xilinx的ZYNQ平台下的ADI芯片控制程序(1)——硬件平台搭建篇

  • 1、下载准备文件
  • 2、用tcl文件构建Block Design
  • 3、构建自己Xilinx平台的Block Design
    • 方法1:
    • 方法2:
      • ①构建例程
      • ②自己新建工程

全文以在Xilinx xc7z020clg400-2平台下控制AD7616为例讲解,对于其他xilinx平台、其他ADI芯片方法都是差不多的


1、下载准备文件

首先进入ADI的官网https://www.analog.com/cn/index.html,找到构建ZYNQ的Block Design文件所需要的源文件,我需要构建AD7616的工程,在官网搜索:AD7616 HDL。

点击下面的AD7616 No-OS/HDL Drivers进入网页,然后拖到网页最下面,单击进入AD7616-SDZ HDL Project.。

这个时候会跳转到Github,单击这个master,可以找到自己需要的分支,每个分支对应于不同的vivado版本,可以查看里面的文件来知道这个分支对应的vivado版本。但是不推荐使用这种方法,因为需要对Github有一定了解,而且不太直观方便的查看整体对应关系。推荐使用下面的方法。

这里推荐另一种下载HDL文件的方法,退回到刚才的AD7616 No-OS/HDL Drivers页面,在这个页面找到箭头所指的网页,单击进入。在新的页面中找到右边悬浮窗里面的Backlinks,然后单击进入到该页面。在Backlinks页面找到Releases,并进入该页面。在Releases最底部可以看到不同的源文件,找到自己的vivado工具对应的HDL文件版本,我使用的是vivado2018.3,所以我下载的是hdl_2019_r1。




2、用tcl文件构建Block Design

对于构建方法,ADI官网给了教程https://wiki.analog.com/resources/fpga/docs/build.,但是我觉得设置过于复杂,而且我没有linux的工程经验,不太能理解这种方法。所以我用了另一种比较费时但不费脑的方法。

对于刚才下载的源文件,建议不要改名,就保持下载下来的文件的名字和他们内部的相对位置,对于文件的存放位置建议放到某个盘的根目录,不要放到某个盘的好几级文件夹下,到时候可能导致路径过长。 务必重视我上面说的这些,不然到时候会出现很多奇奇怪怪的问题,如果后面熟练了可以尝试做些更改。

在后面的调试中我发现老是有一条警告,说找不到ghdl文件夹的路径,后面我干脆把我下载hdl-2019_r1文件夹名称改为了ghdl,这也是唯一我改了它文件名称的一次

再说一次本文以AD7616,vivado2018.3为例。

我直接把文件夹放到了桌面上,首先需要编译库文件,到下载的文件里面找到projects→ad7616_sdz→zc706→Makefile。打开该文件,可以看到该工程包含了这几个Lib。

打开刚才下载的文件,进入library文件夹,找到和上面lib_deps同名的文件夹,以上面文本中第一个库axi_ad7616为例,进到axi_ad7616文件夹之后找到axi_ad7616_ip.tcl文件,上面文本中后面需要编译的几个库文件,在进入对应文件夹后,要找的都是后面加了_ip.tcl的文件。

打开vivado 2018.3 tcl shell软件后输入:cd 路径,以我的工程为例:cd C:/Users/Administrator/Desktop/ghdl/library/axi_ad7616,注意这里是“/”,回车,输入source ./axi_ad7616_ip.tcl,再回车,软件就会自己编译库文件,并且生成在vivado2018.3工具下的axi_ad7616的ip核,可以到axi_ad7616_ip.tcl文件目录下查看生成的IP工程。生成完成之后的命令窗口如图。按照上面的方法对Makefile里面提到的剩下几个库文件完成编译。

按照上面将我们已知的库文件编译之后就可以试着新建BD工程了,在projects→ad7616_sdz→zc706文件夹中,打开system_project.tcl,注释的大概意思是ad7616_if如果定义为0会生成串行通信控制AD7616的工程,定义为1会生成并行通信控制AD7616的工程,大家根据实际需要自行设置。我这里需要并行的,所以把参数改为了1,默认是0。

同样是vivado 2018.3 tcl shell中输入:cd C:/Users/Administrator/Desktop/ghdl/projects/ad7616_sdz/zc706,回车,source ./system_project.tcl,回车。

这个时候从命令窗口中的信息知道并没有生成成功,在里面找CRITICAL WARNING,之后的过程中如果没成功需要找的都是CRITICAL WARNING。


从提示信息知道,大致是因为缺少ip库文件。从这段话知道缺两个库util_cdc和util_axis_fifo。这个时候先关闭vivado 2018.3 tcl shell软件,然后到projects→ad7616_sdz→zc706文件夹中,把刚才生成的工程文件全部删除。可以根据文件日期来判断哪些是刚生成的,不要把官方例程包里面原来的文件删了

之后重新打开vivado 2018.3 tcl shell软件,按照上面编译库的方法,对这上面这两个库进行编译,然后重新输入创建BD工程的那条命令cd C:/Users/Administrator/Desktop/ghdl/projects/ad7616_sdz/zc706,回车,source ./system_project.tcl,回车。

之后还会提示失败,然后按上面的方法到CRITICAL WARNING中找到漏的库,然后关软件,到projects→ad7616_sdz→zc706删除刚才生成的工程文件,再打开软件编译刚才提示漏掉的库文件。然后输入创建工程的那条命令,之后会看到软件一直运行,一段时候后就能到projects→ad7616_sdz→zc706中看到生成的工程文件了,生成完成的标志是你可以在命令窗口中输入新命令。下面是我在zc706平台下创建AD7616用到的所有命令

按照这种方法重复个两三次就能新建成功,而且只要注意我上面说的这些一般都不会出错。但是这种方法有些繁琐,不过不用去下载软件,更改电脑设置,但是如果长远来看,还是官网教程效率高一些,而且一劳永逸。

3、构建自己Xilinx平台的Block Design

按上面的方法操作完成之后可以到projects/ad7616_sdz/zc706中看到刚才生成的工程文件,用vivado打开它。从工程总结中可以知道这个例程是针对特定的板子ZC706,主控芯片是xc7z045ffg900-2,打开Block Design之后会发现有几个脚没连线,没连线的这几个脚是由上面system_project.tcl中参数的设置决定的,我选的是并行控制有四个应用于串行通信的脚没连线。


要用这个例程构建适合自己Xilinx平台的BD文件,我能想到的有两种方法。

方法1:

一是到工程总结中更改主控芯片的类型,即把xc7z045ffg900-2改为我的xc7z020clg400-2,然后再到工程里面更新IP。我用这种方法改之后报了几个警告,没有错误。然后查看了警告里面提到的IP,和原来的对比了一下,接口类型从AXI3变为了AXI4,我也不知道有什么影响就没管,更改了引脚约束和zynq的ip核参数,编译通过后导出硬件,launch SDK,在程序里面写了一个打印函数,结果一直没打印信息,反复试了几次都不行。所以不太推荐这种方法,理论来说我只写一个打印函数,无论其他ip核状态如何,只需要zynq的ip核参数设置对就可以了。

而且在反复试的过程中,还出了这个错误,翻译过来是生成失败:没有错误。excuse me?不过虽然报错了但是还是能综合通过

方法2:

这里推荐使用下面的方法。因为我是第一次做,不太熟,所以新建的流程比较复杂。后面熟了之后可以跳过①。

①构建例程

我第一步也是在原工程上修改,不过我的目的是确定哪些IP核要留下来,从上面的BD文件可以看到有很多IP核,但是对于自己的特定应用来说很多是没有用的。目前已知的是这三个IP核是肯定需要的,那个axi_hp1_interconnect是系统连线自己生成的,这个可以先不管。


对于其他的IP来说,需要从官方提供的SDK中的程序来确定哪些是需要的,这里可以先看我的另一篇博客,用ADI官方源码构建任意Xilinx平台下的ZYNQ程序(2)——软件程序调试篇,把no-OS的程序包下载下来。从no-OS-2019_R1→ad7616-sdz文件夹中的程序可以知道除了这三个IP核,其他的IP核都没有进行调用,而且中断也没在程序中初始化,所以我把除了这三个IP和一些时钟和复位模块留了下来,其他的ip、中断和没连线的引脚都删除掉。除此之外,zynq上还挂了一个200m时钟在FCLK_CLK1上,但是它并没有与其他模块相连所以也可以把它去掉。

对于其他的ADI芯片的例程最终留下来的模块可能和我的不相同,因为我需要用官方给的SDK的程序,所以我需要根据no-OS里面程序决定留什么下来。

因为删除了一些模块导致zynq核上的一些总线、时钟和复位接口空了出来,所以需要到zynq核中把这些总线、时钟和复位接口去掉选中,不然后面会出错。

按上面更改之后,按照对一般的BD文件进行操作。保存,validate design,然后generate output products(选global),最后删除BD文件的wrapper文件。删除wrapper之后保存工程,然后关掉vivado软件,一定要关掉然后再打开工程。这个时候再对BD文件重新生成wrapper并且让vivado自己管理和更新wrapper文件。

正常情况下如果我们创建wrapper文件选了让vivado自己管理和更新wrapper文件,我们按上面的操作后,wrapper会自己更新,但是我们删了很多模块,那些模块的接口仍然在wrapper文件中,证明没有更新成功。后面查了之后发现是vivado软件自身的问题。只有先删除wrapper,然后关掉重启软件,新生成的wrapper才会剔除多于的接口。假如不重启软件,无论怎么重新生成wrapper那些接口都会一直在。



按照上面的方法操作之后还要去修改工程的顶层文件,去掉多于的引脚和模块例化。因为我创建工程时是选的并行,所以顶层文件是system_top_pi,串行是system_top_si。大家根据新生成的wrapper去修改顶层文件system_top_pi,这里就不细讲怎么修改。同时把约束文件中那些没用到的引脚也删除掉。所有修改完后就能生成Bitstream。

上面做了这么多工作,我的目的就是要弄出一个只有我需要的模块,而且又能够生成Bitstream的工程版本,这样我在后面自己做BD文件时候假如出了错,能够很好的去定位问题在哪里

②自己新建工程

注意,按照上面的方法编译ADI的库文件有很大问题,在新建自己的工程前要自己重新再打包一次IP核。因为①中确定了需要哪些IP核,就可以完成我们的工程需要,所以重新打包IP只需要打包那两个就可以了

在搭建好软件平台,上fpga联合调试时,发现一直有问题(最终发现软件和硬件都有问题)。在查看IP核库文件时,结果发现编译库时很多库都缺了文件,这里截一个ADI的DMA的库,其他的库也有这种情况。


唯一的解决办法就是手动找到这些文件,并且加到路径里面。像正常构建FPGA工程那样添加源文件就行,不过这里重点说这些源文件都在哪里,尤其是其中有一个真的特别难找。下图中后面这个是模块的名称,下一个“搜索everything”软件,然后在里面输入要找的文件名称就行,一般模块名和.v文件名字一样。


其中有一个文件,直接搜索这个文件名fifo_address_sync会发现找不到,其实它的文件名是address_sync。

我当时是直接到github上去搜索这个名字。结果发现他的.v文件命名是address_sync。


在文件全部添加成功后,编译整个工程,然后打开这个.xml文件,开始包装ip核,把packeting steps列表每个有小红点的选项都merge changes一次即可,最后re-package ip




按照上面的操作把需要的IP都重新包装一次就可以新建工程了

自己新建工程时,建议和例程建在同一路径上,对于新手来说,这样后面不容易出错,因为我换过路径结果编译时报过IP核出问题。假如要修改文件夹名称,比如hdl-2019_r1改为ghdl,那一定要在你编译库文件之前改

如果看的仔细会发现我博客截图中的工程路径出现过两个,一个文件夹名称是ghdl,一个hdl-2019_r1。因为我以hdl-2019_r1命名,在后面联合调试时一直有问题,我怀疑编译时的警告会对我的结果有影响,所以我删除了我第一次以hdl-2019_r1命名的文件夹,然后重新解压官方源文件,改了文件夹名称,对所有的库进行了重新编译。(这篇博客写的早,有些截图更改方便的都改了,有些懒得重新截图就保留原来的了)

这是我自己新建的路径,新建工程的主控芯片选择我的xc7z020clg400-2

大家根据创建BD文件方法自行创建,这里不细讲。这里说一下怎么加IP核路径,我下面这张图是已经加好了的,路径直接定位到Library文件夹就行,它会自动把上面编译过的IP核包含进去(这张图就是我没改文件夹名称前截的)。

按照在①中构建的例程添加和设置ADI的IP的参数、设置zynq的ip核。例程的PS端添加了一些用不到的接口,在自己新建时可以去掉。下面是我自己留下来的PS端接口,我的开发板用的是UART1串口和电脑通信。自己新建的工程对ADI的IP核的配置和①中例程一样,但是对于zynq的ip核根据自己的板子来设置,对于PS端哪些要保留可以根据官方给的no-OS中的程序和自己的需求来斟酌。我下面保留的是我反复调试sdk中程序与bd文件,然后没问题后最终留下的,第一次新建可以保留官方例程中ps端接口,但是接口参数要按自己板子的实际情况来

在添加完模块并且完成连线后根据①中例程的ip核和引脚的命名来改自己新建的工程中这些东西的名字,这样就可以不用去修改顶层文件system_top_pi

在修改ddr和fixed_io的名字会发现改不了,可以先把连线时系统自己生成的DDR和FIXED_IO引脚删掉,然后自己make external,这个时候就可以修改这两个引脚的名字了。最后再把①中例程的顶层文件system_top_pi和约束文件加载到自己的工程,根据自己硬件平台修改引脚位号和引脚电平就可以了。

对于这15个脚,sdk中没有程序对他们控制,而且对于ad7616的控制也没有作用,所以,这15个脚我也去掉了。最后编译,生成Bitstream,导出硬件(包含Bitstream),launch SDK。这个时候硬件平台就搭建完毕。

用ADI官方源码构建任意Xilinx的ZYNQ平台下的ADI芯片控制程序(1)——硬件平台搭建篇相关推荐

  1. ADI官方源码快速搭建demo工程验证设计的正确性

    目录 1 ADI官方demo工程设计简介 2  ADI官方HDL源码介绍 2.1  HDL源码用户指导书:ADI Reference Designs HDL User Guide 2.2  C源代码下 ...

  2. Tomcat - 源码构建Tomcat 8.5.55 启动

    文章目录 官方地址 源码搭建分析 源码搭建步骤 (Maven管理) Step1. 新增maven管理文件 pom.xml Step2. 处理conf 和 webapps Step3. 导入IEDA 3 ...

  3. 从源码构建 MyBatis Generator(MBG)

    从源码构建 所有MyBatis Generator(MBG)发行版包括源代码,唯一的编译时间依赖关系在ant.jar上 - 用于成功编译包含的Ant任务.直接从源代码编译MBG - 只需将源解压缩到一 ...

  4. MoveIt 1 源码构建: Linux

    MoveIt 1 源码构建: Linux 从源代码安装MoveIt是向开源项目提供新特性.优化和bug修复的第一步. MoveIt主要在Linux上支持,特别是以下构建指令支持: Ubuntu 20. ...

  5. Java 通用代码生成器光 2.3.0 文明 Beta10 版发布介绍视频,支持从源码构建

    Java 通用代码生成器光 2.3.0 文明 Beta10 版发布介绍视频,支持从源码构建 Java 通用代码生成器光 2.3.0 文明 Beta10 版发布最新介绍视频,详细介绍 java 通用代码 ...

  6. Java 通用代码生成器光 2.3.0 文明 Beta10 版,支持从源码构建

    Java 通用代码生成器光 2.3.0 文明 Beta10 版,支持从源码构建 Java 通用代码生成器光 2.3.0 文明已发布 Beta10 版,支持从源码构建代码生成器.您可以装好 JDK 和 ...

  7. Android源码 —— 构建下载Android源码的虚拟机环境(Win7+VMware12+Ubuntu16)

    Android源码 -- 构建下载Android源码的虚拟机环境(Win7+VMware12+Ubuntu16) 本文将介绍从Win7系统开始一步步构建下载Android源码的虚拟机环境: **1.使 ...

  8. [HOW TO]-下载android官方源码

    介绍下载android官方源码的方式: 使用每月更新的初始化包 传统初始化方法 1.使用每月更新的初始化包 下载初始化包->repo sync wget -c https://mirrors.t ...

  9. Flink源码分析 - 源码构建

    本篇文章首发于头条号Flink源码分析 - 源码构建,欢迎关注我的头条号和微信公众号"大数据技术和人工智能"(微信搜索bigdata_ai_tech)获取更多干货,也欢迎关注我的C ...

最新文章

  1. 新手学习python的方法
  2. DIY华丽的放电效果!自制雅各布天梯的配置方案
  3. rtmp推流h264+aac
  4. 3目标检测的准确率_吊打YOLOv3!普林斯顿大学提出:CornerNetLite,基于关键点的实时且精度高的目标检测算法,已开源!...
  5. 人工合成维生素E和天然维生素E的区别
  6. 2020蓝桥杯省赛---java---A---2(既分数组)
  7. linux系统get命令详解,Ubuntu Linux系统下apt-get命令详解
  8. 如何用java写单链表_如何使用Java实现单链表?
  9. cnn加工是什么意思_天秤座R-CNN:全面平衡的目标检测器
  10. HDU 5351 MZL's Border (规律,大数)
  11. family album U.S.A 02
  12. linux 防火墙安装在哪,Linux下Shorewall防火墙安装和配置
  13. curl和libcurl的区别简介
  14. RemObjects_SDK平台远程处理框架
  15. 记录switch sxos TF卡游戏损坏(纯粹记录,很潦草,多多包涵)
  16. iOS资源汇总(长期更新)
  17. libtorch-gpu推理时占用CPU 100%问题解决
  18. Ubuntu 设置 samba共享文件夹
  19. HDB3码的编码解释(简单粗暴)
  20. jsp中input 隐藏的方法

热门文章

  1. 软件项目管理实验一附加
  2. 微信小游戏胶囊按钮适配
  3. 使用Cello部署HyperLedger超级账本
  4. 【创建Vue手脚架项目】
  5. m序列生成输入信号matlab,M序列的生成
  6. debian linux镜像下载,Debian Wheezy 7.7 发布,已提供镜像下载更新
  7. 对于大流量网站的流量优化
  8. linux nas 数据恢复,NAS网络存储数据误删了怎么恢复
  9. 用JS将两个数组的数据合并成一个数组对象
  10. 《趣味知识博文》小W与小L带你聊天式备考CDA Level Ⅰ(二)